Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿Existe un enlace para el uso correcto de iCustom() teniendo en cuenta estos matices? Porque estoy cansado de comprobarlo y buscar lo que está mal.
Echa un vistazo al artículo Indicador por indicador en MQL5:
¿Es necesario inicializar los buffers de los indicadores?
Los arrays en MQL5 no se inicializan por defecto con ningún valor, y esto ciertamente se aplica a los arrays que se asignan a los buffers de indicadores usando SetIndexBuffer(). Si un array es un buffer indicador, su tamaño dependerá del parámetro rates_total en el manejador OnCalculate().
Puede existir la tentación de inicializar todos los búferes de los indicadores con el valor EMPTY_VALUE vacío utilizando la función ArrayInitialize(), por ejemplo, una vez al principio de OnCalculate().
...
Estimado Rosh - Leí este artículo, pero no pude aplicarlo, porque uso la segunda forma de llamada OnCalculate, porque necesito el tiempo de cada barra, no sólo el precio.
La razón realmente es que hay basura en el búfer del indicador. Y la inicialización del buffer con valores vacíos no da nada, porque en el probador, cuando aparecen nuevos datos, el buffer del indicador se incrementa automáticamente e inicialmente contiene realmente basura, y si el buffer no se llena en cada barra del indicador, la basura se queda ahí.
Mi EA se ejecuta en el temporizador - es mucho más rápido que OnTick() por alguna razón. Y puedo probarlo el fin de semana.
Estoy tratando de averiguar lo que se encuentra en cada búfer indicador. La complejidad radica en que un indicador llama a otro en función de sus valores.
Intentaré seleccionar un periodo claro y establecer el tamaño de los buffers. Determinaré la causa de los falsos positivos en el probador. Es una pena que el probador no tenga un depurador, todo el mundo lo estaba esperando.
Tengo un EA que se ejecuta en un temporizador, que es mucho más rápido que OnTick() por alguna razón. También puedes probarlo los fines de semana.
Hay un artículo probador básico en MetaTrader 5 donde se muestra:
Hemos medido el tiempo de prueba con diferentes valores del parámetro del temporizador (el período de eventos del temporizador). En los datos obtenidos se ha trazado un gráfico que muestra la dependencia del tiempo de ensayo T con el valor de la periodicidad.
Está claro que cuanto menor sea el parámetro del temporizador en la inicialización del mismo mediante la función EventSetTimer(timer), menor será el periodo entre las llamadas al manejador OnTimer() y mayor será el tiempo de prueba T en las mismas condiciones.Si aparece una verdadera basura en iCustom(), el problema está definitivamente en la inicialización.
Inicializa el buffer con cero en lugar de Empty_Value. Cuando aparezca cada nueva barra, no olvides poner a cero la celda del buffer correspondiente.
Si aparece una verdadera basura en iCustom(), el problema está definitivamente en la inicialización.
Inicialice el buffer con cero en lugar de Empty_Value. Cuando aparezca cada nueva barra, no olvide poner a cero la celda del buffer correspondiente.
Sí, lo hice. En cada indicador me aseguro de poner a cero los valores primero - ayudó a deshacerse de la basura.
for(i=primero;i<total_de_tasas-1 && !IsStopped();i++)
{EnterBuffer[i]=0;
EditBuffer[i]=0;
Buffer de salida[i]=0;
....
}
Ahora lo estoy probando en el gráfico de minutos. En el gráfico horario todo funciona como un reloj)))) Tengo algunas preguntas sobre el EA en el gráfico de 1 minuto.
Como era de esperar, no se ha inicializado. En el indicador FB.
En primer lugar, al principio de la función OnCalculate debemos añadir la inicialización de los arrays
Porque la inicialización que tiene, no siempre funciona
En segundo lugar, en el ciclo de cálculo principal, al principio del ciclo, añadir la inicialización de los elementos cero de las matrices (ya que cuando se añade una nueva barra al gráfico, las matrices de indicadores se incrementan automáticamente, y estos nuevos elementos no se inicializan de ninguna manera, ni explícitamente porque prev_calculado>0, ni implícitamente)
Además, en CustomOptimisation.mqh en la clase TBalanceSlopeCriterion hay que añadir un destructor (no afecta al resultado, pero provoca fugas de memoria durante las pruebas)
Yo también tuve un milagro con el probador.
Pruebo un EA con un nombre: el probador dibuja objetos
...he guardado y compilado el EA con otro nombre::sin objetos
Pero me he dado cuenta de que he movido el terminal a otra unidad