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

 
Artyom Trishkin #:

En su código, si una posición está abierta, otra posición no se abrirá en la señal opuesta. Es decir, en primer lugar, cuando llega la señal, hay que comprobar si hay una posición contraria y cerrarla.

Pero, de nuevo, todo esto limita mucho las posibilidades de mejorar las estrategias.

Deberíamos evitar vincularnos a la presencia/ausencia de órdenes (especialmente en cuatro - órdenes pendientes (que es correcto) y posiciones (que es incorrecto)).

No, es correcto y necesario tener a mano el número de órdenes y posiciones por sus tipos. Pero es un error basarse en la ausencia de órdenes sólo para las señales.

En general, la forma correcta es tener funciones para calcular órdenes y posiciones (una función que llene la estructura cuando cambie el número de órdenes y posiciones), funciones para abrir/cerrar posiciones, funciones para fijar órdenes y funciones de alarma. Además, la capacidad de comparar los datos de posición (abierta o cerrada) con algunos valores.

A partir de este conjunto se puede construir cualquier estrategia.

Artem, la estrategia hay una orden en el mercado hasta que se cierra en TP o SL.
 
MakarFX #:

Su código

(Un bar abierto y sin pedidos)

Comprobada la señal - no hay señal

... Espera a la siguiente barra.

Has repetido el mismo error que la última vez

P.D.

es

debe llevarse a cabo después de la apertura de la orden

En realidad mi código fue diseñado para otra cosa. Para un robot que sólo negocia a precios de apertura. Simplemente lo tomé de mí y lo añadí al código de un usuariociudadano respetuoso de la ley y lo cambié según los comentarios. No se pueden considerar todos los matices a la vez. Sólo se ven durante las pruebas del robot.

Pero hay una cosa. También parece haber tenido en cuenta todo. Se ha recibido una señal y la función bSignalSell obSignalBuy ha enviado una orden para abrir una orden y ha devuelto true (el primer punto). El segundo punto es que todavía no se ha abierto ninguna orden (el comando está esperando su turno en la terminal). A continuación, cuando la cola de comandos se pone en marcha, se envía al servidor (esto es todavía tiempo). En el servidor se ejecuta. O el servidor se niega a ejecutarlo por uno de los posibles motivos (véase la documentación para más detalles). O no llega (interferencias, mala conexión y otros fallos de la red). Y su robot piensa que ha abierto una orden y actualiza la hora de apertura de la barra. Está bien. Pero esa orden no ha aparecido en la lista de órdenes abiertas. Así, imagine que tiene 0 órdenes en la lista y el robot "piensa": "Está bien, he entrado en el mercado. Comoresultado, hay una señal durante toda una barra después de una entrada fallida, pero el Asesor Experto no la "ve" y no hace nada. ¿Es posible esta situación? Es posible. Por lo tanto, su código no es muy bueno. Será mejor que lo pienses mejor. O dejar que el ciudadano respetuoso de la ley piense. Desgraciadamente, ahora no puedo. Estoy trabajando en un proyecto muy interesante. Y la creación de un EA adecuado que funcione plenamente con todos sus mecanismos sólo tiene sentido para un sistema de comercio bueno y rentable. El robot puede ser simplemente ejecutado en el Probador de Estrategias y ver si es otra de mis versiones o la desarrollada por usted. No hay ninguna diferencia.

 
законопослушный гражданин #:

Acabo de darme cuenta.

bool bSignalBuy()
  {
   if(dMA > Open[1] && dMA < Close[1])  //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.
      return(true);

   return(false);
  }
Open[1] и Close[1]

Índice 1.

dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0);

¡Mientras que usted tiene la MA con un índice de 0! Es decir, recorre todo el bar y puede ir más allá de Abrir y Cerrar. Por lo tanto, es mejor indexar MA por 1.

dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 1);

Entonces todas las señales se tomarán excepcionalmente en la barra formada y el robot será totalmente coherente con el sistema de comercio con señales en los precios abiertos. Por lo tanto, el robot sólo tendrá que seguir la apertura de la barra (ya he añadido este código) y entrar en la primera barra. Será más fiable. Y no habrá que torcerse, como tuvo que hacer Makar por el algoritmo de entrada originalmente erróneo.

 
Mihail Matkovskij #:

Acabo de darme cuenta.

