Spesso, le strategie automatizzate devono considerare informazioni provenienti da diversi periodi di tempo prima di prendere una decisione di trading. Fortunatamente, cTrader fornisce numerosi strumenti che consentono agli algoritmi di accedere facilmente ai dati da più periodi di tempo. In questo video e nel relativo articolo, spiegheremo come puoi utilizzare questi strumenti per creare un cBot efficace.
Dichiara i parametri del cBot
Inizieremo dichiarando i parametri necessari per una media mobile. Avremo bisogno del periodo, del periodo di tempo e del tipo di media mobile.
12345678
[Parameter("MA 1 Period", DefaultValue = 14, Group = "Moving Averages")]publicintMA1Period{get;set;}[Parameter("MA 1 Timeframe", DefaultValue = "Hour", Group = "Moving Averages")]publicTimeFrameMA1Timeframe{get;set;}[Parameter("MA 1 Type", Group = "Moving Averages")]publicMovingAverageTypeMA1Type{get;set;}
Quindi, possiamo definire la media mobile.
1
privateMovingAverage_ma1;
Possiamo inizializzare la media mobile nel metodo OnStart(). Useremo il metodo MarketData.GetBars() per ottenere le barre della prima media mobile e passarle al costruttore dell'indicatore. Il metodo GetBars() è utile per ottenere i dati delle barre per qualsiasi periodo di tempo e qualsiasi simbolo di cui hai bisogno.
Parameter("MA 1 Period",DefaultValue=14,Group="Moving Averages")]publicintMA1Period{get;set;}[Parameter("MA 1 Timeframe", DefaultValue = "Hour", Group = "Moving Averages")]publicTimeFrameMA1Timeframe{get;set;}[Parameter("MA 1 Type", Group = "Moving Averages")]publicMovingAverageTypeMA1Type{get;set;}[Parameter("MA 2 Period", DefaultValue = 14, Group = "Moving Averages")]publicintMA2Period{get;set;}[Parameter("MA 2 Timeframe", DefaultValue = "Hour2", Group = "Moving Averages")]publicTimeFrameMA2Timeframe{get;set;}[Parameter("MA 2 Type", Group = "Moving Averages")]publicMovingAverageTypeMA2Type{get;set;}[Parameter("MA 3 Period", DefaultValue = 14, Group = "Moving Averages")]publicintMA3Period{get;set;}[Parameter("MA 3 Timeframe", DefaultValue = "Hour4", Group = "Moving Averages")]publicTimeFrameMA3Timeframe{get;set;}[Parameter("MA 3 Type", Group = "Moving Averages")]publicMovingAverageTypeMA3Type{get;set;}privateMovingAverage_ma1;privateMovingAverage_ma2;privateMovingAverage_ma3;protectedoverridevoidOnStart(){_ma1=Indicators.MovingAverage(MarketData.GetBars(MA1Timeframe).ClosePrices,MA1Period,MA1Type);_ma2=Indicators.MovingAverage(MarketData.GetBars(MA2Timeframe).ClosePrices,MA2Period,MA2Type);_ma3=Indicators.MovingAverage(MarketData.GetBars(MA3Timeframe).ClosePrices,MA3Period,MA3Type);}
Implementare la logica di trading
A questo punto, possiamo implementare la logica di trading. La nostra strategia manterrà una posizione long quando tutte le medie mobili sono in aumento e una posizione short quando le medie mobili sono in calo. Ecco il codice per tutta la logica lato acquisto.
Eseguire il backtest della strategia multi-timeframe
Infine, dovremmo eseguire il backtest del nostro nuovo cBot. Possiamo vedere che il cBot entra in posizioni quando le medie mobili sono sincronizzate nella stessa direzione e rimane fuori dal mercato quando ogni indicatore punta in una direzione diversa.