0 beğenilme 0 beğenilmeme
249 kez görüntülendi
al için

if(MOV(C,20,VAR)>OTT(C,20,6),
MOV(C,20,VAR)>OTT(C,20,0.7) AND
STOSK(200,400,111,VAR)>STOSD(200,400,111,VAR) AND
H>REF(HHV(H,10),-1),
MOV(C,20,VAR)>OTT(C,20,0.7) AND
STOSK(200,500,111,VAR)>STOSD(200,500,111,VAR) AND
H>REF(HHV(H,10),-1))

sat için

if(MOV(C,20,VAR)>OTT(C,20,6),
MOV(C,20,VAR)<OTT(C,20,0.7) AND
STOSK(200,500,111,VAR)<STOSD(200,500,111,VAR) AND
L<REF(LLV(L,10),-1),
MOV(C,20,VAR)<OTT(C,20,0.7) AND
STOSK(200,500,111,VAR)<STOSD(200,500,111,VAR) AND
L<REF(LLV(L,10),-1))

bu al sat formulunu algoritma sihirbazıyla oluşturmaya  çalışıyorum. bütün indikatörleri koydum or ile bağladım ama alım satım yapmıyor. nerde hata yapıyorum yardımcı olabilirmisiniz.

 

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;

 

namespace Matriks.Lean.Algotrader

{

public class karahan : 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("DODO_USDT_FBIN")]

public string Symbol1;

 

 

[Parameter(SymbolPeriod.Min)]

public SymbolPeriod SymbolPeriod1;

 

 

[Parameter(20)]

public int OttPeriod1;

 

[Parameter(6)]

public decimal OttOpt1;

 

[Parameter(MovMethod.VAR)]

public MovMethod OttMovMethod1;

 

[Parameter(true)]

public bool OttSupportLine1;

 

[Parameter(20)]

public int OttPeriod2;

 

[Parameter(0.7)]

public decimal OttOpt2;

 

[Parameter(MovMethod.VAR)]

public MovMethod OttMovMethod2;

 

[Parameter(true)]

public bool OttSupportLine2;

 

[Parameter(200)]

public int StochasticslowPeriodK1;

 

[Parameter(400)]

public int StochasticslowPeriodD1;

 

[Parameter(111)]

public int StochasticslowPeriodSlowK1;

 

[Parameter(MovMethod.VAR)]

public MovMethod StochasticslowMovMethod1;

 

[Parameter(200)]

public int StochasticslowPeriodK2;

 

[Parameter(500)]

public int StochasticslowPeriodD2;

 

[Parameter(111)]

public int StochasticslowPeriodSlowK2;

 

[Parameter(MovMethod.VAR)]

public MovMethod StochasticslowMovMethod2;

 

[Parameter(1)]

public int MovPeriod1;

 

[Parameter(MovMethod.S)]

public MovMethod MovMovMethod1;

 

[Parameter(1)]

public int MovPeriod2;

 

[Parameter(MovMethod.S)]

public MovMethod MovMovMethod2;

 

[Parameter(10)]

public int HighlowBarSayisi1;

 

[Parameter(10)]

public int HighlowBarSayisi2;

 

[Parameter(5000)]

public decimal OrderQuantity1;

 

[Parameter(false)]

public bool IsReduceOnly1;

 

[Parameter(5000)]

public decimal OrderQuantity2;

 

[Parameter(false)]

public bool IsReduceOnly2;

 

OTT ott;

OTT ott2;

StochasticSlow stochasticSlow;

StochasticSlow stochasticSlow2;

MOV mov;

MOV mov2;

MatriksIndicator HighLow;

MatriksIndicator HighLow2;

 

 

 

public override void OnInit()

{

 

ott = OTTIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, OttPeriod1, OttOpt1, OttMovMethod1, OttSupportLine1);

ott2 = OTTIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, OttPeriod2, OttOpt2, OttMovMethod2, OttSupportLine2);

