Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 361

 
ijonhson:

La cuestión es si debo calcular el código del indicador 900 veces por tick (3 timeframes con 300 barras por ejemplo), o 3 veces. Está claro que icustom es menos engorroso, lo meto en el bucle y ya está. Como opción, he visto una dirección de un array de valores del indicador que se pasa a un EA mediante dll, pero no quiero coger el indicador en un set


De nuevo, hay un error en el planteamiento del problema. ¿Por qué necesita 900 barras en su Asesor Experto? Si realmente necesitas tantos datos en el indicador, 900 barras, entonces trabaja con ellos en el propio indicador, ¿por qué arrastrarlos al Asesor Experto? La tarea correcta es el 50% del éxito

 
Nikolay Ivanov:

El enunciado del problema vuelve a ser erróneo... ¿Por qué necesita 900 barras en su EA? Si realmente necesitas tantos datos en el indicador, 900 de ellos, para luego trabajar con ellos en el propio indicador, ¿por qué arrastrarlos al Asesor Experto? La tarea correcta es el 50% del éxito


Necesito comparar los picos mínimos y máximos del indicador en 3 timeframes por ejemplo 5min 15min y 30min, para determinar las tendencias, no podré adivinar los picos, es decir tener que dar vueltas sobre todo el historial. Tomé 300 barras de historia como ejemplo.

Sigue consumiendo demasiados recursos para usar icustom.

 
ijonhson:

Necesito comparar el indicador de picos mínimos y máximos para 3 marcos de tiempo por ejemplo 5min 15min y 30min, para determinar las tendencias, no podré adivinar los picos, eso es tener que mirar a través de toda la historia. Tomé 300 barras de historia como ejemplo.

Sigue siendo demasiado intensivo en recursos para usar icustom.


La pregunta sigue abierta en ontick, la función IndicatorCounted() en el primer cálculo da -1, ¿cómo se puede sustituir en un Asesor Experto?

 
ijonhson:

"No es necesario cambiarlo" - es decir, ¿funciona correctamente con onTick en Expert Advisor así como con onCalculate en el indicador?

No, me refería a que no es necesario en absoluto.

 
Alexey Viktorov:

No, me refería a que no es necesario en absoluto.


Desenterradohttps://www.mql5.com/ru/articles/1456, voy a mirar en él, pero pensé que había una opción más fácil.

Перенос кода индикатора в код эксперта. Строение индикатора.
Перенос кода индикатора в код эксперта. Строение индикатора.
  • 2007.02.16
  • Nikolay Kositsin
  • www.mql5.com
Прежде чем приступить к основной теме статьи, мне следовало бы вкратце коснуться общего строения индикатора под углом зрения программиста, которого этот индикатор интересует, как будущая часть кода эксперта: Вполне естественно, что у реального индикатора может быть другое количество отображаемых индикаторных значений, другое количество...
 
ijonhson:

La pregunta sigue abierta en la función ontick IndicatorCounted() en la primera comprobación ¿cómo reemplazarlo en el Asesor de Expertos?

No es necesario mirar por las tapas en cada tic, no cambian.

En el EA, compruebe el ciclo en la apertura de la barra y salga del ciclo tan pronto como se encuentre el tope.

   int count=Bars(Symbol,Period);
   for(int i=0; i<count; i++) {
     // ищем и запоминаем в переменную, если нашли break;
   }
 
ijonhson: La pregunta sigue abierta en ontick, la función IndicatorCounted() en el primer cálculo da -1, ¿qué la sustituirá en el Asesor Experto?

La función IndicatorCounted() se utilizaba anteriormente en los indicadores con la función start(). Los nuevos indicadores con OnCalculate() utilizan el segundo parámetro prev_calculado en su lugar. Los he analizado especialmente y he descubierto que difieren en 1. La diferencia es pequeña y muestran cuántas barras se han calculado ya. Si es 0 (o -1), hay que calcular todas las barras. Esto ocurre al iniciar el indicador, cuando debe dibujar toda la línea y guardar el resultado en las matrices del buffer. En los siguientes ticks, sólo se deben recalcular los datos de la última barra. Por lo tanto, lo que se hace en el valor cero (o -1) debe colocarse en OnInit() del EA. El resto - muy poco - debe ser colocado en OnTick()

 
YarTrade:

Gracias. Trabajaré en ello. Por alguna razón no leí nada en el libro de texto sobre el tipo largo.

Tienes que poner el cursor sobre long int o short (o cualquier otra palabra del idioma) y pulsar F1.

 
ijonhson:

Muchas gracias, pero por lo que entiendo de la descripción de la función, ejecutará todo el código del indicador para obtener un solo valor, en el lugar que he especificado, es decir, para obtener todos los máximos tendré que calcular el código del indicador n veces (recorrer todas las barras una a una), pero necesito comparar el orden de los máximos de este indicador en varios timeframes.

Y luego tienes que buscar las tapas manualmente

¡Esto está absolutamente mal! ¡Todas las barras del indicador, cuando se llaman desde el Asesor Experto usando iCustom(), se recalculan sólo una vez! Todas las siguientes llamadas del indicador funcionan con los resultados ya calculados, sólo se recalculan las barras no calculadas de la llamada anterior. Por ejemplo, al llamar al indicador de periodo M15 desde el gráfico H1 en cada nueva barra, resulta que no se recalculan 4 barras de 15 minutos desde la llamada al indicador. Por tanto, sólo se recalcularán estos 4 compases.

Incluso si hacemos un bucle a través de la secuencia de barras de 0 a xxx, el indicador se recalculará sólo una vez en la primera llamada. Las siguientes llamadas no realizarán ningún recálculo.

 
ijonhson:

Desenterradohttps://www.mql5.com/ru/articles/1456, voy a mirar en él, pero pensé que había una manera más fácil

Este es un mal ejemplo. ¡¡¡Ya tiene diez años!!! El lenguaje ya ha cambiado para mejor.

Razón de la queja: