0 beğenilme 0 beğenilmeme
2,505 kez görüntülendi

Merhaba, aşağıdaki kodu Matriks Gold da sorunsuz kullanıyorum. 


---------------------------KURGU-----------------------------------------

AL;
if(MOV(C,opt1,VAR)>OTT(C,opt1,7),
MOV(C,opt1,VAR)>OTT(C,opt1,opt2)*(1+0.0008) AND STOSK(opt3,opt4,111,VAR)+1000>OTT(STOSK(opt3,opt4,111,VAR)+1000,2,0.3) AND 
H>REF(HHV(H,20),-1) AND H>OTT(HHV(H,20/2),2,0.5),
MOV(C,opt1,VAR)>OTT(C,opt1,3.5) AND MOV(C,opt1,VAR)>OTT(C,opt1,opt2)*(1+0.0008) AND STOSK(opt3,opt4,111,VAR)+1000>OTT(STOSK(opt3,opt4,111,VAR)+1000,2,0.3) AND 
H>REF(HHV(H,20),-1) AND H>OTT(HHV(H,20/2),2,0.5)) 

SAT
if(MOV(C,opt1,VAR)>OTT(C,opt1,7),
MOV(C,opt1,VAR)<OTT(C,opt1,opt2)*(1-0.0008) AND STOSK(OPT3,OPT4,111,VAR)+1000<OTT(STOSK(OPT3,OPT4,111,VAR)+1000,2,0.3) AND 
L<REF(LLV(L,20),-1) AND L<OTT(LLV(L,20/2),2,0.5),
MOV(C,opt1,VAR)<OTT(C,opt1,opt2)*(1-0.0008) AND STOSK(OPT3,OPT4,111,VAR)+1000<OTT(STOSK(OPT3,OPT4,111,VAR)+1000,2,0.3) AND 
L<REF(LLV(L,20),-1) AND L<OTT(LLV(L,20/2),2,0.5)) 

-------------------------------------------------------------------------------

 

sizden ricam;

1- bu kurguyu spot al-sat olarak BIST senetleri ve coinlerde kullanmak için bir strateji,

2- bu kurguyu BIST viop ve coin piyasasında long/short yönlü işlemlerde kullanmak için bir strateji,

3- sadece BIST de "((HOUR()=10 AND MINUTE()>=03) OR HOUR()>=11) AND ((HOUR()=17 AND MINUTE()<=58) OR HOUR()<=16)" zaman yaması ilavesi


edit: ben bir şey hazırladım. hhv kapısı da ekledim. ama bazı şeyler sanırım kaldıraçlı piyasalar için gerekli. 

 

using System;
using System.Collections.Generic;
using System.Linq;
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;

/* 
AL
if(MOV(C,opt1,VAR)>OTT(C,opt1,opt7),
	MOV(C,opt1,VAR)>OTT(C,opt1,opt2)*(1+opt5) AND STOSK(opt3,opt4,333,VAR)+1000>OTT(STOSK(opt3,opt4,33,VAR)+1000,2,opt6),
	MOV(C,opt1,VAR)>OTT(C,opt1,opt8) AND MOV(C,opt1,VAR)>OTT(C,opt1,opt2)*(1+opt5) AND STOSK(opt3,opt4,333,VAR)+1000>OTT(STOSK(opt3,opt4,33,VAR)+1000,2,opt6))
	
SAT
if(MOV(C,opt1,VAR)>OTT(C,opt1,opt7),
	MOV(C,opt1,VAR)<OTT(C,opt1,opt2)*(1-opt5) AND STOSK(opt3,opt4,333,VAR)+1000<OTT(STOSK(opt3,opt4,33,VAR)+1000,2,opt6),
	MOV(C,opt1,VAR)<OTT(C,opt1,opt2)*(1-opt5) AND STOSK(opt3,opt4,333,VAR)+1000<OTT(STOSK(opt3,opt4,33,VAR)+1000,2,opt6))
*/

namespace Matriks.Lean.Algotrader
{
	public class TOTTSOTTHHV : 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.


		[Parameter(1)]
		public decimal BuyOrderQuantity;

		[Parameter(1)]
		public decimal SellOrderQuantity;

		[Parameter(false)]
		public bool AcigaSatisYapilsin;

		[Parameter(false)]
		public bool AksamSeansiniDahilEt;





		[Parameter("THYAO")]
		public string Symbol;

		[Parameter(SymbolPeriod.Min)]
		public SymbolPeriod SymbolPeriod;

		[Parameter(20)]
		public int OPT1;

		[Parameter(1.0)]
		public decimal OPT2;

		[Parameter(500)]
		public int OPT3;

		[Parameter(200)]
		public int OPT4;