stochasticSlow = StochasticSlowIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, StochasticslowPeriodK1, StochasticslowPeriodD1, StochasticslowPeriodSlowK1, StochasticslowMovMethod1);

stochasticSlow2 = StochasticSlowIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, StochasticslowPeriodK2, StochasticslowPeriodD2, StochasticslowPeriodSlowK2, StochasticslowMovMethod2);

mov = MOVIndicator(Symbol1, SymbolPeriod1, OHLCType.High, MovPeriod1, MovMovMethod1);

mov2 = MOVIndicator(Symbol1, SymbolPeriod1, OHLCType.Low, MovPeriod2, MovMovMethod2);

HighLow = new HighLow();

 

HighLow.SetIndicatorParameters("BarSayisi", HighlowBarSayisi1); RegisterUserIndicator(HighLow, Symbol1, SymbolPeriod1, OHLCType.High, 5);

 

HighLow2 = new HighLow();

 

HighLow2.SetIndicatorParameters("BarSayisi", HighlowBarSayisi2); RegisterUserIndicator(HighLow2, Symbol1, SymbolPeriod1, OHLCType.Low, 5);

 

 

 

SendOrderSequential(true, Side.All);

WorkWithPermanentSignal(true);

 

//Alttaki fonksiyon açıldıktan sonra parametre olarak verilen saniyede bir OnTimer fonksiyonu tetiklenir.

// SetTimerInterval(3600);

 

//Alttaki fonksiyon ile tanımlanan sembol ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir.

//AddNewsSymbol(Symbol);

 

//Alttaki fonksiyon ile tanımlanan anahtar kelime ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir.

//AddNewsKeyword("KAP");

}

 

/// <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()

{

 

}

 

/// <summary>

/// AddNewsSymbol ve AddNewsKeyword ile haberlere kayit olunmuşsa bu fonksiyon tetiklenir.

/// </summary>

/// <param name="newsId">Gelen haberin id'si</param>

/// <param name="relatedSymbols">Gelen haberin ilişkili sembolleri</param>

public override void OnNewsReceived(int newsId, List<string> relatedSymbols)

{

 

}

 

/// <summary>

/// Eklenen sembollerin bardata'ları ve indikatorler güncellendikçe bu fonksiyon tetiklenir.

/// </summary>

/// <param name="barData">Bardata ve hesaplanan gerçekleşen işleme ait detaylar</param>

public override void OnDataUpdate(BarDataEventArgs barData)

{

if (ott.Value[1][ott.CurrentIndex] > ott.Value[0][ott.CurrentIndex] && ott2.Value[1][ott2.CurrentIndex] > ott2.Value[0][ott2.CurrentIndex] && stochasticSlow.Value[0][stochasticSlow.CurrentIndex] > stochasticSlow.Value[1][stochasticSlow.CurrentIndex] && mov.Value[0][mov.CurrentIndex] > HighLow.Value[0][HighLow.CurrentIndex - 1] && ott.Value[1][ott.CurrentIndex] < ott.Value[0][ott.CurrentIndex] && ott2.Value[1][ott2.CurrentIndex] > ott2.Value[0][ott2.CurrentIndex] && stochasticSlow2.Value[0][stochasticSlow2.CurrentIndex] > stochasticSlow2.Value[1][stochasticSlow2.CurrentIndex] && mov.Value[0][mov.CurrentIndex] > HighLow.Value[0][HighLow.CurrentIndex - 1])

{

SendMarketOrder(Symbol1, OrderQuantity1, OrderSide.Buy, includeAfterSession:false, isReduceOnly : IsReduceOnly1);

}

if (ott.Value[1][ott.CurrentIndex] > ott2.Value[0][ott2.CurrentIndex] && ott2.Value[1][ott2.CurrentIndex] < ott2.Value[0][ott2.CurrentIndex] && stochasticSlow2.Value[0][stochasticSlow2.CurrentIndex] < stochasticSlow2.Value[1][stochasticSlow2.CurrentIndex] && mov2.Value[0][mov2.CurrentIndex] < HighLow2.Value[1][HighLow2.CurrentIndex - 1] && ott.Value[1][ott.CurrentIndex] < ott.Value[0][ott.CurrentIndex] && ott2.Value[1][ott2.CurrentIndex] < ott2.Value[0][ott2.CurrentIndex] && stochasticSlow2.Value[0][stochasticSlow2.CurrentIndex] < stochasticSlow2.Value[1][stochasticSlow2.CurrentIndex] && mov2.Value[0][mov2.CurrentIndex] < HighLow2.Value[1][HighLow2.CurrentIndex - 1])

{

SendMarketOrder(Symbol1, OrderQuantity2, OrderSide.Sell, includeAfterSession:false, isReduceOnly : IsReduceOnly2);

}

 

}

 