Índice 1.

¡Mientras que usted tiene la MA con un índice de 0! Es decir, recorre todo el bar y puede ir más allá de Abrir y Cerrar. Por lo tanto, es mejor indexar MA por 1.

Entonces todas las señales se tomarán excepcionalmente en la barra formada y el robot será totalmente coherente con el sistema de comercio con señales en los precios abiertos.

Esta es la esencia de la señal.

La MA actual entra en el cuerpo de la vela anterior y dependiendo de la vela (UP/DN) da la misma señal.

 
MakarFX #:

Esta es la esencia de la señal.

La MA actual entra en el cuerpo de una vela anterior y dependiendo de la vela (UP/DN), será la misma señal.

En este caso, la MA debería dibujarse con el índice 1 en el marco temporal inferior. Entonces no será necesario aplicar ningún cambio. Dentro de la apertura y el cierre del marco temporal superior habrá varias (o muchas) barras en el inferior. Sabes por qué se inventaron los plazos, ¿no? Si no es así, empieza a estudiar esta cuestión desde la historia de los candelabros japoneses. En resumen, se trata de simplificar el análisis técnico. Y con la llegada de la era digital también se simplificó la discretización de los sistemas comerciales.

 
Mihail Matkovskij #:

En ese caso, la MA debe tomarse con el índice 1 en el marco temporal inferior. Entonces, no habrá necesidad de torcerse. Habrá varias (o muchas) barras dentro de la apertura y el cierre del marco temporal superior en el inferior. Sabes por qué se inventaron los plazos, ¿no? Si no es así, empieza a estudiar esta cuestión desde la historia de los candelabros japoneses. En resumen, se trata de simplificar el análisis técnico. Y con la llegada de la era digital también se simplifica la discretización de los sistemas de negociación.

No entiendo por qué estás enojado conmigo. El hombre escribe su estrategia como la ve, y este hombre no soy yo.

Sólo respondí a su pregunta: "¿Cómo evito las aperturas múltiples en el mismo bar?".

Lo que aprendo lo sé yo mismo, y si no lo sé, lo pregunto. De momento no he preguntado nada a nadie.

 
MakarFX #:

No entiendo por qué la tomas conmigo. El hombre escribe su estrategia como la ve y ese hombre no soy yo.

Sólo respondí a su pregunta: "¿Cómo evitar las aperturas múltiples en el mismo bar?"

Lo que aprendo lo sé yo mismo, y si no lo sé, lo pregunto. Ahora no he preguntado nada a nadie.

Extraño. Estoy tratando de llegar al fondo de un asunto y tú hablas de una especie de aclaración de la relación. Me estoy comunicando únicamente con el tema de la programación. Si algo te ofende, no te ofendas. Llevo 15 años escribiendo software. Dices que mi código no funcionacorrectamente en tu opinión. No me estoy ofendiendo, estoy tratando de explicarte cómo funcionan los sistemas de trading automatizados. Es una conversación puramente técnica. Y tú me hablas de algún tipo de insulto... :)

 
Mihail Matkovskij #:

Eso es raro. Estoy tratando de llegar al fondo de un asunto y tú hablas de algún tipo de relación. Me estoy comunicando únicamente con el tema de la programación. Si algo te ofende, no lo hagas. Llevo 15 años escribiendo software. Dices que mi código no funcionacorrectamente en tu opinión. No me estoy ofendiendo, estoy tratando de explicarte cómo funcionan los sistemas de trading automatizados en la realidad. Es una conversación puramente técnica. Y tú me hablas de algún tipo de insulto... :)

Así que también te expliqué lo que tu código está mal (en este caso), y dices que tienes que rehacer el EA)
 
Mihail Matkovskij #:

Llevo 15 años escribiendo programas.

Tengo una sugerencia. Dame tu telegrama en privado.

 
MakarFX #:
Así que también te expliqué lo que tu código está mal (en este caso), y dices que tienes que rehacer el EA)

En este caso, hay que rehacerlo para que no se tuerza. Porque el código que he añadido está pensado para un robot con señales de precio de apertura, como he dicho antes. Pensé: Esto es extraño. Y entonces encontré la razón. Si lo haces bien desde el principio, no tendrás problemas en el futuro. Por lo tanto, siempre hay que buscar la causa y no luchar contra la consecuencia.