Anıl ÖZEKŞİ tarafından oluşturulmuş olup, OTT, StochasticSlow, HottLott, HHV ve LLV yapıları kullanılmıştır.
2'li if kullanılmıştır.
OTT ve StochasticSlow indikatörünün alım bölgesinde olup olmadığına bakarak bu alım bölgesi HottLott ve HHV,LLV ile desteklenmiştir.
Sistemi VIOP sembollerde kullanabileceğiniz gibi, spot sembollerde de kullanabilirsiniz.
Sistem kripto para ile de çalışmaya uyumludur. Hem vadeli hem de vadeli kripto sembollerinde kullanabilirsiniz.
Dilerseniz Açığa Satış/Açığa Satış Kapama işlemlerinde de kullanabilirsiniz.
Sistem Short yönlü yazılmıştır, dilerseniz değiştirebilirsiniz.
İndikatörlerin değerlerini optimize edebilirsiniz.
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
using Matriks.AI;
using Matriks.AI.AiParameters;
using Matriks.AI.Data;
using Matriks.Trader.Core.TraderModels;
namespace Matriks.Lean.Algotrader
{
public class Ott_Stock_HHVLLV_Hott_Lott_SHORT : MatriksAlgo
{
// Strateji çalıştırılırken kullanacağımız parametreler. Eğer sembolle ilgili bir parametre ise,
// "SymbolParameter" ile, değilse "Parameter" ile tanımlama yaparız. Parantez içindeki değerler default değerleridir.
[SymbolParameter("GARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Min)]
public SymbolPeriod SymbolPeriod1;
[Parameter(1)]
public decimal OrderQuantity;
//LONG parametreleri
[Parameter(30)]
public int OttPeriod1;
[Parameter(8)]
public decimal OttOpt1;
[Parameter(MovMethod.VAR)]
public MovMethod OttMovMethod;
[Parameter(true)]
public bool OttSupportLine;
[Parameter(20)]
public int OttPeriod2;
[Parameter(1)]
public decimal OttOpt2;
[Parameter(500)]
public int StochasticslowPeriodK1;
[Parameter(300)]
public int StochasticslowPeriodSlowK1;
[Parameter(111)]
public int StochasticslowPeriodD1;
[Parameter(MovMethod.VAR)]
public MovMethod StochasticslowMovMethod;
[Parameter(5)]
public int HighesthighPeriod;
[Parameter(2)]
public int OttPeriod3;
[Parameter(0.9)]
public decimal OttOpt3;
[Parameter(10)]
public int HighesthighPeriod2;
[Parameter(40)]
public int OttPeriod4;
[Parameter(0.6)]
public decimal OttOpt4;
[Parameter(500)]
public int StochasticslowPeriodK2;
[Parameter(300)]
public int StochasticslowPeriodSlowK2;
[Parameter(111)]
public int StochasticslowPeriodD2;
[Parameter(5)]
public int HighesthighPeriod3;
[Parameter(2)]
public int OttPeriod5;
[Parameter(0.9)]
public decimal OttOpt5;
[Parameter(10)]
public int HighesthighPeriod4;
//LONG kapama Parametreleri
[Parameter(30)]
public int OttPeriod6;
[Parameter(0.8)]
public decimal OttOpt6;
[Parameter(500)]
public int StochasticslowPeriodK3;
[Parameter(300)]
public int StochasticslowPeriodSlowK3;
[Parameter(111)]
public int StochasticslowPeriodD3;
[Parameter(5)]
public int LowestLowPeriod;
[Parameter(2)]
public int OttPeriod7;
[Parameter(0.9)]
public decimal OttOpt7;
[Parameter(10)]
public int LowestLowPeriod2;
[Parameter(20)]
public int OttPeriod8;
[Parameter(1)]
public decimal OttOpt8;
[Parameter(500)]
public int StochasticslowPeriodK4;
[Parameter(300)]
public int StochasticslowPeriodSlowK4;
[Parameter(111)]
public int StochasticslowPeriodD4;
[Parameter(5)]
public int LowestLowPeriod3;
[Parameter(2)]
public int OttPeriod9;
[Parameter(0.9)]
public decimal OttOpt9;
[Parameter(10)]
public int LowestLowPeriod4;
// Gerekli zaman aralığı
[Parameter("09:36:00")]
public string Baslangic;
[Parameter("17:58:00")]
public string Bitis;
public bool FX_ZamanindaMI(DateTime zaman)
{
var bas = TimeSpan.Parse(Baslangic);
var bit = TimeSpan.Parse(Bitis);
return (zaman.TimeOfDay >= bas && zaman.TimeOfDay <= bit);
}
// # Gerekli zaman aralığı
OTT ott;
OTT ott2;
OTT ott3;
OTT ott4;
OTT ott5;
OTT ott6;
OTT ott7;
OTT ott8;
OTT ott9;
HighestHigh highestHigh;
HighestHigh highestHigh2;
HighestHigh highestHigh3;
HighestHigh highestHigh4;
LowestLow lowestLow;
LowestLow lowestLow2;
LowestLow lowestLow3;
LowestLow lowestLow4;
StochasticSlow stochasticSlow;
StochasticSlow stochasticSlow2;
StochasticSlow stochasticSlow3;
StochasticSlow stochasticSlow4;
public override void OnDataUpdate(BarDataEventArgs barData)
{
var zamanKontrolu = FX_ZamanindaMI(barData.BarData.Dtime);
var barData1 = GetBarData(Symbol, SymbolPeriod1);
var H = GetSelectedValueFromBarData(barData1, OHLCType.High);
var L = GetSelectedValueFromBarData(barData1, OHLCType.Low);
// açığa satış kapama
if (ott.Value[1][ott.CurrentIndex] < ott.Value[0][ott.CurrentIndex] && zamanKontrolu)
{
if (ott2.Value[1][ott2.CurrentIndex] > ott2.Value[0][ott2.CurrentIndex]
&& stochasticSlow.Value[0][stochasticSlow.CurrentIndex] > stochasticSlow.Value[1][stochasticSlow.CurrentIndex]
&& H > ott3.Value[0][ott3.CurrentIndex]
&& H > highestHigh2.Value[0][highestHigh2.CurrentIndex - 1])
{
SendMarketCloseShortOrder(Symbol, OrderQuantity);
Debug("Alış Emri Gönderildi.");
}
}
else
{
if (ott4.Value[1][ott4.CurrentIndex] > ott4.Value[0][ott4.CurrentIndex]
&& stochasticSlow2.Value[0][stochasticSlow2.CurrentIndex] > stochasticSlow2.Value[1][stochasticSlow2.CurrentIndex]
&& H > ott5.Value[0][ott5.CurrentIndex]
&& H > highestHigh4.Value[0][highestHigh4.CurrentIndex - 1])
{
SendMarketCloseShortOrder(Symbol, OrderQuantity);
Debug("Alış Emri Gönderildi.");
}
}
//açığa satış
if (ott.Value[1][ott.CurrentIndex] < ott.Value[0][ott.CurrentIndex] && zamanKontrolu)
{
if (ott6.Value[1][ott6.CurrentIndex] < ott6.Value[0][ott6.CurrentIndex]
&& stochasticSlow3.Value[0][stochasticSlow3.CurrentIndex] < stochasticSlow3.Value[1][stochasticSlow3.CurrentIndex]
&& L < ott7.Value[0][ott7.CurrentIndex]
&& L < lowestLow2.Value[0][lowestLow2.CurrentIndex - 1])
{
SendMarketShortSellOrder(Symbol, OrderQuantity);
Debug("Satış Emri Gönderildi.");
}
}
else
{
if (ott8.Value[1][ott8.CurrentIndex] < ott8.Value[0][ott8.CurrentIndex]
&& stochasticSlow4.Value[0][stochasticSlow4.CurrentIndex] < stochasticSlow4.Value[1][stochasticSlow4.CurrentIndex]
&& L < ott9.Value[0][ott9.CurrentIndex]
&& L < lowestLow4.Value[0][lowestLow4.CurrentIndex - 1])
{
SendMarketShortSellOrder(Symbol, OrderQuantity);
Debug("Satış Emri Gönderildi.");
}
}
}
public override void OnInit()
{
lowestLow = LowestLowIndicator(Symbol, SymbolPeriod1, LowestLowPeriod);
lowestLow2 = LowestLowIndicator(Symbol, SymbolPeriod1, LowestLowPeriod2);
lowestLow3 = LowestLowIndicator(Symbol, SymbolPeriod1, LowestLowPeriod3);
lowestLow4 = LowestLowIndicator(Symbol, SymbolPeriod1, LowestLowPeriod4);
highestHigh = HighestHighIndicator(Symbol, SymbolPeriod1, HighesthighPeriod);
highestHigh2 = HighestHighIndicator(Symbol, SymbolPeriod1, HighesthighPeriod2);
highestHigh3 = HighestHighIndicator(Symbol, SymbolPeriod1, HighesthighPeriod3);
highestHigh4 = HighestHighIndicator(Symbol, SymbolPeriod1, HighesthighPeriod4);
ott = OTTIndicator(Symbol, SymbolPeriod1, OHLCType.Close, OttPeriod1, OttOpt1, OttMovMethod, OttSupportLine);
ott2 = OTTIndicator(Symbol, SymbolPeriod1, OHLCType.Close, OttPeriod2, OttOpt2, OttMovMethod, OttSupportLine);
ott3 = OTTIndicator(highestHigh, OttPeriod3, OttOpt3, OttMovMethod, OttSupportLine);
ott4 = OTTIndicator(Symbol, SymbolPeriod1, OHLCType.Close, OttPeriod4, OttOpt4, OttMovMethod, OttSupportLine);
ott5 = OTTIndicator(highestHigh3, OttPeriod5, OttOpt5, OttMovMethod, OttSupportLine);
ott6 = OTTIndicator(Symbol, SymbolPeriod1, OHLCType.Close, OttPeriod6, OttOpt6, OttMovMethod, OttSupportLine);
ott7 = OTTIndicator(lowestLow, OttPeriod7, OttOpt7, OttMovMethod, OttSupportLine);
ott8 = OTTIndicator(Symbol, SymbolPeriod1, OHLCType.Close, OttPeriod8, OttOpt8, OttMovMethod, OttSupportLine);
ott9 = OTTIndicator(lowestLow3, OttPeriod9, OttOpt9, OttMovMethod, OttSupportLine);
stochasticSlow = StochasticSlowIndicator(Symbol, SymbolPeriod1, OHLCType.Close, StochasticslowPeriodK1, StochasticslowPeriodD1, StochasticslowPeriodSlowK1, StochasticslowMovMethod);
stochasticSlow2 = StochasticSlowIndicator(Symbol, SymbolPeriod1, OHLCType.Close, StochasticslowPeriodK2, StochasticslowPeriodD2, StochasticslowPeriodSlowK2, StochasticslowMovMethod);
stochasticSlow3 = StochasticSlowIndicator(Symbol, SymbolPeriod1, OHLCType.Close, StochasticslowPeriodK3, StochasticslowPeriodD3, StochasticslowPeriodSlowK3, StochasticslowMovMethod);
stochasticSlow4 = StochasticSlowIndicator(Symbol, SymbolPeriod1, OHLCType.Close, StochasticslowPeriodK4, StochasticslowPeriodD4, StochasticslowPeriodSlowK4, StochasticslowMovMethod);
SendOrderSequential(true, Side.Buy);
WorkWithPermanentSignal(true);
}
/// <summary>
/// Strateji durdurulduğunda bu fonksiyon tetiklenir.
/// </summary>
public override void OnStopped()
{
}
/// <summary>
/// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir
/// </summary>
public override void OnInitCompleted()
{
}
/// <summary>
/// SetTimerInterval fonksiyonu ile belirtilen sürede bir bu fonksiyon tetiklenir.
/// </summary>
public override void OnTimer()
{
}
}
// /// AÇIĞA SAT
//if(MOV(C,OPT1,VAR)<OTT(C,OPT1,OPT2),
//MOV(C,OPT14,VAR)<OTT(C,OPT14,OPT15) AND
//STOSK(OPT16,OPT17,111,VAR)<STOSD(OPT16,OPT17,111,VAR) AND
//L<OTT(LLV(L,OPT18/2),2,OPT8) AND
//L<REF(LLV(L,OPT18),-1),
//MOV(C,OPT19,VAR)<OTT(C,OPT19,OPT20) AND
//STOSK(OPT21,OPT22,111,VAR)<STOSD(OPT21,OPT22,111,VAR) AND
//L<OTT(LLV(L,OPT23/2),2,OPT8) AND
//L<REF(LLV(L,OPT23),-1)) AND
//((HOUR()=09 AND MINUTE()>=36) OR HOUR()>=10) AND ((HOUR()=17 AND MINUTE()<=58) OR HOUR()<=16)
//--------------------------------------------------------------------------------------
// AÇIK POZİSYON KAPAT
//if(MOV(C,OPT1,VAR)<OTT(C,OPT1,OPT2),
//MOV(C,OPT3,VAR)>OTT(C,OPT3,OPT4) AND
//STOSK(OPT5,OPT6,111,VAR)>STOSD(OPT5,OPT6,111,VAR) AND
//H>OTT(HHV(H,OPT7/2),2,OPT8) AND
//H>REF(HHV(H,OPT7),-1),
//MOV(C,OPT9,VAR)>OTT(C,OPT9,OPT10) AND
//STOSK(OPT11,OPT12,111,VAR)>STOSD(OPT11,OPT12,111,VAR) AND
//H>OTT(HHV(H,OPT13/2),2,OPT8) AND
//H>REF(HHV(H,OPT13),-1)) AND
//((HOUR()=09 AND MINUTE()>=36) OR HOUR()>=10) AND ((HOUR()=17 AND MINUTE()<=58) OR HOUR()<=16)
}
merhabalar, bu sistem ile Anıl Bey'in diğer sistemleri ile ilgili sitenizde toplam 3 adet sistem var. Hepsi TOTT ve SOTT yapısı ile kurgulanmış. Ancak aralarında şöyle bir farklılık var; if'li cümle kalıplarında [] ifadesi içine aynı kalıplar için bazen 0,1 veya 2 giriliyor. Bu konuda bir sistematik yok ve bu nedenle Prime'da yaptığım backtestler ile İQ'da yaptığım testler uyuşmuyor, ilgisiz sonuçlar geliyor karşıma. Bu kalıpların doğrusu nedir ? Mesela yukarı örnekte OTT grubu için sırasıyla [1] ve [0] kullanılmış iken, stokastik grubu için tam tersi tercih edilmiştir.