Frequentemente, as estratégias automatizadas precisam de considerar informações de diferentes timeframes antes de tomar uma decisão de negociação. Felizmente, o cTrader fornece muitas ferramentas que permitem que os algos acedam facilmente a dados de múltiplos timeframes. Neste vídeo e no artigo correspondente, explicaremos como pode usar estas ferramentas para criar um cBot eficaz.
Declarar parâmetros do cBot
Começaremos por declarar os parâmetros necessários para uma média móvel. Precisaremos do período, do timeframe e do tipo de média móvel.
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;}
Depois, podemos definir a média móvel.
1
privateMovingAverage_ma1;
Podemos inicializar a média móvel no método OnStart(). Usaremos o método MarketData.GetBars() para obter as barras da primeira média móvel e passá-las para o construtor do indicador. O método GetBars() é útil para obter dados de barras para qualquer timeframe e qualquer símbolo de que precise.
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);}
Implementar a lógica de negociação
Neste ponto, podemos implementar a lógica de negociação. A nossa estratégia manterá uma posição de compra quando todas as médias móveis estiverem a subir e uma posição de venda quando as médias móveis estiverem a cair. Aqui está o código para toda a lógica do lado da compra.
Por último, devemos testar o nosso novo cBot. Podemos ver que o cBot entra em posições quando as médias móveis estão sincronizadas na mesma direção e fica fora do mercado quando cada indicador aponta para uma direção diferente.