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

 
Igor Makanu:

Este es un ejemplo de cómo hacerlo en un indicador. La pregunta era sobre el Asesor Experto.

Foro sobre trading, sistemas de trading automatizados y comprobación de estrategias

Cualquier pregunta de los novatos en MQL4, ayuda y discusión sobre algoritmos y códigos

Noroeste, 2019.03.28 03:54

¡Buenos días a todos!

He perdido dos horas pero no he encontrado nada.

¿Puedes por favor decirme cómo en mq4, en el EA, para correctamente

construir un indicador utilizando los datos de otro utilizando las funciones incorporadas

y debería aparecer en las pruebas en la subventana como debería ser,

por ejemplo MA en datos RSI?


Pero, en general, es casi correcto. Es más fácil escribir un indicador y tomar valores de él que llenar un array para iMAOnArray. Pero, ¿por qué dos bucles?

 
Alexey Viktorov:

Pero, ¿por qué dos ciclos?

No comprobar la primera ejecución del indicador o la carga de los datos históricos

a veces es más compacto y eficiente utilizar la comprobación de condiciones en while/for en lugar de hacer un if adicional y luego utilizar los operadores de bucle después de que se cumpla la condición

si se "pega" el código de cálculo de iMAOnArray() en un bucle que rellena el array con datos RSI, provocará cálculos incorrectos de los elementos aún no rellenados del array rsiBuffer[]

nota, he utilizado en el ejemplo de cálculo iMAOnArray() para todos los elementos de la matriz (total = 0). Estudié esta cuestión hace unos meses, pero por desgracia, no hay información específica sobre cómo utilizar correctamente iMAOnArray() y el parámetrohttps://docs.mql4.com/ru/indicators/imaonarray en él

int total, // número de elementos


Tema iMAOnArray() https://www.mql5.com/ru/forum/303372/page2#comment_10617854




Alexey Viktorov:

Este es un ejemplo de cómo hacerlo en un indicador. La pregunta era sobre el Asesor Experto.

¿Está seguro de que esa era la pregunta?

Noroeste:

Se puede ver en la subventana durante las pruebas,

)))))

iMAOnArray - Технические индикаторы - Справочник MQL4
iMAOnArray - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
В отличие от iMA(...), функция iMAOnArray не выбирает данные на основе названия инструмента, таймфрейма и используемой цены - ценовые данные должны быть подготовлены заранее...
 
Igor Makanu:

no comprobar la primera ejecución del indicador o la carga de los datos históricos

A veces es más compacto y eficiente utilizar la comprobación de condiciones en el código while/for que hacer un if adicional y luego utilizar operadores de bucle después de que se cumpla la condición


¿Está seguro de que esto es lo que quería preguntar?

)))))

)))) No es la primera vez que me pillan un poco desatento. Ni siquiera llegué al final del indicador.

Pero sobre el adicional si

if(prev_calculated==0) limit=rates_total-1; else limit=rates_total-prev_calculated+1;

se puede escribir como

limit = prev_calculated == 0 ? rates_total-1 : rates_total-prev_calculated+1;
¿No usas discos como este?
 

Igor Makanu:

...Estudié esta cuestión hace unos meses, pero por desgracia no hay información específica sobre cómo utilizar correctamente iMAOnArray() y su parámetrohttps://docs.mql4.com/ru/indicators/imaonarray

int total, // número de elementos

El número de elementos es importante cuando no se necesita una media simple. No recuerdo qué tipos de MA utilizan su valor anterior en sus cálculos de un vistazo. En este caso, el número de elementos afectará al resultado. En general, se resuelve en mql5 en medio tic y ya no me interesa.

 
Alexey Viktorov:
¿No utilizas esas entradas?

Yo lo uso, pero suelo escribir mis códigos "en dos pasadas" - cuando escribo desde cero, uso construcciones que son claras para el "análisis fonético" (es decir, esencialmente para leer en voz alta), con las condiciones if() es más fácil decirlo todo )))

