Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1218

 
Pineapple88:

Lo he arreglado, ¡parece que todo funciona!)

Transferí dos indicadores MA a la función OnInit.

¿Entiendo que creamos sólo el handle del indicador en la función OnInit y realizamos todas las demás manipulaciones con las matrices en la función OnTick y lo comprobamos en cada tick?

Sí, creamos el mango del indicador en OnInit. Y todas las demás operaciones se implementan en OnTick.

 
Vladimir Karputov:

Sí, el indicador se crea en OnInit. Y el resto del trabajo se implementa en OnTick.

Lo tengo, ¡gracias!

 
Optimizar un EA en MT5 es algo necesario y útil. Pero aquí está la pregunta: ¿Para qué periodo son los mejores parámetros de la operación de EA para garantizar su rentabilidad en el futuro? Se cree que la optimización debe realizarse cada mes. ¿Pero la optimización garantiza que el depósito no se perderá al menos en el próximo mes?
 
BORIS GOLICIN:
Optimizar un EA en MT5 es algo necesario y útil. Pero aquí está la pregunta: ¿Para qué periodo son los mejores parámetros de funcionamiento de la EA que garantizan su rentabilidad en el futuro? Se cree que la optimización debe realizarse cada mes. ¿Pero la optimización garantiza que el depósito no se perderá al menos en el próximo mes?

para una garantía a la banca )

 
BORIS GOLICIN:
La optimización del Asesor Experto en MT5 es útil y necesaria. Pero aquí está la pregunta: ¿para qué periodo los mejores parámetros para el experto garantizan que se alcance el punto de equilibrio en el futuro? Se cree que la optimización debe realizarse cada mes. ¿Pero la optimización garantiza que el depósito no se perderá al menos en el próximo mes?

En mi opinión, la optimización es inútil. Sólo sirve para estimar las pérdidas que ha tenido en un periodo determinado y los beneficios que podría haber obtenido. Además, la situación del mercado cambiará en cualquier momento y toda la optimización se irá al garete. Para que una estrategia funcione durante más tiempo en el modo automático, no hay que ser codicioso. No intentes exprimir al máximo el mercado. La empresa de corretaje no lo permitirá.

 

Esto es lo que he podido encontrar sobre la optimización en Internet:

Supongamos que tenemos un trozo de historia de 15 años (al menos 10), digamos desde 2000 hasta 2015. Dividimos esta pieza en los siguientes periodos: 2000-2003 es nuestro trozo de prueba hacia atrás, 2003-2012 es el período de optimización, 2012-2015 es la prueba hacia adelante. Tras la optimización, realizamos la habitual prueba de avance seleccionando los 10-20 conjuntos más exitosos. A continuación, ejecutamos esos conjuntos seleccionados en una prueba retrospectiva. Los resultados deberían ser similares a los obtenidos en las pruebas de avance. Los conjuntos que han superado la prueba se guardan para su posterior comparación. A continuación, ejecutamos la prueba contra los conjuntos restantes en todo el trozo de historia y seleccionamos el que muestra mejores resultados que los demás. Como resultado, nos quedamos con un conjunto de ajustes que es el más adecuado.
¿Cómo seleccionamos los conjuntos en la primera etapa, la prueba de avance? Muy sencillo: lo más importante para nosotros en esta fase es el tipo de curva de equilibrio. Lo ideal es que sea una línea recta que vaya desde la parte inferior izquierda hasta la esquina superior derecha. Dicho esto, no tiene sentido ver todos los mejores conjuntos seguidos: a menudo son casi idénticos.

 

¡Buenas tardes a todos!

Al acceder al manejador del indicador ATR, los primeros 30 segundos dan valores extraños.

¿No puedes averiguar la causa?

int ATRdefinition = 0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   ATRdefinition = iATR(_Symbol,_Period,14);
   if(ATRdefinition == INVALID_HANDLE)
     {
      Print("Ошибка создания Хендла");
     }

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   string signal = "";

   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   double ATRarray[];
   ArraySetAsSeries(ATRarray,true);

   CopyBuffer(ATRdefinition,0,0,3,ATRarray);
   
   double ATRValue = NormalizeDouble(ATRarray[0],5);

   Print("ATRVALUE: ",ATRValue);
  }
Archivos adjuntos:
ATR.png  51 kb
 
Pineapple88:

¡Buenos días a todos!

Al acceder al manejador del indicador ATR, los primeros 30 segundos dan valores extraños.

No puedo entender cuál es la razón?

¿Comprueba si el indicador está listo?

//--- determine the number of values calculated in the indicator 
   int calculated=BarsCalculated(handle); 

(inserte su mango en lugar de"mango")

 

¿Resulta que este dato(402082) no es suficiente para calcular el indicador?

He pensado que la funciónBarsCalculated debería dar un error (-1) si no hay suficientes datos para el cálculo

Archivos adjuntos:
ATR2.png  21 kb
 
Pineapple88:

¿Resulta que este dato(402082) no es suficiente para calcular el indicador?

He pensado que la funciónBarsCalculated debería dar un error (-1) si no hay suficientes datos para el cálculo

Parece que el terminal sigue bombeando el historial - respectivamente, el indicador se recalcula todo el tiempo. O bien, otra opción: en tu terminal, has puesto un número MUY grande de barras para mostrar en el gráfico y tu ordenador es MUY débil.


Añadido.

Comprobado en MetaTrader 5 x64 build 2470 y con la configuración de "Mostrar barras" de 100000 - con el historial largamente descargado. El código ha funcionado perfectamente.

Razón de la queja: