Probador de estrategias con bot personalizado

 

Hola.

He creado un bot muy sencillo para probar y aprender. Pero tengo un pequeño problema. El bot lo único que hace es printearme datos de unos indicadores.

Por ejemplo selecciono un periodo de tres días y tengo una gráfica real con unos indicadores y unos parámetros dados por mí. Esos mismos parámetros los he utilizado para inicializar los indicadores en MQL5.

Al realizar la simulación me ocurre la siguiente curiosidad:

Antes del día en el que comenzará la simulación, los indicadores tienen exactamente los mismos datos y la misma forma que aparecen en la gráfica real del índice que estoy usando, pero a partir de que comienza la simulación, los datos o la forma de los indicadores comienza a variar significativamente. He utilizado también una simulación de 33 días para comprobar si a lo largo del tiempo los indicadores tienden a igualarse con los del gráfico real y si que es verdad que tienden a tener una forma y datos parecidos pero se aprecian muchas diferencias y es lo que no acabo de entender. He hablado con alguna persona y me han dicho que utilizase en la configuración del programador de estrategias la configuración de ticks reales, pero esa configuración era la que tenía puesta, o sea que de ahí no puede venir el error.

¿Podéis alguien decirme que está pasando?

Muchas gracias. Un saludo.

 
davidpc85:

Hola.

He creado un bot muy sencillo para probar y aprender. Pero tengo un pequeño problema. El bot lo único que hace es printearme datos de unos indicadores.

Por ejemplo selecciono un periodo de tres días y tengo una gráfica real con unos indicadores y unos parámetros dados por mí. Esos mismos parámetros los he utilizado para inicializar los indicadores en MQL5.

Al realizar la simulación me ocurre la siguiente curiosidad:

Antes del día en el que comenzará la simulación, los indicadores tienen exactamente los mismos datos y la misma forma que aparecen en la gráfica real del índice que estoy usando, pero a partir de que comienza la simulación, los datos o la forma de los indicadores comienza a variar significativamente. He utilizado también una simulación de 33 días para comprobar si a lo largo del tiempo los indicadores tienden a igualarse con los del gráfico real y si que es verdad que tienden a tener una forma y datos parecidos pero se aprecian muchas diferencias y es lo que no acabo de entender. He hablado con alguna persona y me han dicho que utilizase en la configuración del programador de estrategias la configuración de ticks reales, pero esa configuración era la que tenía puesta, o sea que de ahí no puede venir el error.

¿Podéis alguien decirme que está pasando?

Muchas gracias. Un saludo.

Pueden ser muchas cosas, no hay una respuesta única.

Mi recomendación puesto que solo es un bot para aprender, es que introduzcas el código (ALT+S). Puede que alguien, aquí en el foro, se anime a revisarlo.

Si lo veo yo, trataré de echarte una mano.

 
#include <Trade/Trade.mqh>
int tma01_h = 0;
int borBanda_h = 0;
int tma02_h = 0;
double tma01_superior[];         // En propiedades se llama Top
double tma01_inferior[];         // En propiedades se llama Bottom.
double tma01_central[];          // En propiedades se llama TMA
double borBanda_central[];       // En propiedades se llama Middle.
double borBanda_superior[];      // En propiedades se llama Upper.
double borBanda_inferior[];      // En propiedades se llama Lower.
double tma02_central[];       // En propiedades se llama TMA.
double tma02_superior[];      // En propiedades se llama Top.
double tma02_inferior[];      // En propiedades se llama Inferior.
CTrade trade;
ulong trade_ticket = 0;       // Variable para guardar los tickets de cada operación.
bool time_passed = true;      // Bandera para marcar el tiempo entre operaciones.
string nameTmaIndicador = "Extreme_TMA_line_indicator.ex5";
void OnInit()
  {
   tma01_h = iCustom(_Symbol, _Period, nameTmaIndicador,120, 3235, 9.5, 0.032, 1);
   if (tma01_h == INVALID_HANDLE) {
      Print("Error al abrir el TMA superior e inferior");
      return;
   }
   borBanda_h = iBands(_Symbol, _Period, 222, 0, 1.2, tma01_h);
   if (borBanda_h == INVALID_HANDLE) {
      Print("Error al abrir las bandas de Bollinger");
      return;
   }
   tma02_h = iCustom(_Symbol, _Period, nameTmaIndicador,546, 50, 1.0, 0.2, 1);
   if (tma02_h == INVALID_HANDLE) {
      Print("Error al abrir el TMA central");
      return;
   }
   ArraySetAsSeries(tma01_central, true);
   ArraySetAsSeries(tma01_inferior, true);
   ArraySetAsSeries(tma01_superior, true);
   ArraySetAsSeries(borBanda_central, true);
   ArraySetAsSeries(borBanda_inferior, true);
   ArraySetAsSeries(borBanda_superior, true);
   ArraySetAsSeries(tma02_central, true);
   ArraySetAsSeries(tma02_inferior, true);
   ArraySetAsSeries(tma02_superior, true);
   
  }

void OnTick()
  {
   CopyBuffer(tma01_h, 0, 1, 6765, tma01_central);
   CopyBuffer(tma01_h, 2, 1, 6765, tma01_superior);
   CopyBuffer(tma01_h, 3, 2, 6765, tma01_inferior);
   CopyBuffer(borBanda_h, BASE_LINE, 1, 222, borBanda_central);
   CopyBuffer(borBanda_h, UPPER_LINE, 1, 222, borBanda_superior);
   CopyBuffer(borBanda_h, LOWER_LINE, 1, 222, borBanda_inferior);
   CopyBuffer(tma02_h, 0, 1, 100, tma02_central);
   CopyBuffer(tma02_h, 2, 1, 100, tma02_superior);
   CopyBuffer(tma02_h, 3, 1, 100, tma02_inferior);
   Print(">>>>>>>>>>>>>>>>>>>>>>>>>> TMA01 TOP ", tma01_superior[2], " ", tma01_superior[1], " ", tma01_superior[0]);
   Print(">>>>>>>>>>>>>>>>>>>>>>>>>> TMA01 BOTTOM ", tma01_inferior[2], " ", tma01_inferior[1], " ", tma01_inferior[0]);
   Print(">>>>>>>>>>>>>>>>>>>>>>>>>> TMA02 TMA ", tma02_central[2], " ", tma02_central[1], " ", tma02_central[0]);
   Print(">>>>>>>>>>>>>>>>>>>>>>>>>> BOLLINGER BASE ", borBanda_central[2], " ", borBanda_central[1], " ", borBanda_central[0]);
  }
Otro problema que obtengo es que cuando pongo a ibans que obtenga los datos del indicador anterior (tma01_h) me da valores inf.