Mi EA hace una doble entrada - página 5

 
Klammeraffe:

La línea relativa a "cada tick" puede ser la razón por la que ya no ocurre.

La función sólo se ejecuta cuando aparece una nueva barra. Así que, lo más probable es que sólo el primer tick de una barra pueda ejecutar una operación. Después de la primera barra, el código obtiene un "retorno" hasta que aparezca una nueva barra. Tal vez esto lo solucionó para mí.

Creo que este pedazo de código es de los artículos:

Esta es otra solución, pero si hay algún error devuelto por el corredor o en algún otro lugar, su señal ya no es válida a menos que mantenga un bucle para comprobar una y otra vez.
 
doshur:
  • El código publicado inicialmente por doshur, puede explicar por qué puede ver en su registro "Posición abierta en..." mientras que no se ha abierto ninguna operación. Esto se debe a que, aunque PositionOpen() devuelva true, no significa que se haya colocado una operación,véase la documentación. Pero no puede explicar por qué un comercio "doble" fue colocado.
Corrección. Hay un doble "Posición abierta en..." y se han abierto 2 operaciones.
Por supuesto. Me refiero a "por qué pudo ver...". El punto aquí es que no hay nada en su código que puede explicar por qué tienes este 2 oficios.
 
angevoyageur:
Por supuesto. Me refiero a "por qué pudo ver...". El punto aquí es que no hay nada en su código que pueda explicar por qué obtuvo estos 2 oficios.
Ok. Entienda.
 
angevoyageur:

Creo que es muy importante encontrar la razón detrás de este problema, por supuesto también es importante tener una solución (Sleep ?) hasta que podamos entender completamente lo que está sucediendo. Así que trato de resumir la situación :

* Cuando se utiliza el método PositionOpen de la clase CTrade, al menos 3 usuarios obtuvieron en algún momento, 2 ofertas en la misma dirección en lugar de 1, lo que resulta en una posición con un volumen doble en relación con lo que se espera.

Utilizo ambos métodos, para abrir una nueva posición = "old fashion way", modificando el stoploss = "CTrade class".


* Este problema parece ocurrir en el mismo broker, con un símbolo en el que está activada la Profundidad de Mercado (los interesados pueden confirmarlo por favor).

Sí el servidor del broker X, Depth of Market está activado.


* Este problema ocurre con una orden sincrónica, la orden asincrónica no se utilizó (por favor, confirme).

Sí, la orden asíncrona no se utilizó.


* El problema se produce de forma aleatoria.

Sí, pero sólo durante las horas de mayor actividad del mercado( eventosmacroeconómicos ).



 

En mi opinión este problema se puede resolver fácilmente.


El EA debe esperar siempre una respuesta/respuesta si se utiliza la función "PositionSelect(Symbol())" y el terminal ha actualizado los datos de la función, antes de poder reanudar con la ejecución del código.

El EA debe esperar siempre una respuesta si se utiliza la función "OrderSend(mrequest,mresult)" y el terminal ha actualizado los datos de la función, antes de poder reanudar la ejecución del código.


También menciono el propio terminal porque los datos de la función se copiarán en el terminal y esto también llevará un tiempo.

De esta manera el tamaño de la posición actual siempre se calculará correctamente, por lo que la doble orden no se producirá más.


¿Qué opinas?

 
snelle_moda:

En mi opinión este problema se puede resolver fácilmente.


El EA debe esperar siempre una respuesta/respuesta si se utiliza la función "PositionSelect(Symbol())" y el terminal ha actualizado los datos de la función, antes de poder reanudar con la ejecución del código.

El EA debe esperar siempre una respuesta/respuesta si se utiliza la función "OrderSend(mrequest,mresult)" y el terminal ha actualizado los datos de la función, antes de poder reanudar con la ejecución del código.


También menciono el propio terminal porque los datos de la función se copiarán en el terminal y esto también llevará un tiempo.

De esta manera el tamaño de la posición actual siempre se calculará correctamente, por lo que la doble orden no se producirá más.


¿Qué te parece?

No estoy seguro de lo que quieres decir con "esperar siempre una respuesta"... ?

De todas formas he rellenado una solicitud al ServiceDesk para pedir consejo. Ya veremos.

 
angevoyageur:

No estoy seguro de lo que quiere decir con "esperar siempre una respuesta..." ?

De todos modos, he rellenado una solicitud al ServiceDesk para pedir consejo. Ya veremos.

"No estoy seguro de lo que quiere decir con "esperar siempre una respuesta..." ?"


El EA debe esperar/parar hasta que la función PositionSelect(Symbol()) haya terminado de copiar los datos sobre una posición en el entorno del programa.

Véalo como una función sleep() forzada.

 
snelle_moda:

"No estoy seguro de lo que quieres decir con "esperar siempre una respuesta..." ?"


El EA debe esperar/parar hasta que la función PositionSelect(Symbol()) haya terminado de copiar los datos sobre una posición en el entorno del programa.

Véalo como una función sleep() forzada.

Ok entendido. Pero no puedo satisfacerme de tal solución, o hay algo que no entendemos o hay un error en alguna parte.
 
Sólo espero que haya una solución.

En cualquier caso, feliz Navidad a todos.
 
¿Alguna novedad del servicio de atención al cliente?