Merhaba,
Önceki konuda iq'da (aynı formül için) prime sinyallerinden farklı yerlerde emir gelmesi sorunu Orçun Bey sayesinde halldedildi.
Şimdi daha genel bir şey danışmak istiyorum.
iq'da yaklaşık bir saatten fazla emirleri takip ettim, prime ile aynı yerlerde emirlerin geldiğini görünce bir de backtest yapayım dedim.
Backtest sonucunda, canlıda yaptığı işlemlerden tamamen alakasız şeyler geldi.
Bu fark neden olur? Farkın olmaması için ne yapabilirim?
Bu konu çok önemli, çünkü stratejiler canlıya alınınca tamamen farklı işlemler yaparsa backtest yapmamızın anlamı kalmaz...
Ekran görüntüsü : Soldaki backtest, sağdaki canlı işlem. Ekran görüntüsünde 19:32 den beri olan işlemler var.
https://hizliresim.com/EdnHd5
Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using System.Windows.Media;
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;
namespace Matriks.Lean.Algotrader
{
public class btc_test : MatriksAlgo
{
[SymbolParameter("XBT_USD_BMEX")]
public string Symbol;
[Parameter(SymbolPeriod.Min)]
public SymbolPeriod SymbolPeriod;
[Parameter(10)]
public decimal Lot;
[Parameter(1)]
public int Pm1;
[Parameter(3)]
public int Pm2;
[Parameter(1)]
public int Pm3;
SMA m1, m2, m3, m4, m5;
public override void OnInit()
{
m1 = SMAIndicator(Symbol, SymbolPeriod, OHLCType.Close, Pm1);
m2 = SMAIndicator(Symbol, SymbolPeriod, OHLCType.Close, Pm2);
m3 = SMAIndicator(Symbol, SymbolPeriod, OHLCType.High, Pm3);
m4 = SMAIndicator(Symbol, SymbolPeriod, OHLCType.Low, Pm3);
AddSymbol(Symbol, SymbolPeriod);
WorkWithPermanentSignal(true); //Sadece kalıcı sinyallerde işlem yap
SendOrderSequential(true);//Bir al bir sat kuralı
}
public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
{
var bardata = GetBarData();
var close = bardata.Close[barDataCurrentValues.LastUpdate.BarDataIndex -1];
if (Ref(m1, 0) >Ref(m2, 0) && close<Ref(m3, 0))
{
SendMarketOrder(Symbol, Lot, OrderSide.Buy, ChartIcon.Buy);
}
if (Ref(m1, 0) <Ref(m2, 0) && close>Ref(m4, 0))
{
SendMarketOrder(Symbol, Lot, OrderSide.Sell, ChartIcon.Sell);
}
}
}
}
Ek bilgi: Stratejinin Prime kodu
(MOV(c,1,s)>MOV(c,3,s)) and (c<MOV(h,1,s))
(MOV(c,1,s)<MOV(c,3,s)) and (c>MOV(l,1,s))