/// <summary>

/// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir.

/// </summary>

/// <param name="barData">Emrin son durumu</param>

public override void OnOrderUpdate(IOrder order)

{

}

 

/// <summary>

/// Strateji durdurulduğunda bu fonksiyon tetiklenir.

/// </summary>

public override void OnStopped()

{

}

}

}
Algoritmik Trading kategorisinde (16 puan) tarafından | 249 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhabalar,

İstediğiniz strateji aşağıda mevcuttur.

Dilerseniz spot dilerseniz vadeli sembollerde kullanabilirsiniz.

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;

namespace Matriks.Lean.Algotrader
{


	/*AL
if(MOV(C,opt1,VAR)>OTT(C,opt1,7),
MOV(C,opt1,VAR)>OTT(C,opt1,opt2) AND 
STOSK(opt3,opt4,111,VAR)>STOSD(opt3,opt4,111,VAR) AND 
H>REF(HHV(H,20),-1),
MOV(C,opt1,VAR)>OTT(C,opt1,3.5) AND 
STOSK(opt3,opt4,111,VAR)>STOSD(opt3,opt4,111,VAR) AND 
H>REF(HHV(H,20),-1)) 


SAT
if(MOV(C,opt1,VAR)>OTT(C,opt1,7),
MOV(C,opt1,VAR)<OTT(C,opt1,opt2) AND 
STOSK(opt3,opt4,111,VAR)<STOSD(opt3,opt4,111,VAR) AND 
L<REF(LLV(L,20),-1),
MOV(C,opt1,VAR)<OTT(C,opt1,opt2) AND 
STOSK(opt3,opt4,111,VAR)<STOSD(opt3,opt4,111,VAR) AND 
L<REF(LLV(L,20),-1)) 

*/
	public class SablonV1 : MatriksAlgo
	{
		[SymbolParameter("FGARAN")]
		public string Symbol;

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

		[Parameter(5)]
		public decimal BuyOrderQuantity;

		[Parameter(5)]
		public decimal SellOrderQuantity;

		[Parameter(20)]
			public int OttPeriod1;

		[Parameter(6)]
			public decimal OttOpt1;

		[Parameter(MovMethod.VAR)]
			public MovMethod OttMovMethod1;

		[Parameter(true)]
			public bool OttSupportLine1;

		[Parameter(20)]
			public int OttPeriod2;

		[Parameter(0.7)]
			public decimal OttOpt2;

		[Parameter(200)]
			public int StochasticslowPeriodK1;

		[Parameter(111)]
			public int StochasticslowPeriodD1;

		[Parameter(400)]
			public int StochasticslowPeriodSlowK1;

		[Parameter(MovMethod.VAR)]
			public MovMethod StochasticslowMovMethod1;

		[Parameter(10)]
			public int H1;

		[Parameter(500)]
			public int StochasticslowPeriodK2;

		[Parameter(111)]
			public int StochasticslowPeriodD2;

		[Parameter(200)]
			public int StochasticslowPeriodSlowK2;

		[Parameter(10)]
			public int H2;

		[Parameter(40)]
			public int OttPeriod5;

		[Parameter(0.6)]
			public decimal OttOpt5;

		[Parameter(500)]
			public int StochasticslowPeriodK3;