		[Parameter(0.0008)]
		public decimal OPT5;

		[Parameter(0.2)]
		public decimal OPT6;

		[Parameter(7)]
		public int OPT7;

		[Parameter(3.5)]
		public decimal OPT8;

		[Parameter(20)]
			public int OPT9;

		[Parameter(20)]
			public int OPT10;

		[Parameter(20)]
			public int OPT11;

		[Parameter(20)]
			public int OPT12;


		TOTT tott;
		SOTT sott;
		OTT ott;

		HighestHigh HHV;
		HighestHigh HHV1;
		LowestLow LLV;
		LowestLow LLV1;

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			var barData1 = GetBarData(Symbol, SymbolPeriod);

			var h = GetSelectedValueFromBarData(barData1, OHLCType.High);
			var l = GetSelectedValueFromBarData(barData1, OHLCType.Low);

			/* AL
				if(MOV(C,opt1,VAR)>OTT(C,opt1,opt7),
					MOV(C,opt1,VAR)>OTT(C,opt1,opt2)*(1+opt5) AND STOSK(opt3,opt4,333,VAR)+1000>OTT(STOSK(opt3,opt4,33,VAR)+1000,2,opt6) AND 
					H>REF(HHV(H,opt9),-1),
					MOV(C,opt1,VAR)>OTT(C,opt1,opt8) AND MOV(C,opt1,VAR)>OTT(C,opt1,opt2)*(1+opt5) AND STOSK(opt3,opt4,333,VAR)+1000>OTT(STOSK(opt3,opt4,33,VAR)+1000,2,opt6) AND
					H>REF(HHV(H,opt10),-1))
			*/

			if (ott.Value[1][ott.CurrentIndex] >ott.Value[0][ott.CurrentIndex])
			{
				if (tott.Value[0][tott.CurrentIndex] > tott.Value[1][tott.CurrentIndex] &&
					sott.Value[0][sott.CurrentIndex] > sott.Value[1][sott.CurrentIndex] &&
					h>HHV.Value[0][HHV.CurrentIndex -1] &&
					LastOrderSide.Obj != Side.Buy)
				{
					FX_Alis();
					//					Senntetik emirler tanımlanıyor	
					//					StopLoss(Symbol, SyntheticOrderPriceType.Percent, 3);
					//					TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 3);
				}
			}else
			{
				if (ott.Value[1][ott.CurrentIndex] > ott.Value[0][ott.CurrentIndex] &&
					tott.Value[0][tott.CurrentIndex] > tott.Value[1][tott.CurrentIndex] &&
					sott.Value[0][sott.CurrentIndex] > sott.Value[1][sott.CurrentIndex] &&
					h>HHV1.Value[0][HHV1.CurrentIndex -1] &&
					LastOrderSide.Obj != Side.Buy)
				{
					FX_Alis();
					//					Senntetik emirler tanımlanıyor	
					//					StopLoss(Symbol, SyntheticOrderPriceType.Percent, 3);
					//					TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 3);
				}
			}


