MatriksIQ Destek
Matriks Destek
Matriks Web Destek
Matriks Mobile Destek
0 beğenilme 0 beğenilmeme
143 kez görüntülendi
Strateji içerisine 10 kademe kar al, 5 kademede zarar durdur eklemeye çalışıyorum. Kontrol edebilir misiniz.

using System;

using System.Collections.Generic;

using System.Linq;

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;

 

//===============================================ACIKLAMA===================================================//

// Fisher Transform indikatöründe, FTfish bandı FTtrigger bandını yukarı //

// kırdığı anda al, aşağı kırdığı anda sat emri gönderilir. //

// Emirler piyasa fiyatından gönderilecektir.                                //

// Emir gönderimi ile birlikte strateji raporunda Debug sekmesine //

// "Alış emri gönderildi." ve "Satış emri gönderildi." ifadesi yazdırılmaktadır. //

// Ek olarak Kar al ve Zarar durdur fonksiyonlarinin kullanımı örneklendirilmiştir. //

 

namespace Matriks.Lean.Algotrader

{

public class deneme : 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("XU100")]

        public string Symbol;

 

        [Parameter(SymbolPeriod.Day)]

        public SymbolPeriod SymbolPeriod;

 

        [Parameter(100)]

        public decimal BuyOrderQuantity;

 

        [Parameter(100)]

        public decimal SellOrderQuantity;

 

        [Parameter(13)]

        public int Period;

 

 

//Kar Al/Zarar Durdur Parametreleri

[Parameter(true)]

public bool Kar_AL;

[Parameter(10)]

public decimal Kar_AL_FiyatMiktari;

[Parameter(true)]

public bool Zarar_Durdur;

[Parameter(5)]

public decimal Zarar_Durdur_FiyatMiktari;

 

 

FT ft;

         

        public override void OnInit()

        {

            ft = FisherTransformationIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period);

 

            AddSymbol(Symbol, SymbolPeriod);

 

            // Algoritmanın kalıcı veya geçici sinyal ile çalışıp çalışmayacağını belirleyen fonksiyondur.

            // true geçerseniz algoritma sadece yeni bar açılışlarında çalışır, bu fonksiyonu çağırmazsanız veya false geçerseniz her işlem olduğunda algoritma tetiklenir.

            WorkWithPermanentSignal(true);

 

            //Eger backtestte emri bir al bir sat seklinde gonderilmesi isteniyor bu true set edilir.

            //Alttaki satırı silerek veya false geçerek emirlerin sirayla gönderilmesini engelleyebilirsiniz.

            SendOrderSequential(true);

            }

 

/// <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 (CrossAbove(ft.Fish, ft.Trigger))

            {

if (realposition == 0 && SystemPosition == 0)

{

SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));

                Debug("Alış emri verildi.");

                Debug("FtFish:" + ft.Fish.CurrentValue);

                Debug("FtTrigger" + ft.Trigger.CurrentValue);

            }

SystemPosition = 1;

if (Kar_AL) TP = TakeProfit(Symbol, SyntheticOrderPriceType.PricePoint, Kar_AL_FiyatMiktari);

if (Zarar_Durdur) SL = StopLoss(Symbol, SyntheticOrderPriceType.PricePoint, Zarar_Durdur_FiyatMiktari);

Debug(TP + " ," + SL);

}

else if (realposition == -1 * SellOrderQuantity && SystemPosition == -1)

{

SendMarketOrder(Symbol, BuyOrderQuantity * 2, (OrderSide.Buy));

Debug("Alış emri verildi.");

SystemPosition = 1;

if (Kar_AL) TP = TakeProfit(Symbol, SyntheticOrderPriceType.PricePoint, Kar_AL_FiyatMiktari);

if (Zarar_Durdur) SL = StopLoss(Symbol, SyntheticOrderPriceType.PricePoint, Zarar_Durdur_FiyatMiktari);

Debug(TP + " ," + SL);

}

}

