27.06.2022
31
3
516
100

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 Long 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.AI;
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
{
	public class OTT_STOCK_HHVLLV_HOTT_LOTT_LONG : MatriksAlgo
	{
		[SymbolParameter("BTC_USDT_FBIN")]
			public string Symbol;
		[Parameter(SymbolPeriod.Min5)]
			public SymbolPeriod SymbolPeriod1;
		[Parameter(0.003)]
			public decimal BuyOrderQuantity;
		[Parameter(0.003)]
			public decimal SellOrderQuantity;
		//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;

		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 OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod1);
			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);


			// Gerekli açığa satış
			WorkWithPermanentSignal(true);
			SendOrderSequential(true, HangiIslemleBaslasin);
			SendOrderSequentialForShort(true, Side.All);
			// #Gerekli açığa satış 

			// Gerekli - Kaldıraç
			SetLeverage(Symbol, Kaldirac); // kaldıraç oranı
			SetLeverageType(Symbol, true); // kaldıraç tipi - true isolated, false cross
			// #Gerekli - Kaldıraç 

			// Gerekli - Timestamp
			SetTimerInterval(1);
			// #Gerekli - Timestamp

		}

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			var barData1 = GetBarData(Symbol, SymbolPeriod1);
			var H = GetSelectedValueFromBarData(barData1, OHLCType.High);
			var L = GetSelectedValueFromBarData(barData1, OHLCType.Low);

			// LONG
			if (ott.Value[1][ott.CurrentIndex] > ott.Value[0][ott.CurrentIndex])
			{
				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])
				{
					// Gerekli açığa satış
					FX_Alis(Symbol, BuyOrderQuantity);
					// #Gerekli açığa satış
				}
			}

			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])
				{
					FX_Alis(Symbol, BuyOrderQuantity);
					// #Gerekli açığa satış
				}
			}

			//LONG KAPAMA
			if (ott.Value[1][ott.CurrentIndex] > ott.Value[0][ott.CurrentIndex])
			{
				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])
				{
					// Gerekli açığa satış
					FX_Satis(Symbol, SellOrderQuantity);
					// #Gerekli açığa satış
				}
			}
			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])
				{
					FX_Satis(Symbol, SellOrderQuantity);
					// #Gerekli açığa satış
				}
			}
		}

		// Gerekli açığa satış
		[Parameter(3)]
			public int Kaldirac;
		[Parameter(false)]
			public bool AcigaSatisYapilsin;
		[Parameter(false)]
			public bool AksamSeansiniDahilEt;
		[Parameter(Side.Buy)]
			public Side HangiIslemleBaslasin;

		public void FX_Alis(string Symbol, decimal quantity)
		{
			if (LastOrderSide.Obj != Side.Buy)
			{
				var _quantity = (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin || sentetikEmirdenMI) ? quantity:(LastOrderSideForShort.Obj == Side.All) ? quantity:quantity * 2; SendMarketOrder(Symbol, _quantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
				Debug("Alış emri gönderildi.[ " + _quantity + " adet ]");
				LastOrderSideForShort = LastOrderSide;
				sentetikEmirdenMI = false;
			}
		}

		public void FX_Satis(string Symbol, decimal quantity)
		{
			if (LastOrderSide.Obj != Side.Sell)
			{
				var _quantity = (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin || sentetikEmirdenMI) ? quantity:(LastOrderSideForShort.Obj == Side.All) ? quantity:quantity * 2; SendMarketOrder(Symbol, _quantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
				Debug("Satış emri gönderildi.[ " + _quantity + " adet ]");
				LastOrderSideForShort = LastOrderSide;
				sentetikEmirdenMI = false;
			}
		}

		bool sentetikEmirdenMI = false;

		public override void OnSyntheticOrderTriggered(SyntheticAlgoOrder sOrder)
		{
			if (sOrder.EnableOrderSending)
			{
				if (AcigaSatisYapilsin)
				{
					LastOrderSide.Obj = Side.All;
					sentetikEmirdenMI = true;
				} Debug("Sentetik emir tetiklendi");
			}
		}
		// #Gerekli açığa satış 

		// Gerekli - Timestamp
		public class OrderListTimestamp
		{
			public string ID;
			public string Symbol;
			public decimal Adet;
			public decimal Fiyat;
			public OrdType EmirTipi;
			public OrderSide orderSide;
			public string EmirYonu;
			public DateTime TetiklenmeZamani;
			public int Sayac;
			public bool AktifMI;
		}

		Dictionary<string, OrderListTimestamp> timestampDict = new Dictionary<string, OrderListTimestamp>();

		[Parameter(3)]
			public int AyniEmirKacSeferGonderilsin;
		[Parameter(10)]
			public int KacSaniyeSonraTekrarGonderilsin;

		string orderIDTimestamp = string.Empty;

		// #Gerekli
		public override void OnTimer()
		{
			// Gerekli - Timestamp
			var tutt = timestampDict.Where(x => x.Value.AktifMI == true && DateTime.Now >= x.Value.TetiklenmeZamani);

			if (tutt.Count() >0)
			{
				foreach (var deger in tutt)
				{
					LastOrderSide.Obj = deger.Value.orderSide == OrderSide.Buy? Side.Sell:Side.Buy;

					if (deger.Value.EmirTipi.Obj == OrdType.Limit)
					{
						orderIDTimestamp = SendLimitOrder(deger.Value.Symbol, deger.Value.Adet, deger.Value.orderSide, deger.Value.Fiyat);
						Debug(deger.Value.EmirYonu + " emri tekrar gönderildi.");
					}
					else if (deger.Value.EmirTipi.Obj == OrdType.Market)
					{
						orderIDTimestamp = SendMarketOrder(deger.Value.Symbol, deger.Value.Adet, deger.Value.orderSide);
						Debug(deger.Value.EmirYonu + " emri tekrar gönderildi.");
					}
					deger.Value.ID = orderIDTimestamp;
					deger.Value.AktifMI = false;
					timestampDict[orderIDTimestamp] = deger.Value;
					timestampDict.Remove(deger.Key);
				}
			}

			// #Gerekli - Timestamp
		}

		public override void OnOrderUpdate(IOrder order)
		{
			// Gerekli - Timestamp
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{
				if (timestampDict.ContainsKey(order.CliOrdID))
				{
					timestampDict.Remove(order.CliOrdID);
					Debug("Timestamp hatasına takılan emriniz gerçekleşti.");
				}
			}

			if (order.OrdStatus.Obj == OrdStatus.Rejected)
			{
				if (!timestampDict.ContainsKey(order.CliOrdID))
				{
					OrderListTimestamp orderList = new OrderListTimestamp();
					orderList.ID = order.CliOrdID;
					orderList.Symbol = order.Symbol;
					orderList.Adet = order.OrderQty;
					orderList.Fiyat = order.Price;
					orderList.EmirTipi = order.OrdType;
					orderList.TetiklenmeZamani = DateTime.Now;
					orderList.Sayac = 0;
					orderList.AktifMI = false;

					if (order.Side.Obj == Side.Buy)
					{
						orderList.orderSide = OrderSide.Buy;
						orderList.EmirYonu = "Alış";
					}

					else
					{
						orderList.orderSide = OrderSide.Sell;
						orderList.EmirYonu = "Satış";
					} timestampDict[order.CliOrdID] = orderList;
				}
				if (order.Text.Contains("Timestamp"))
				{
					if (timestampDict.ContainsKey(order.CliOrdID))
					{
						if (timestampDict[order.CliOrdID].Sayac < AyniEmirKacSeferGonderilsin)
						{
							timestampDict[order.CliOrdID].TetiklenmeZamani = DateTime.Now.AddSeconds(KacSaniyeSonraTekrarGonderilsin);
							timestampDict[order.CliOrdID].Sayac++;
							timestampDict[order.CliOrdID].AktifMI = true;
							Debug("Emir Timestamp hatasından dolayı iptal oldu tekrar gönderilecek");
						}
						else
						{
							timestampDict.Remove(order.CliOrdID);
							Debug("Aynı emir üst üste " + AyniEmirKacSeferGonderilsin + " defa gönderildi.");
						}
					}
				}
			}
			// #Gerekli - Timestamp
		}
	}
}

