MatriksIQ Destek
Matriks Destek
Matriks Web Destek
Matriks Mobile Destek
0 beğenilme 0 beğenilmeme
145 kez görüntülendi
MERHABA.SMA_TPSL_BMEX HAZIR STRATEJİSİNDEKİ GİBİ TAKE PROFİT VE STOP LOSS U CROSS_MOV HAZIR STRATEJİSİNE EKLEMEK İSTİYORUM.BUNU KRİPTO BORSASINDA KULLANMAYI DÜŞÜNDÜĞÜM İÇİN İKİ YÖNLİ LONG/SHORT POZİSYONLARINDADA AKTİF OLMASINI İSTİYORUM.KENDİMCE YAPABİLDİĞİ;

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

{

public class CROSSMOV_TPSL : 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("XBT_USD_BMEX")]

public string Symbol;

 

[Parameter(SymbolPeriod.Min5)]

public SymbolPeriod SymbolPeriod;

 

[Parameter(5)]

public decimal BuyOrderQuantity;

 

[Parameter(5)]

public decimal SellOrderQuantity;

 

[Parameter(5)]

public int MovPeriod;

 

[Parameter(22)]

public int MovPeriod2;

 

// indikator tanımları.

MOV mov;

MOV mov2;

 

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

public decimal Zarar_Durdur_FiyatMiktari;

 

public override void OnInit()

{

//Symbol = "GARAN";

//SymbolPeriod = SymbolPeriod.Min5;

//BuyOrderQuantity = 1;

//SellOrderQuantity = 1;

//MovPeriod = 5;

//MovPeriod2 = 22;

AddSymbol(Symbol, SymbolPeriod);

mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential);

mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential);

 

SendOrderSequential(true);

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

//SetTimerInterval(3);

 

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

{

 

}

 

/// <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 (CrossAbove(mov, mov2))

{

SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);

Debug("Alış Emri Gönderildi");

}

{

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

{

SendMarketOrder(Symbol, BuyOrderQuantity, (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);

}

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(mov, mov2))

{

SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);

Debug("Satış Emri Gönderildi");

}

{

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

{

SendMarketOrder(Symbol, SellOrderQuantity, (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);

}

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");

}

}

}

}

}

}

 

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

{

if (order.OrdStatus.Obj == OrdStatus.Filled)

{

 

}

}

}

}

YARDIMCI OLABİLİRSENİZ ÇOK SEVİNİRİM.İYİ ÇALIŞMALAR
Algoritmik Trading kategorisinde (25 puan) tarafından | 145 kez görüntülendi

Bu soruya cevap vermek için lütfen giriş yapınız veya kayıt olunuz.

2,968 soru
2,861 cevap
2,233 yorum
2,158 kullanıcı