if (CrossBelow(ft.Fish, ft.Trigger))

            {

if (realposition == 0 && SystemPosition == 0)

{

SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));

                Debug("Satış emri verildi.");

                Debug("FtFish:" + ft.Fish.CurrentValue);

                Debug("FtTrigger" + ft.Trigger.CurrentValue);

SystemPosition = -1;

if (Kar_AL) TP = TakeProfit(Symbol, SyntheticOrderPriceType.PricePoint, Kar_AL_FiyatMiktari);

if (Zarar_Durdur) SL = StopLoss(Symbol, SyntheticOrderPriceType.PricePoint, Zarar_Durdur_FiyatMiktari);

Debug(TP + " ," + SL);

}

else if (realposition == 1 * BuyOrderQuantity && SystemPosition == 1)

{

SendMarketOrder(Symbol, SellOrderQuantity * 2, (OrderSide.Sell));

Debug("Satış emri verildi.");

SystemPosition = -1;

if (Kar_AL) TP = TakeProfit(Symbol, SyntheticOrderPriceType.PricePoint, Kar_AL_FiyatMiktari);

if (Zarar_Durdur) SL = StopLoss(Symbol, SyntheticOrderPriceType.PricePoint, Zarar_Durdur_FiyatMiktari);

Debug(TP + " ," + SL);

}

}

}

public override void OnOrderUpdate(IOrder order)

{

//Gercek zamanli pozisyon takibi

if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)

{

var positionChange = order.OrderQty;

realposition += (int) positionChange;

Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);

if (realposition == 0)

{

SystemPosition = 0;

Debug("Kar AL / Zarar Durdur tetiklendi");

}

}

if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell)

{

var positionChange = order.OrderQty;

realposition -= (int) positionChange;

Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);

if (realposition == 0)

{

SystemPosition = 0;

Debug("Kar AL / Zarar Durdur tetiklendi");

}

}

}

}

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

1 cevap

0 beğenilme 0 beğenilmeme
En İyi Cevap

Merhaba,

Aşağıdaki kodu inceleyiniz.

using System;

using System.Collections.Generic;

using System.Linq;

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;



//===============================================ACIKLAMA===================================================//

// Fisher Transform indikatöründe, FTfish bandı FTtrigger bandını yukarı //

// kırdığı anda al, aşağı kırdığı anda sat emri gönderilir. //

// Emirler piyasa fiyatından gönderilecektir.                                //

// Emir gönderimi ile birlikte strateji raporunda Debug sekmesine //

// "Alış emri gönderildi." ve "Satış emri gönderildi." ifadesi yazdırılmaktadır. //

// Ek olarak Kar al ve Zarar durdur fonksiyonlarinin kullanımı örneklendirilmiştir. //



namespace Matriks.Lean.Algotrader
{

	public class Test : 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("XU100")]

		public string Symbol;

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

		[Parameter(100)]
		public decimal BuyOrderQuantity;

		[Parameter(100)]
		public decimal SellOrderQuantity;



		[Parameter(13)]
		public int Period;





		//Kar Al/Zarar Durdur Parametreleri

		[Parameter(true)]

public bool Kar_AL;

		[Parameter(10)]

public decimal Kar_AL_FiyatMiktari;

		[Parameter(true)]

public bool Zarar_Durdur;

		[Parameter(5)]

