A menudo, las estrategias automatizadas necesitan considerar información de diferentes marcos temporales antes de tomar una decisión de trading. Afortunadamente, cTrader proporciona muchas herramientas que permiten a los algoritmos acceder fácilmente a datos de múltiples marcos temporales. En este video y su artículo correspondiente, explicaremos cómo puede usar estas herramientas para crear un cBot efectivo.
Declarar parámetros del cBot
Comenzaremos declarando los parámetros necesarios para una media móvil. Necesitaremos el período, el marco temporal y el tipo de media móvil.
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;}
Luego, podemos definir la media móvil.
1
privateMovingAverage_ma1;
Podemos inicializar la media móvil en el método OnStart(). Usaremos el método MarketData.GetBars() para obtener las barras de la primera media móvil y pasarlas al constructor del indicador. El método GetBars() es útil para obtener datos de barras para cualquier marco temporal y cualquier símbolo que necesite.
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 la lógica de trading
En este punto, podemos implementar la lógica de trading. Nuestra estrategia mantendrá una posición de compra cuando todas las medias móviles estén subiendo y una posición de venta cuando las medias móviles estén bajando. Aquí está el código para toda la lógica de compra.
Por último, deberíamos hacer backtesting de nuestro nuevo cBot. Podemos ver que el cBot abre posiciones cuando las medias móviles están sincronizadas en la misma dirección y se mantiene fuera del mercado cuando cada indicador apunta a una dirección diferente.