		[Parameter(111)]
			public int StochasticslowPeriodD3;

		[Parameter(200)]
			public int StochasticslowPeriodSlowK3;

		[Parameter(10)]
			public int L1;

		[Parameter(10)]
			public int L2;

		[Parameter(3)]
			public int KaldiracOrani;

		OTT ott;
		OTT ott2;
		OTT ott3;
		OTT ott4;
		OTT ott5;
		OTT ott6;
		StochasticSlow stochasticSlow;
		StochasticSlow stochasticSlow2;
		StochasticSlow stochasticSlow3;
		StochasticSlow stochasticSlow4;

		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 KOŞULU


			if (ott.Value[1][ott.CurrentIndex] > ott.Value[0][ott.CurrentIndex])     	                                                                      				//	if(MOV(C,opt1,VAR)>OTT(C,opt1,7)
			{
				if (ott2.Value[1][ott2.CurrentIndex] > ott2.Value[0][ott2.CurrentIndex]   																				//	MOV(C,opt1,VAR)>OTT(C,opt1,opt2) 
					&& stochasticSlow.Value[0][stochasticSlow.CurrentIndex] > stochasticSlow.Value[1][stochasticSlow.CurrentIndex]    	//AND STOSK(opt3,opt4,111,VAR)>STOSD(opt3,opt4,111,VAR)
					&& h>HHV.Value[0][HHV.CurrentIndex -1])    																													// AND H>REF(HHV(H,10),-1)		
				{
					FX_Alis();
				}
			}
			else
			{
				if (ott2.Value[1][ott2.CurrentIndex] > ott2.Value[0][ott2.CurrentIndex]  																							   //	MOV(C, opt1, VAR) >OTT(C, opt1, 3.5) AND
					&& stochasticSlow2.Value[0][stochasticSlow2.CurrentIndex] > stochasticSlow2.Value[1][stochasticSlow2.CurrentIndex]    		    //STOSK(opt3, opt4, 111, VAR) >STOSD(opt3, opt4, 111, VAR) AND
					&& h>HHV1.Value[0][HHV1.CurrentIndex -1])   																																//H>REF(HHV(H, 10), -1))
				{
					FX_Alis();
				}
			}
			// SAT KOŞULU

			if (ott.Value[1][ott.CurrentIndex] > ott.Value[0][ott.CurrentIndex])              																							//if(MOV(C,opt1,VAR)>OTT(C,opt1,7),
			{
				if (ott2.Value[1][ott2.CurrentIndex] < ott2.Value[0][ott2.CurrentIndex]             																					//MOV(C,opt1,VAR)<OTT(C,opt1,opt2) AND 
					&& stochasticSlow2.Value[0][stochasticSlow2.CurrentIndex] <stochasticSlow2.Value[1][stochasticSlow2.CurrentIndex] 			//STOSK(opt3,opt4,111,VAR)<STOSD(opt3,opt4,111,VAR) AND 
					&& l<LLV.Value[0][LLV.CurrentIndex -1])  																																		//L<REF(LLV(L,10),-1),
				{
					FX_Satis();
				}
			}