entonces, sí, puedo "ordenar el código" un poco y hacer constituciones similares, pero por lo general lo uso en mi biblioteca de ejemplos listos (códigos)

SZS: He visto en algún sitio información sobre el aumento de la productividad de los programas en C#. Sé con seguridad que se recomendaba intentar evitar el uso de foreach() y de este operador ? como el operador if() es más productivo, pero creo que no es crítico - lo uso a mi antojo


Alexey Viktorov:

El número de elementos es importante cuando no se necesita una media simple. No recuerdo qué IAs utilizan su valor anterior en sus cálculos de un vistazo. En este caso, el número de elementos afectará al resultado. En general, se resuelve en mql5 en medio tic y no me interesa.

Es un problema más profundo, he buscado tanto en este foro como en el foro inglés, había una discusión y ejemplos de uso, el parámetro total = 0 o total !=0 hace que el cálculo de iMAOnArray() sea diferente - al discutir con Igor (enlace anterior), decidí utilizar iMAOnArray() sólo con el parámetro total = 0 - la misma solución se utilizó en discusiones anteriores

 
Igor Makanu:

Hay un problema más profundo, he buscado tanto en este foro como en el foro inglés, había una discusión y ejemplos de uso, a partir del parámetro total = 0 o total !=0 el cálculo de iMAOnArray() puede ser diferente - en la discusión con Igor (enlace de arriba), decidí usar iMAOnArray() sólo con el parámetro total = 0 - en discusiones antiguas se usaba la misma solución

Así es. Si no se toman todos los elementos de la matriz y se intenta obtener incluso EMA sin errores, será difícil.

Media móvil exponencial (EMA)

La media móvil suavizada exponencialmente se determina añadiendo al valor de la media móvil anterior una determinada porción del precio de cierre actual. Con las medias móviles suavizadas exponencialmente, se da más importancia al último precio de cierre. Una media móvil exponencial porcentual P será de la siguiente forma:

EMA = (CLOSE (i) * P) + (EMA (i - 1) * (100 - P))

Dónde:

CIERRE (i) - precio de cierre del periodo actual;
EMA (i - 1) - valor de la media móvil del periodo anterior;
P - parte del valor del precio de uso.

Por lo tanto, si se lee la EMA del período 30 de la matriz de 30 elementos, se obtendrá la MA simple en lugar de la EMA.

 
Alexey Viktorov:

Sí. Si no se toman todos los elementos de un array y se intenta obtener incluso EMA sin error, será difícil.

Por lo tanto, si se lee la EMA de período 30 desde un array de 30 elementos, se obtendrá la MA simple en lugar de la EMA.

He comprobadoiMAOnArray() - los resultados son impredecibles, a veces se puede utilizar 2 * período de MA, a veces se necesita más. Si total = 0, se puede utilizar una vez para el cálculo, pero si se utiliza demasiado a menudo, el terminal se cuelga

Rara vez uso iMAOnArray()

 
Maxim Kuznetsov:

if (response == 0) {

   Print("Что-то пошло не так");

  // потом уже добавите диагностику из WinAPI

   return false;

}

y antes del retorno normal, imprime también el resultado

Print(" всё хорошо, результат:" toStr);

return toStr;

y ejecutar todo el código en un temporizador, por ejemplo, una vez por minuto. Practica en un recurso que seguro que no te banean y da tiempos diferentes pero predecibles, para que puedas comprobarlo.

----
telepáticamente - si realmente hay un problema,
o bien la inicialización es incorrecta (no recuerdo si WinSOCK debe ser inicializado para InternetOpenW o no)
O algún recurso no está siendo liberado.

¡todo añadido! ¡¡No aparece nada en la impresión!!

 

¿Cómo puedo hacer que la variable salga a la ventana de datos sin que se muestre en el gráfico?

Por alguna razón no lo encuentro en la documentación.

 
psyman:

¿Cómo puedo hacer que la variable salga a la ventana de datos sin que se muestre en el gráfico?

Por alguna razón no lo encuentro en la documentación.

Establece el color de la pantalla en clrNONE.