31 Yorum

optimizasyon aralıklarını da belirtebilir misiniz rica etsem, teşekkürler.

  • 04.07.2022 23:44
  • 0

Merhabalar, OTTler de OttPeriod için10-40 arası adım 10 ve Opt için 0.2-1 arası 0.2 adım Stochastic içinse 300-600 arası adım 100 yazıp deneyebilirsiniz, HOTT ve LOTT içinse 10-20 arası adım 2 kullanabilirsiniz. İyi çalışmalar.

  • 14.07.2022 08:33
  • 2

merhaba belirttiğiniz parametrelerle bactest yapmak istediğimde optimizasyon sayısı 2,147,483,647 den fazla olamaz şeklinde hata veriyor yanlışım nerede acaba yardımcı olabilirmisiniz teşekkürler.

  • 20.07.2022 18:17
  • 0

Merhabalar, Hatanın görüntüsünü iqdestek@matriksdata.com adresine iletebilirseniz çok memnun oluruz. Yardımcı olmaya çalışalım. İyi çalışmalar.

  • 21.07.2022 16:06
  • 1

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 ?

  • 31.08.2022 01:17
  • 0

bu stratejiyi sadece LONG yönlü değilde; buy sinyali gelince long açsın ve sell sinyali gelince pozisyonu kapatsın. aynı şekilde sell sinyali gelince short açılsın ve buy gelince pozisyonu kapatsın. şekline çevirme mümkün olur mu ? sürekli tekrarlasın işlemi. teşekkür ederim iyi çalışmalar

  • 16.07.2022 14:58
  • 2

