Merhaba,
Sentetik emirler gerçekleştiğinde OnSyntheticOrderTriggered() methodu tetiklenmektedir.
OnSyntheticOrderTriggered() tetiklendiğinde aktif barın indeksi alınıp aşağıdaki örnekteki gibi OnDataUpdate() methodunda kontrol edilebilir.
Aşağıdaki yapı ile stoploss tetiklendiğinde andaki barın indeksini alıp 10 bar geçmesi kontrol edilmiştir..
int tetiklendigiBar=int.MinValue;
public override void OnDataUpdate(BarDataCurrentValues bd)
{
// alış koşulu
if (bd.LastUpdate.Close>bd.LastUpdate.Open &&
bd.LastUpdate.BarDataIndex >= tetiklendigiBar + 10 &&
LastOrderSide.Obj!=Side.Buy)
{
SendMarketOrder(Symbol,1,OrderSide.Buy);
TrailingStopLoss(Symbol,SyntheticOrderPriceType.Percent,2);
}
// satış koşulu
if (bd.LastUpdate.Close<bd.LastUpdate.Open &&
LastOrderSide.Obj!=Side.Sell)
{
SendMarketOrder(Symbol,1,OrderSide.Sell);
TrailingStopLoss(Symbol,SyntheticOrderPriceType.Percent,2);
}
}
public override void OnSyntheticOrderTriggered(SyntheticAlgoOrder sOrder)
{
if (sOrder.EnableOrderSending &&
sOrder.SyntheticAlgoOrderType == SyntheticAlgoOrderType.StopLoss)
{
var barDataModel = GetBarData();
tetiklendigiBar = barDataModel.BarDataIndexer.LastBarIndex;
Debug("Stoploss teteiklendi");
}
}
public override void OnOrderUpdate(IOrder order){
if(order.OrdStatus.Obj==OrdStatus.Filled){
tetiklendigiBar=int.MinValue;
}
}