Preguntas de un "tonto" - página 57

 
Lizar:

Voy a echar un vistazo a la versión publicada en el artículo. Hasta ahora ha hecho algunos expertos en espías, funciona muy bien.

MetaDriver:

No creo que esta tecnología funcione en el probador.

Funciona.

Es genial que funcione en el probador. Todavía no he podido ponerlo en práctica. Pero esto se debe probablemente a la falta de experiencia. Por ahora me he decidido por un temporizador, pero es largo.

Al intentar adjuntar el Asesor Experto al gráfico, me aparece este mensaje:

No entiendo qué tiene que ver el USDJPY con esto. Incluso he comentado la obtención de la manija en la inicialización en el código y este mensaje todavía sale.

 
Lizar:

Funciona.

Konstantin, ¿entiendo correctamente que el código ejecutable del EA, que normalmente reside en OnTick() o OnTimer(), necesita ser colocado en OnChartEvent() para que tu esquema funcione en modo multidivisa, tanto en tiempo real como en tester.
 
tol64:

Es genial que funcione en el probador. Todavía no he podido ponerlo en práctica. Pero esto se debe a la falta de experiencia, supongo. Por ahora me he conformado con el temporizador, pero es demasiado largo.

Al intentar adjuntar el Asesor Experto al gráfico, me aparece este mensaje:

No entiendo qué tiene que ver el USDJPY con esto. Incluso he comentado la obtención de una manija en la inicialización en el código y este mensaje sigue saliendo.

Todavía no lo he mirado.

Tol64:
Konstantin, ¿entiendo correctamente que el código ejecutable del EA, que normalmente reside en OnTick() o OnTimer(), necesita ser colocado en OnChartEvent() para que tu esquema funcione en modo multidivisa, tanto en tiempo real como en tester.

Sí.

 
tol64:

Es genial que funcione en el probador. Todavía no he podido ponerlo en práctica. Pero eso se debe a la falta de experiencia, supongo. Por ahora me he detenido en el temporizador, pero es demasiado largo.

Al intentar adjuntar el Asesor Experto al gráfico, me aparece este mensaje:

No entiendo qué tiene que ver el USDJPY con esto. Incluso he comentado la obtención de una manija en la inicialización en el código y el mensaje sigue saliendo.

Lo he mirado. El Asesor Experto está funcionando. Sólo hubo un error de imprenta en el mensaje de error.

Lo que te daba era un mensaje de que el símbolo no estaba seleccionado en la ventana de MarketWatch. O bien establece los símbolos con los que trabaja el Asesor Experto en la ventana MarketWatch, o comenta las llamadas de los spyros en los símbolos apropiados en OnInit().

Adjunto la versión modificada del exSpy Control panel MCM.mq5.

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
Archivos adjuntos:
 
Lizar:

He echado un vistazo. El experto está trabajando. Sólo había una errata en el mensaje de error.

Lo que te daba era un mensaje de que el símbolo no estaba seleccionado en la ventana de MarketWatch. O bien establece los símbolos con los que trabaja el Asesor Experto en la ventana MarketWatch, o comenta las llamadas de los spyros en los símbolos apropiados en OnInit().

Adjunto la versión modificada del exSpy Control panel MCM.mq5.

Incluso me reí de mí mismo por mi falta de atención))) El USDJPY estaba en la ventana de Market Watch. No había ningún otro símbolo, y las huellas sólo tenían el mismo mensaje. )))

Gracias.

 
tol64:
Konstantin, ¿entiendo bien que el código ejecutable del Asesor Experto, que normalmente se encuentra en OnTick() o OnTimer(), debe colocarse en OnChartEvent() para que tu esquema funcione en modo multidivisa, tanto en tiempo real como en tester.

Es mejor implementar toda la funcionalidad requerida en forma de procedimientos y funciones separadas (recomiendo esta última), y luego llamarla desde cualquier lugar en el Asesor Experto.

Si se utiliza la POO, toda la funcionalidad requerida puede ser implementada como un conjunto de varios métodos de la clase principal (normalmente es un descendiente de la clase Experto).

 
Interesting:

Es mejor implementar toda la funcionalidad necesaria como procedimientos y funciones separadas (recomiendo esto último), y luego llamarla desde cualquier parte del Asesor Experto.

Si utiliza POO, puede implementar toda la funcionalidad necesaria como un conjunto de varios métodos de la clase principal (normalmente es una descendiente de la clase Asesor Experto).

Por el momento, toda la funcionalidad está casi implementada de esta manera. Casi. Es decir, todo el código son unas cuantas funciones que contienen los cálculos básicos. Todavía no domino completamente la POO, pero ya puedo ver el beneficio de usarla. El código crece día a día y pronto será muy inconveniente utilizarlo sin OOP.

He creado un tema aparte en el que te he dado los resultados de varios métodos de prueba multidivisa:Resultados de las pruebas de asesores expertos multidivisa. Todavía hay muchas cosas sobre este tema que no me quedan claras.

 

¿Por qué no se cargan mis cotizaciones? Por ejemplo en el EURUSD, sólo cargan hasta agosto de ese año. Eso es todo. No quieren cargarlos más. ¿Hay algún otro lugar donde pueda encontrar archivos con comillas?

He configuradoel número de barras como ilimitado. Lo refresqué varias veces. He pulsado HOME varias veces. Sigue sin funcionar.

 

Y dónde está la "lista completa anunciada" de todos los archivos de MT5 y sus detalles.

Acabo de salir del baobab hoy, lo siento.

 

Un indicador fractal multitemporal.

La esencia del indicador es mostrar los fractales de un marco temporal (o varios a la vez) en otro.

Artículo fuente: https://www.mql5.com/ru/code/7304, código del indicador en MQL4