Merhabalar, Sistem mail adresinize yönlendirilmiştir. İyi çalışmalar.

  • 18.07.2022 08:50
  • 0

Merhabalar sistemi bende rica edebilir miyim?

  • 18.07.2022 12:26
  • 0

Merhabalar, Sistem mail adresinize yönlendirilecektir. İyi çalışmalar.

  • 21.07.2022 16:07
  • 1

Zahmet olmazsa bende alabilirmiyim.

  • 31.07.2022 17:10
  • 0

merhabalar aynı strajiyi gönderebilirmisinz ?

  • 01.08.2022 20:26
  • 0

Merhabalar, Sistem mail adresinize yönlendirilmiştir. İyi çalışmalar.

  • 02.08.2022 11:59
  • 0

Merhabalar, Sistem mail adresinize yönlendirilmiştir. İyi çalışmalar.

  • 02.08.2022 11:59
  • 0

Merhabalar sistemi bende rica edebilir miyim?

  • 03.08.2022 21:16
  • 0

Merhabalar, Sistem mail adresinize yönlendirilecektir. İyi çalışmalar.

  • 05.08.2022 17:19
  • 1

Merhabalar, Sistem mail adresinize yönlendirilecektir. İyi çalışmalar.

  • 05.08.2022 17:20
  • 1

Aşiyan hanım sistemi ben de bu şekilde rica edebilir miyim?

  • 19.08.2022 14:29
  • 0

merhabalar aynı strajiyi gönderebilirmisinz ?

  • 29.08.2022 17:50
  • 0

Merhaba. sistemi bende rica ediyorum. Yönlendirebilir misiniz?

  • 02.09.2022 17:03
  • 0

merhabalar , bahsi geçen sistemi ben de rica edebilir miyim mümkünse? teşekkür ederim

  • 21.12.2022 21:50
  • 0

Merhabalar, Sistemi bende rica edebilir miyim.

  • 20.02.2023 15:36
  • 0

Merhaba, sistemi paylaşabilir misiniz, iyi çalışmalar.

  • 04.04.2023 12:08
  • 0

Merhaba. Bu sistemi ben de rica edebilir miyim ?

  • 26.02.2024 23:46
  • 0

Merhaba sistemi bende alabilir miyim

  • 07.05.2024 19:58
  • 0

Merhaba sistemi bende alabilir miyim

  • 07.05.2024 19:58
  • 0

Merhabalar, sistemi bana da gönderebilir misiniz? Teşekkürler

  • 26.07.2024 01:34
  • 0

Merhabalar sistemi bende rica edebilir miyim? Bir de yukarıda ifade edildiği gibi belirttiğiniz parametrelerle backtest yapmak istediğimde optimizasyon sayısı 2,147,483,647 gibi çok fazla, bu konuda da yardımcı olur musunuz, teşekkürler.

  • 30.07.2022 21:07
  • 1

Merhabalar, Dilerseniz optimizasyon parametrelerini değiştirebilirsiniz.

  • 02.08.2022 11:55
  • 0

Merhaba, optimizasyon parametrelerinde aralıkları kısa tutabilir(ilk ve son değerleri) yada adım parametresinin değerlerini arttırarak deneyebilirsiniz.

  • 28.02.2024 10:24
  • 0
Es

Merhaba , al sat sistemini bana da gönderebilir misiniz?

  • 26.03.2024 16:33
  • 1

Merhaba bu sistemi tradingwiev da kullanabilir miyim

  • 07.05.2024 19:56
  • 0