Merhabalar,
Aşağıdaki indikatörü lütfen inceleyiniz.
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;
/*
BBfactor:=Input("BBfactor",0,20,1.5);
KCfactor:=Input("KCfactor",0,20,1.5);
BBperiod:=Input("BBperiod",1,500,20);
KCperiod:=Input("KCperiod",1,500,20);
signalperiod:=Input("signalperiod",1,500,5);
bb:=bband(c,BBperiod,s,BBfactor);
bbdw:=bbandbot(c,BBperiod,s,BBfactor);
bbup:=bbandtop(c,BBperiod,s,BBfactor);
KCma:=mov(c,KCperiod,s);
range:=H-L;
rangema:=mov(range,KCperiod,s);
upperKC:=KCma+rangema*KCfactor;
lowerKC:=KCma-rangema*KCfactor;
SQMI:=LINEARREG(C-((HHV(H,KCperiod)+LLV(L,KCperiod))/2+KCma)/2,KCperiod);
signal:=mov(SQMI,signalperiod,s);
SQMI;
signal;
0
*/
namespace Matriks.Lean.Algotrader
{
//Ilk parametre indikatörün adı, sınıfın adıyla aynı olmalıdır.
//Ikinci parametre indikatörün Dataserisinin üzerine mi yeni pencereye mi ekleneceğini belirtir. Yeni pencere için ->IndicatorDrawingArea.NewWindow , Data Serisi için IndicatorDrawingArea.OnDataSeries
[IndicatorInformationAttribute("SQMIV2", IndicatorDrawingArea.NewWindow)]
//Indikatörün çizgilerinin isimleri
[IndicatorLineInformationAttribute(new []
{
"SQMI(0,1)", "SQMI2(0,1)"
})]
public class SQMIV2 : MatriksIndicator
{
/*
BBfactor:=Input("BBfactor",0,20,1.5);
KCfactor:=Input("KCfactor",0,20,1.5);
BBperiod:=Input("BBperiod",1,500,20);
KCperiod:=Input("KCperiod",1,500,20);
signalperiod:=Input("signalperiod",1,500,5);
*/
//Indicator opsiyon panelinde değerleri değiştirebildiğimiz parametreler. Int, Bool, Decimal ve Enum değerleri alabilir.Tüm değişken tiplerini DefaultValue ile tanımlarız.
[DefaultValue(20)]
public int KCperiod
{
get; set;
}
[DefaultValue(1.5)]
public decimal KCfactor
{
get; set;
}
[DefaultValue(5)]
public int signalperiod
{
get; set;
}
LRL lrl;
MOV KCma, rangema, signal;
public sealed override void OnInit()
{
lrl = new LRL(KCperiod);
KCma = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, KCperiod, MovMethod.Simple);
signal = new MOV(signalperiod, MovMethod.Simple);
rangema = new MOV(KCperiod, MovMethod.Simple);
}
decimal close, range, upperKC, lowerKC, SQMI;
public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
{
/*
range:=H-L;
rangema:=mov(range,KCperiod,s);
upperKC:=KCma+rangema*KCfactor;
lowerKC:=KCma-rangema*KCfactor;
SQMI:=LINEARREG(C-((HHV(H,KCperiod)+LLV(L,KCperiod))/2+KCma)/2,KCperiod);
SQMI
*/
if (Instrument.SymbolBarData.Close.ContainsKey(currentBar))
{
range = Instrument.SymbolBarData.High[currentBar] - Instrument.SymbolBarData.Low[currentBar];
close = Instrument.SymbolBarData.Close[currentBar];
}
rangema.Update(range, currentBar, barDateTime);
lrl.Update(close - (((HighestHigh(OHLCType.High, KCperiod) + LowestLow(OHLCType.Low, KCperiod)) / 2) + KCma.CurrentValue) / 2, currentBar, barDateTime);
signal.Update(lrl.CurrentValue, currentBar, barDateTime);
SetLine(0, currentBar, lrl.CurrentValue);
SetLine(1, currentBar, signal.CurrentValue);
}
}
}
İyi çalışmalar.