Primero intenté copiar y pegar desde la versión .mq4 con algunas micro correcciones para .mq5 (ni siquiera cito este código - el problema ocurrió cuando descubrí la manipulación descuidada de arrays como High[shift+i] dentro en el código fuente de MQL4.

bool Fractal (string F,int Per, int shift) {...}

Intenté reescribirlo en MQL5 (no hay visibilidad por defecto de tales arrays fuera de OnCalculate).

Luego traté de reescribirlo para MQL5 usando la llamada a varias manijas iFractals con diferentes parámetros PERIOD_.... Como resultado, los fractales se deshicieron, aunque a veces sólo una serie de flechas fractales en el TF correspondiente consigue aterrizar adecuadamente. Lo que es notable, cuando vuelvo al mismo timeframe en el terminal desde algunos otros timeframes diferentes los fractales aparecen de manera diferente lo que sugiere lo siguiente: los datos en el terminal de este indicador desconocido vagan de manera incomprensible, pero siempre pensé que la misma imagen errónea debería repetirse de manera estable. Por supuesto, la segunda variante ni siquiera contienebool Fractal(cadena F,int Per, int shift) {...}, que quiero dirigir a los desarrolladores experimentados de indicadores.

Esto es lo que he conseguido dibujar:

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots   8

#property indicator_label1  "FractalUp1"
#property indicator_type1   DRAW_ARROW
#property indicator_color1 clrRed
#property indicator_width1  2

#property indicator_label2  "FractalDw1"
#property indicator_type2   DRAW_ARROW
#property indicator_color2 clrRed
#property indicator_width2  2

#property indicator_label3  "FractalUp2"
#property indicator_type3   DRAW_ARROW
#property indicator_color3 clrBlue
#property indicator_width3  2

#property indicator_label4  "FractalDw2"
#property indicator_type4   DRAW_ARROW
#property indicator_color4 clrBlue
#property indicator_width4  2

#property indicator_label5  "FractalUp3"
#property indicator_type5   DRAW_ARROW
#property indicator_color5 clrGold
#property indicator_width5  2

#property indicator_label6  "FractalDw3"
#property indicator_type6   DRAW_ARROW
#property indicator_color6 clrGold
#property indicator_width6  2

#property indicator_label7  "FractalUp4"
#property indicator_type7   DRAW_ARROW
#property indicator_color7 clrSienna
#property indicator_width7  2

#property indicator_label8  "FractalDw4"
#property indicator_type8   DRAW_ARROW
#property indicator_color8 clrSienna
#property indicator_width8  2

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];

int ArrowShift=-10;

int handle1;
int handle2;
int handle3;
int handle4;

int OnInit()
  {
//   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---
   SetIndexBuffer(0,ExtMapBuffer1,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer1,EMPTY_VALUE);

   SetIndexBuffer(1,ExtMapBuffer2,INDICATOR_DATA);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer2,EMPTY_VALUE);

//---
   SetIndexBuffer(2,ExtMapBuffer3,INDICATOR_DATA);
   PlotIndexSetInteger(2,PLOT_ARROW,217);
   PlotIndexSetInteger(2,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer3,EMPTY_VALUE);

   SetIndexBuffer(3,ExtMapBuffer4,INDICATOR_DATA);
   PlotIndexSetInteger(3,PLOT_ARROW,218);
   PlotIndexSetInteger(3,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer4,EMPTY_VALUE);

//---
   SetIndexBuffer(4,ExtMapBuffer5,INDICATOR_DATA);
   PlotIndexSetInteger(4,PLOT_ARROW,217);
   PlotIndexSetInteger(4,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer5,EMPTY_VALUE);

   SetIndexBuffer(5,ExtMapBuffer6,INDICATOR_DATA);
   PlotIndexSetInteger(5,PLOT_ARROW,218);
   PlotIndexSetInteger(5,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer6,EMPTY_VALUE);

//---
   SetIndexBuffer(6,ExtMapBuffer7,INDICATOR_DATA);
   PlotIndexSetInteger(6,PLOT_ARROW,217);
   PlotIndexSetInteger(6,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer7,EMPTY_VALUE);

   SetIndexBuffer(7,ExtMapBuffer8,INDICATOR_DATA);
   PlotIndexSetInteger(7,PLOT_ARROW,218);
   PlotIndexSetInteger(7,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(7,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer8,EMPTY_VALUE);

   handle1=iFractals(_Symbol, PERIOD_M15);
   handle2=iFractals(_Symbol, PERIOD_H1);
   handle3=iFractals(_Symbol, PERIOD_H4);
   handle4=iFractals(_Symbol, PERIOD_D1);

   return(0);
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int B1 = BarsCalculated(handle1);
   int B2 = BarsCalculated(handle2);
   int B3 = BarsCalculated(handle3);
   int B4 = BarsCalculated(handle4);

   CopyBuffer(handle1,0,0,B1,ExtMapBuffer1);
   CopyBuffer(handle1,1,0,B1,ExtMapBuffer2);
   CopyBuffer(handle2,2,0,B2,ExtMapBuffer3);
   CopyBuffer(handle2,3,0,B2,ExtMapBuffer4);
   CopyBuffer(handle3,4,0,B3,ExtMapBuffer5);
   CopyBuffer(handle3,5,0,B3,ExtMapBuffer6);
   CopyBuffer(handle4,6,0,B4,ExtMapBuffer7);
   CopyBuffer(handle4,7,0,B4,ExtMapBuffer8);

   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   return;
  }
 

Obviamente, faltan algunas comprobaciones condicionales dentro de OnCalculate así como en la función externa de tipo bool o simplemente no uso correctamente lo que ya tengo en mi código. Además, ¿tal vez haya que inicializar correctamente las matrices en el lugar adecuado y establecerlas como series de tiempo?

Razón de la queja: