Hos geldiniz, stratejiyi tekrar calistirdiginizda sat yaparak baslayamaz. Ayni strateji de olsa once calistirilmis stratejiyle ilgili bir bilgisi yoktur.
Bahsettiginiz cevapta eski calistirdigimiz stratejiden yeni calistirilana bilgi aktarim yontemlerinden bir tanesini gormektesiniz. Fakat istediginiz sadece stratejinin satisla baslamasiysa, bunun icin daha kolay yontemlerimiz mevcut.
Orn. direkt al/sat seklinde ilerleyen bir stratejiniz (SendOrderSequential(true)) varsa asagidaki gibi stratejiyi calistirirken, manuel olarak kutucugu aktive ederek satisla baslamasini saglayabiliriz.
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 sendOrderSeq_YENI : MatriksAlgo
{
[SymbolParameter("GARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriod;
[Parameter(1)]
public decimal OrderQuantity;
[Parameter(14)]
public int Period;
[Parameter(70)]
public int UpLevel;
[Parameter(30)]
public int DownLevel;
[Parameter(false)]
public bool SatislaBasla;
RSI rsi;
int firstRun = 1;
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
rsi = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period);
WorkWithPermanentSignal(true);
SendOrderSequential(true,true);
}
public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
{
if (firstRun == 1)
{
if (CrossAbove(rsi, DownLevel) && !SatislaBasla)
{
SendMarketOrder(Symbol, OrderQuantity, (OrderSide.Buy));
firstRun = 0;
}
if (CrossBelow(rsi, UpLevel) && SatislaBasla)
{
SendMarketOrder(Symbol, OrderQuantity, (OrderSide.Sell));
firstRun = 0;
}
}
else
if (CrossAbove(rsi, DownLevel))
SendMarketOrder(Symbol, OrderQuantity, (OrderSide.Buy));
if (CrossBelow(rsi, UpLevel))
SendMarketOrder(Symbol, OrderQuantity, (OrderSide.Sell));
}
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled)
{
}
}
}
}
RSI stratejisi sablonu uzerinde sadece bir kac degisiklik yaparak bu sonuca ulasabiliyoruz. Dikkat edilmesi gereken yerler:
SendOrderSequential(true,true); //Bu son versiyonda ekledigimiz bir ozellik. Ilk ayar true oldugunda emirlerin sirali gonderilme sarti devam etmekte, 2. ayari true yaptigimizda ise satis ya da alisla baslamasinin bir onemi olmasin diyoruz. Yani ilk emir satis da gelse kabul edilecek ve sonra alis kosulu aranacak, sirali gitmeye devam edecektir.
if (firstRun == 1): baslangic emrini ayristiriyoruz