			/* SAT
				if(MOV(C,opt1,VAR)>OTT(C,opt1,opt7),
					MOV(C,opt1,VAR)<OTT(C,opt1,opt2)*(1-opt5) AND STOSK(opt3,opt4,333,VAR)+1000<OTT(STOSK(opt3,opt4,33,VAR)+1000,2,opt6) AND
					L<REF(LLV(L,opt11),-1),
					MOV(C,opt1,VAR)<OTT(C,opt1,opt2)*(1-opt5) AND STOSK(opt3,opt4,333,VAR)+1000<OTT(STOSK(opt3,opt4,33,VAR)+1000,2,opt6) AND 
					L<REF(LLV(L,opt12),-1))
			*/
			if (ott.Value[1][ott.CurrentIndex] >ott.Value[0][ott.CurrentIndex])
			{
				if (tott.Value[0][tott.CurrentIndex] < tott.Value[2][tott.CurrentIndex] &&
					sott.Value[0][sott.CurrentIndex] < sott.Value[1][sott.CurrentIndex] &&
					l<LLV.Value[0][LLV.CurrentIndex -1] &&
					LastOrderSide.Obj != Side.Sell)
				{
					FX_Satis();
					//					Senntetik emirler tanımlanıyor	
					//					StopLoss(Symbol, SyntheticOrderPriceType.Percent, 3);
					//					TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 3);
				}
			}else
			{
				if (tott.Value[0][tott.CurrentIndex] < tott.Value[2][tott.CurrentIndex] &&
					sott.Value[0][sott.CurrentIndex] < sott.Value[1][sott.CurrentIndex] &&
					l<LLV1.Value[0][LLV1.CurrentIndex -1] &&
					LastOrderSide.Obj != Side.Sell)
				{
					FX_Satis();
					//					Senntetik emirler tanımlanıyor	
					//					StopLoss(Symbol, SyntheticOrderPriceType.Percent, 3);
					//					TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 3);
				}
			}

		}

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			ott = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, OPT1, OPT7, MovMethod.VAR, true);
			tott = TOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, OPT1, OPT2, OPT5, MovMethod.Variable);
			sott = SOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, OPT3, OPT4, 2, OPT6, MovMethod.Variable, MovMethod.Variable);

			HHV = HighestHighIndicator(Symbol, SymbolPeriod, 20);
			HHV1 = HighestHighIndicator(Symbol, SymbolPeriod, 20);
			LLV = LowestLowIndicator(Symbol, SymbolPeriod, 20);
			LLV1 = LowestLowIndicator(Symbol, SymbolPeriod, 20);

			// Gerekli			
			WorkWithPermanentSignal(true);

			if (AcigaSatisYapilsin)
			{
				SendOrderSequential(true, Side.All);
			}else
			{
				SendOrderSequential(true, Side.Buy);
			}
		}



		List<string> orderIDList = new List<string>();

		string orderID;

		public void FX_Alis()
		{
			if (LastOrderSide.Obj != Side.Buy)
			{
				if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
				{
					orderID = SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
					orderIDList.Add(orderID);
					Debug("Alış emri gönderildi.[ " + BuyOrderQuantity + " adet ]");
				}else
				{
					// pozsiyon kapat ve al
					orderID = SendMarketOrder(Symbol, BuyOrderQuantity * 2, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
					orderIDList.Add(orderID);
					Debug("Alış emri gönderildi.[ " + (BuyOrderQuantity * 2) + " adet ]");
				}
			}
		}

		public void FX_Satis()
		{
			if (LastOrderSide.Obj != Side.Sell)
			{
				if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
				{
					orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
					orderIDList.Add(orderID);
					Debug("Satış emri gönderildi.[ " + (SellOrderQuantity) + " adet ]");
				}else
				{
					orderID = SendMarketOrder(Symbol, SellOrderQuantity * 2, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
					orderIDList.Add(orderID);
					Debug("Satış emri gönderildi.[ " + (SellOrderQuantity * 2) + " adet ]");
				}
			}
		}

		public override void OnOrderUpdate(IOrder order)
		{
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{
				if (!orderIDList.Contains(order.CliOrdID) && AcigaSatisYapilsin)
				{
					LastOrderSide.Obj = Side.All;
					Debug("Sentetik emir tetiklendi");
				}
			}
		}
		// #Gerekli
	}
}

 

Algoritmik Trading kategorisinde (16 puan) tarafından | 2,505 kez görüntülendi

1 cevap

1 beğenilme 0 beğenilmeme

Merhabalar,

1- bu kurguyu spot al-sat olarak BIST senetleri ve coinlerde kullanmak için bir strateji,

https://destek.matriksdata.com/?qa=blob&qa_blobid=18427901990494236427

2- bu kurguyu BIST viop ve coin piyasasında long/short yönlü işlemlerde kullanmak için bir strateji,

Long için,

https://destek.matriksdata.com/?qa=blob&qa_blobid=6249268563069697159

Short için,

https://destek.matriksdata.com/?qa=blob&qa_blobid=9676163960781911827

3- sadece BIST de "((HOUR()=10 AND MINUTE()>=03) OR HOUR()>=11) AND ((HOUR()=17 AND MINUTE()<=58) OR HOUR()<=16)" zaman yaması ilavesi

https://destek.matriksdata.com/?qa=blob&qa_blobid=15469773057014023763

İyi çalışmalar.

(11,059 puan) tarafından
SHORT kurgusunda TOTT coeff değişkeni yardım
0 0
Merhaba Saat yamalı sistem çalışmıyor. ve şort sisteminde major minör trend mantığı çalışmıyor
0 0
Merhabalar,

Saat yamalı sistemde saat aralıklarını değiştirebilirsiniz.

Gönderilmiş olan sistemdeki saati kontrol edebilirsiniz.

Short sisteminiz için de hata olduğunu düşündüğünüz yeri paylaşırsanız yardımcı olmaya çalışalım.
Short ve long
Hoş geldiniz, Matriks Destek Platformu sizlere sorularınızın hızlıca cevaplanması için bir ortam sağlar. Sorduğunuz ve cevapladığınız soruların ve yorumlarınızın aldığı oylar üzerinden puan kazanırsınız. Puan sistemine bağlı kampanyamızla ücretsiz kullanım avantajlarından faydalanabilirsiniz.



8,735 soru
8,680 cevap
4,868 yorum
20,627 kullanıcı