[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 842
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
Hola a todos! Recientemente me he interesado por las medias móviles. Encontré alguna combinación de medias móviles y condiciones de trading y decidí comprobar mi TS, si es rentable o no, y optimizarlo, si es que hay algo. Pero mi Asesor Experto no abrió operaciones durante las pruebas. Me he pasado toda la tarde intentando averiguar la solución y he decidido preguntaros a vosotros, queridos programadores. Para entender cómo funciona el EA, explicaré brevemente mi TS: en el gráfico con EMA(13) y EMA(55), si una barra cruzó la EMA(13) y todas las barras siguientes estuvieron por encima/debajo de la EMA(13), entonces al tocar el precio con la MA(13) abrimos una posición en la dirección de las barras anteriores (después de cruzar + al menos 9 y no más de 23). Take Profit 60 puntos, Stop Loss = EMA(55) más menos cinco puntos. En realidad, esa es toda la estrategia. Para ilustrar mejor, he puesto un ejemplo:
Y aquí está el código del Asesor Experto:
Si alguien puede ayudar por favor. También le daré el propio EA
Se pueden reunir muchas funciones en un ciclo for para abrir, cambiar, cerrar posiciones, etc.
Este es un ejemplo sencillo:
- Pregunta: ¿es correcto utilizar aquí "break" en lugar de "return"? ¿Hay alguna diferencia?
Se pueden reunir muchas funciones en un ciclo for para abrir, cambiar, cerrar posiciones, etc.
Este es un ejemplo sencillo:
- Pregunta: ¿es correcto utilizar aquí "break" en lugar de "return"? ¿Hay alguna diferencia?
Desde https://docs.mql4.com/ru/basis/operators/break:
"La sentencia break detiene la ejecución de la sentencia switch, while o for externa anidada más próxima. El control se da al operador que sigue al que termina".
Desde https://docs.mql4.com/ru/basis/operators/return:
"La sentencia return termina la función actual y devuelve el control al programa que la llama".
Respuesta: Es correcto utilizar "break" aquí.
Desde https://docs.mql4.com/ru/basis/operators/break:
"El operador break termina la ejecución del interruptor externo anidado más cercano, el operador while o el operador for. El control se transfiere al operador que sigue al que termina".
Desde https://docs.mql4.com/ru/basis/operators/return:
"El operador return termina la función actual y devuelve el control al programa que lo llama".
Respuesta: es correcto utilizar "break" aquí.
En realidad yo también uso break, pero pensaba que return significaba un cambio de tilde (y break no).
En realidad, hasta que no cambie la orden, habrá un cambio de tick, por lo que para que el probador simule correctamente la situación
necesitas usar el retorno. ¿Verdad?
Tal vez me equivoque, pero me gustaría entenderlo.
De hecho, yo mismo utilizo break, pero pensaba que return significaba un cambio de marca (mientras que break no).
En realidad, hasta que no cambie la orden, se producirá el cambio de tick y, por lo tanto, el probador tiene que utilizar el retorno para simular correctamente la situación
necesitas usar el retorno. ¿Verdad?
Tal vez me equivoque, pero quiero entenderlo.
Leamos en la documentación: "El operador de retorno de tiene la ejecución de la función actual y devuelve el control al programa que llama".
Si la función actual start(), de nuevo leer la documentación:
https://docs.mql4.com/ru/runtime/start
"Cuando llega una nueva cotización, se ejecuta la función start() de los Asesores Expertos e indicadores personalizados adjuntos. Si al llegar una nueva cotización se ejecuta la función start(), que se ejecuta en la cotización anterior, entonces la cotización entrante será ignorada por el Asesor Experto. Todas las nuevas comillas, que llegan durante la ejecución del programa, se ignoran hasta que finaliza la siguiente ejecución de la función start(). Después de eso, la función start() se lanzará sólo después de la llegada de la siguiente cita nueva.
Lee en la documentación: "La sentencia return termina la función actual y devuelve el control al programa que la llama".
Si la función actual es start(), lea de nuevo la documentación:
https://docs.mql4.com/ru/runtime/start
"Cuando llegan nuevas cotizaciones, se ejecuta la función start() para los Asesores Expertos e indicadores personalizados adjuntos. Si al llegar una nueva cotización se ejecuta la función start(), que se ejecuta en la cotización anterior, entonces la cotización entrante será ignorada por el Asesor Experto. Todas las nuevas comillas, que llegan durante la ejecución del programa, se ignoran hasta que finaliza la siguiente ejecución de la función start(). Después de eso, la función start() se lanzará sólo después de la llegada de la siguiente cita nueva.
Me gustaría que lo pusieras en tus propias palabras. No entiendo lo que quieres decir.
En el probador, si for termina con break y alguna otra función le sigue, se ejecutará en el mismo tick. Pero en realidad, varios ticks pueden cambiar durante este tiempo (mientras se modifica la orden). Por eso creo que el retorno es más realista. ¿No es así?
Me gustaría que lo hubieras puesto con tus propias palabras. No entiendo lo que quieres decir.
Si for termina con break y va seguido de alguna otra función, se ejecutará en el mismo tick. Pero en realidad, varios ticks pueden cambiar durante este tiempo (mientras se modifica la orden). Por eso creo que el retorno es más realista. ¿No es así?
start() comienza al principio de un tic y puede no haber terminado al principio del siguiente tic.
break termina para, y return termina la función. Si no hay operadores después de for, no hay diferencia en usar for y return para este algoritmo.
Pero cada operador tiene su propósito. Y el uso involuntario de un operador es como una escopeta descargada.
De nuevo, en el algoritmo del bucle for, por alguna razón no es necesario continuar ejecutando la función, podemos utilizar return.
En otras palabras, si el algoritmo requiere una ruptura en el bucle, entonces se utiliza la ruptura, incluso si la función todavía se termina después del bucle.
start() comienza a trabajar al principio de un tick y su trabajo puede no terminar al principio del siguiente tick.
break completa para, return completa la función. Si no hay operadores después de for, no hay diferencia entre usar for y return para este algoritmo.
Pero cada operador tiene su propósito. Y el uso involuntario de un operador es como una escopeta descargada.
De nuevo, en el algoritmo del bucle for, por alguna razón no es necesario continuar ejecutando la función, podemos utilizar return.
En otras palabras, si el algoritmo requiere que rompamos el bucle, ponemos break, incluso si la función termina después del bucle de todos modos.
Se me ha ocurrido una idea, ya que todo esto está pensado sólo para el probador, podemos (cuando sea necesario) hacer lo siguiente:
Gracias.
Se me ha ocurrido una idea - ya que esto sólo se inició para un probador, podría (en su caso) hacer lo siguiente:
Gracias.
puedes