Merhaba, SendOrderSequential(false); yaparak (sirali emir gonderimini kapatiyoruz), pozisyon takibi ile short varsa long'a gec, long varsa short'a gec seklinde stratejinizi yonlendirebilirsiniz. Pozisyon takibini strateji icerisinde olusturdugunuz basit flag'lerle yapabilirsiniz.
if (Close > Open)
{
Debug($"Close: {Close} > Open: {Math.Round(Open,2)}. Bar POSITIVE");
if (Position == 0)
{
SendMarketOrder(Symbol, Quantity, OrderSide.Buy);
Position++;
Debug("Alis emri gonderildi. Pozisyon = " + Position);
}
else if (Position == -1)
{
SendMarketOrder(Symbol, Quantity * 2, OrderSide.Buy);
Position += 2;
Debug("Alis emri gonderildi. Pozisyon = " + Position);
}
}
if (Close < Open)
{
Debug($"Close: {Close} < Open: {Math.Round(Open,2)}. Bar NEGATIVE");
if (Position == 0)
{
SendMarketOrder(Symbol, Quantity, OrderSide.Sell);
Position--;
Debug("Satis emri gonderildi. Pozisyon = " + Position);
}
else if (Position == 1)
{
SendMarketOrder(Symbol, Quantity * 2, OrderSide.Sell);
Position -= 2;
Debug("Satis emri gonderildi. Pozisyon = " + Position);
}
}
Pozisyon takibi ayni zamanda OnOrderUpdate fonksiyonu ile de yapilabilmektedir.
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 (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell)
{
var positionChange = order.OrderQty;
realposition -= (int) positionChange;
Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);
}
}