Merhaba, Matriks IQ strateji editörü üzerinden rsi 8 - rsi 34 kesişim botunun backtestini yaparken bazı emirleri atladığını fark ettim. Son 500 barda test ettiğimde 23 Haziran saat 03.00'te verilen alış emrinin satış emri geç veriliyor. Bunun gibi alım emirlerinin kayma ve satış emirlerinin gerçekleşmeme durumlar da oluşuyor. Bu sorunu nasıl çözebilirim? Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using System.Windows.Media;
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;
namespace Matriks.Lean.Algotrader
{
public class RSI_34_8_Cross : MatriksAlgo
{
[SymbolParameter("BTC_USDT_BIN")]
public string Symbol;
[Parameter(SymbolPeriod.Min60)]
public SymbolPeriod SymbolPeriod;
[Parameter(0.005)]
public decimal BuyOrderQuantity;
[Parameter(0.005)]
public decimal SellOrderQuantity;
[Parameter(1.04)]
public decimal TakeProfitPercentage;
[Parameter(0.98)]
public decimal StopLossPercentage;
[Parameter(8)]
public int RSIPeriodS;
[Parameter(34)]
public int RSIPeriodL;
RSI rsil;
RSI rsis;
decimal orderclose = 0;
decimal stoploss = 0;
decimal takeprofit = 0;
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
rsil = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, RSIPeriodL);
rsis = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, RSIPeriodS);
WorkWithPermanentSignal(true);
SendOrderSequential(true);
}
public override void OnInitCompleted()
{
}
public override void OnDataUpdate(BarDataEventArgs barData)
{
var close = barData.BarData.Close;
if (CrossAbove(rsis,rsil))
{
SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
orderclose = close;
takeprofit = orderclose*TakeProfitPercentage;
stoploss = orderclose*StopLossPercentage;
Debug(orderclose);
Debug(takeprofit);
}
if (close > takeprofit)
{
SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
}
if (close < stoploss)
{
SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
}
}
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled)
{
}
}
public override void OnStopped()
{
}
}
}


