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); }

 

 

 

 

 

 

 

 

}

}

}