			else
			{
				if (ott2.Value[1][ott2.CurrentIndex] < ott2.Value[0][ott2.CurrentIndex]     																							//MOV(C,opt1,VAR)<OTT(C,opt1,opt2) AND 
					&& stochasticSlow2.Value[0][stochasticSlow2.CurrentIndex] < stochasticSlow2.Value[1][stochasticSlow2.CurrentIndex]   			//STOSK(opt3,opt4,111,VAR)<STOSD(opt3,opt4,111,VAR) AND 
					&& l<LLV1.Value[0][LLV1.CurrentIndex -1])  																																	//L<REF(LLV(L,10),-1)) 
				{
					FX_Satis();
				}
			}
		}



		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			ott = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, OttPeriod1, OttOpt1, OttMovMethod1, OttSupportLine1);
			ott2 = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, OttPeriod2, OttOpt2, OttMovMethod1, OttSupportLine1);
			stochasticSlow = StochasticSlowIndicator(Symbol, SymbolPeriod, OHLCType.Close, StochasticslowPeriodK1, StochasticslowPeriodD1, StochasticslowPeriodSlowK1, StochasticslowMovMethod1);
			stochasticSlow2 = StochasticSlowIndicator(Symbol, SymbolPeriod, OHLCType.Close, StochasticslowPeriodK2, StochasticslowPeriodD2, StochasticslowPeriodSlowK2, StochasticslowMovMethod1);


			HHV = HighestHighIndicator(Symbol, SymbolPeriod, H1);
			HHV1 = HighestHighIndicator(Symbol, SymbolPeriod, H2);
			LLV = LowestLowIndicator(Symbol, SymbolPeriod, L1);
			LLV1 = LowestLowIndicator(Symbol, SymbolPeriod, L2);

			// Gerekli			
			WorkWithPermanentSignal(true);

			if (AcigaSatisYapilsin)
			{
				SendOrderSequential(true, Side.Buy);
				SendOrderSequentialForShort(true, Side.All);
			}else
			{
				SendOrderSequential(true, Side.Buy);
			}
			// #Gerekli

			// kaldıraç oranı
			SetLeverage(Symbol, KaldiracOrani);
			// kaldıraç tipi – true isolated, false cross
			SetLeverageType(Symbol, false);
			// Gerekli

		}

		[Parameter(false)]
		public bool AcigaSatisYapilsin;

		[Parameter(false)]
		public bool AksamSeansiniDahilEt;

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

		public void FX_Alis()
		{
			string _orderID = string.Empty; ;
			decimal _quantity = 0;

			if (LastOrderSide.Obj != Side.Buy)
			{
				if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
				{
					_orderID = SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
					_quantity = BuyOrderQuantity;
				}else
				{
					if (LastOrderSideForShort.Obj == Side.All)
					{
						_orderID = SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
						_quantity = BuyOrderQuantity;
					}else
					{
						_orderID = SendMarketOrder(Symbol, BuyOrderQuantity * 2, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
						_quantity = BuyOrderQuantity * 2;
					}
				}

				if (_orderID != string.Empty && _quantity != 0)
				{
					orderIDList.Add(_orderID);
					Debug("Alış emri gönderildi.[ " + _quantity + " adet ]");
					LastOrderSide.Obj = Side.Buy;
					LastOrderSideForShort.Obj = Side.Buy;
				}
			}
		}

		public void FX_Satis()
		{
			string _orderID = string.Empty; ;
			decimal _quantity = 0;

			if (LastOrderSide.Obj != Side.Sell)
			{
				if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
				{
					_orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
					_quantity = SellOrderQuantity;
				}else
				{
					if (LastOrderSideForShort.Obj == Side.All)
					{
						_orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
						_quantity = SellOrderQuantity;

					}else
					{
						_orderID = SendMarketOrder(Symbol, SellOrderQuantity * 2, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
						_quantity = SellOrderQuantity * 2;
					}
				}


				if (_orderID != string.Empty && _quantity != 0)
				{
					orderIDList.Add(_orderID);
					Debug("Satış emri gönderildi.[ " + _quantity + " adet ]");
					LastOrderSide.Obj = Side.Sell;
					LastOrderSideForShort.Obj = Side.Sell;
				}
			}
		}

		public override void OnOrderUpdate(IOrder order)
		{
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{
				// Senntetik emirler tanımlanıyor
				//				StopLoss(Symbol, SyntheticOrderPriceType.Percent, 1);
				//				TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 1);
				if (!orderIDList.Contains(order.CliOrdID) && AcigaSatisYapilsin)
				{
					LastOrderSideForShort.Obj = Side.All;
					Debug("Sentetik emir tetiklendi");
				}
			}
		}
		// #Gerekli
	}
}

İyi çalışmalar.

(11,069 puan) tarafından
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.



7,586 soru
7,592 cevap
4,435 yorum
10,412 kullanıcı