Aşağıda ki indikatörü yazdığımda indikatörün bazen 1 alması gereken yerde birkac bar indikator 1 değerini aldıktan sonra koşul sağlanmaya devam etsede bir anda 1 bar sonra 0 değerini alıp sonra tekrar 1 değerini alıyor. Aynı şekilde -1 koşulunda da aynı şekilde. Bunun sebebi nedir acaba? Yardimci olabilirseniz sevinirim.
using System;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel;
using Matriks.Data.Identifiers;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.AlgoTrader;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Trader.Core.TraderModels;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
namespace Matriks.Lean.Algotrader
{
// indikatorun dogru sonuc vermesi icin 1 bar otelenmesi gerekmektedir.
[IndicatorInformationAttribute("rsiKapi2", IndicatorDrawingArea.NewWindow)]
[IndicatorLineInformationAttribute(new []
{
"rsiKapi2"
}
)]
public class rsiKapi2 : MatriksIndicator
{
[DefaultValue(10)]
public int hhPeriod
{
get; set;
}
[DefaultValue(10)]
public int llPeriod
{
get; set;
}
HighestHigh hh;
LowestLow ll;
MOV mov;
RSI rsi;
public sealed override void OnInit()
{
rsi = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, 14);
mov = MOVIndicator(rsi, 10, MovMethod.Simple);
hh = HighestHighIndicator(mov, hhPeriod);
ll = LowestLowIndicator(mov, llPeriod);
}
public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
{
if (currentBar < 1)
{
return;
}
decimal h1= hh.Value[0][hh.CurrentIndex -1];
decimal l1= ll.Value[0][ll.CurrentIndex -1];
if(mov.Value[0][mov.CurrentIndex] > h1)
{
SetLine(0,currentBar,1);
}
else if(mov.Value[0][mov.CurrentIndex] < l1)
{
SetLine(0,currentBar,-1);
}
else
{SetLine(0,currentBar,0); }
}
}
}