public decimal Zarar_Durdur_FiyatMiktari;





		FT ft;


		ISyntheticOrderPrices TP, SL;
		int FirstRun = 0;
		int SystemPosition = 0;
		int realposition = 0;

		public override void OnInit()
		{

			ft = FisherTransformationIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period);



			AddSymbol(Symbol, SymbolPeriod);



			// Algoritmanın kalıcı veya geçici sinyal ile çalışıp çalışmayacağını belirleyen fonksiyondur.

			// true geçerseniz algoritma sadece yeni bar açılışlarında çalışır, bu fonksiyonu çağırmazsanız veya false geçerseniz her işlem olduğunda algoritma tetiklenir.

			WorkWithPermanentSignal(true);



			//Eger backtestte emri bir al bir sat seklinde gonderilmesi isteniyor bu true set edilir.

			//Alttaki satırı silerek veya false geçerek emirlerin sirayla gönderilmesini engelleyebilirsiniz.

			SendOrderSequential(true);

		}



		/// <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 (CrossAbove(ft.Fish, ft.Trigger))
			{

				if (realposition == 0 && SystemPosition == 0)
				{

					SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));

					Debug("Alış emri verildi.");

					Debug("FtFish:" + ft.Fish.CurrentValue);

					Debug("FtTrigger" + ft.Trigger.CurrentValue);

				}

				SystemPosition = 1;

				if (Kar_AL) TP = TakeProfit(Symbol, SyntheticOrderPriceType.PricePoint, Kar_AL_FiyatMiktari);

				if (Zarar_Durdur) SL = StopLoss(Symbol, SyntheticOrderPriceType.PricePoint, Zarar_Durdur_FiyatMiktari);

				Debug(TP + " ," + SL);

			}

			else if (realposition == -1 * SellOrderQuantity && SystemPosition == -1)
			{

				SendMarketOrder(Symbol, BuyOrderQuantity * 2, (OrderSide.Buy));

				Debug("Alış emri verildi.");

				SystemPosition = 1;

				if (Kar_AL) TP = TakeProfit(Symbol, SyntheticOrderPriceType.PricePoint, Kar_AL_FiyatMiktari);

				if (Zarar_Durdur) SL = StopLoss(Symbol, SyntheticOrderPriceType.PricePoint, Zarar_Durdur_FiyatMiktari);

				Debug(TP + " ," + SL);

			}



			if (CrossBelow(ft.Fish, ft.Trigger))
			{

				if (realposition == 0 && SystemPosition == 0)
				{

					SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));

					Debug("Satış emri verildi.");

					Debug("FtFish:" + ft.Fish.CurrentValue);

					Debug("FtTrigger" + ft.Trigger.CurrentValue);

					SystemPosition = -1;

					if (Kar_AL) TP = TakeProfit(Symbol, SyntheticOrderPriceType.PricePoint, Kar_AL_FiyatMiktari);

					if (Zarar_Durdur) SL = StopLoss(Symbol, SyntheticOrderPriceType.PricePoint, Zarar_Durdur_FiyatMiktari);

					Debug(TP + " ," + SL);

				}

				else if (realposition == 1 * BuyOrderQuantity && SystemPosition == 1)
				{

					SendMarketOrder(Symbol, SellOrderQuantity * 2, (OrderSide.Sell));

					Debug("Satış emri verildi.");

					SystemPosition = -1;

					if (Kar_AL) TP = TakeProfit(Symbol, SyntheticOrderPriceType.PricePoint, Kar_AL_FiyatMiktari);

					if (Zarar_Durdur) SL = StopLoss(Symbol, SyntheticOrderPriceType.PricePoint, Zarar_Durdur_FiyatMiktari);

					Debug(TP + " ," + SL);

				}



			}
		}

		public override void OnOrderUpdate(IOrder order)
		{

			//Gercek zamanli pozisyon takibi

			if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)
			{

				var positionChange = order.OrderQty;

				realposition += (int) positionChange;

				Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);

				if (realposition == 0)
				{

					SystemPosition = 0;

					Debug("Kar AL / Zarar Durdur tetiklendi");

				}

			}

			if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell)
			{

				var positionChange = order.OrderQty;

				realposition -= (int) positionChange;

				Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);

				if (realposition == 0)
				{

					SystemPosition = 0;

					Debug("Kar AL / Zarar Durdur tetiklendi");

				}

			}

		}
	}

}


 

(5,751 puan) tarafından
tarafından seçilmiş
0 0
Tesekkürler. ilave olarak SendOrderSequential(false); olarak yapınca emir iletmesi düzeldi. Ancak Matriks Prime üzerinde aldığım sinyal ile stratejinin verdiği sinyallar yanlış. Hatayı nasıl bulabiliriz.
1,871 soru
1,787 cevap
1,725 yorum
1,270 kullanıcı