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
¿Puedo preguntar si PositionSelect() comprueba el lado del cliente o el lado del servidor?
Tengo la fuerte sensación de que el problema es causado por el retraso en el que el servidor (lado del corredor) está procesando la solicitud y no se actualiza el lado del cliente es por eso que PositionSelect() se ejecuta de nuevo
Siento fuertemente que no hay diferencia cuando usamos cTrade vs MqlTradeRequest manera y la función Sleep debe ayudar a retrasar todo para conseguir nuestro lado del cliente se "actualiza" antes de PositionSelect() se ejecuta de nuevo causando una doble entrada. Comprobando desde mi ficha de diario, >2013.12.20 08:35:00 Trades '800****': exchange buy 0.01 EURUSD at market placed for execution in 313 ms <
poner el sueño más de 400 debe ser seguro???
¿Qué piensa usted?
"Tengo una fuerte sensación de que el problema es causado por el retraso en el que el servidor (lado del corredor) está procesando la solicitud y no se actualiza el lado del cliente es por eso que PositionSelect() se ejecuta de nuevo"
También creo que esta es la causa de la doble entrada. En mi código es teóricamente imposible enviar una nueva orden si el tamaño de la posición actual es igual o mayor que el tamaño máximo de posición permitido, por lo que cuando el PositionSelect() no recibe a tiempo el estado de la posición actual, mi EA vuelve a enviar una nueva orden.
"¿poner la posición más de 400 debería ser seguro?"
Cuanto mayor sea el intervalo de tiempo mejor, pero hay un problema. Si usted gira su posición, en dos pasos (LARGO a CORTO o CORTO a LARGO), este retraso de tiempo extra puede ser la causa de un mal precio de ejecución, especialmente durante el evento económico macro.
"Tengo la fuerte sensación de que el problema es causado por el retraso en el que el servidor (lado del corredor) está procesando la solicitud y no se actualiza el lado del cliente por eso PositionSelect() se ejecuta de nuevo"
También creo que esta es la causa de la doble entrada. En mi código es teóricamente imposible enviar una nueva orden si el tamaño de la posición actual es igual o mayor que el tamaño máximo de posición permitido, por lo que cuando el PositionSelect() no recibe a tiempo el estado de la posición actual, mi EA vuelve a enviar una nueva orden.
"Poner el sueño más de 400 debería ser seguro???"
Cuanto mayor sea el intervalo de tiempo mejor, pero hay un problema. Si usted gira su posición, en dos pasos (LARGO a CORTO o CORTO a LARGO), este retraso de tiempo extra puede ser la causa de un mal precio de ejecución, especialmente durante el evento económico macro.
No sé si el broker juega aparte aquí pero parece que nuestro broker es el mismo. Alpari.
He tenido 1 doble entrada más desde el 03-10-2013. Utilizo ambos métodos para enviar mi pedido. Ver mi post anterior.
esto es lo que acabo de implementar. espero que pueda resolver el problema
esto es lo que acabo de implementar. espero que pueda resolver el problema
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 :
Estoy de acuerdo con snella_moda en que la mejor explicación es:
I think the problem is the (to slow) execution of the PositionSelect(Symbol()) function. Maybe, the new ticks come in so fast, the EA sends in a new order before it receives a response of the PositionSelect(Symbol()). So the current position size is not calculated properly. In my code, its theoretically impossible to send in a new/double order if the current position size is equal or greater than the max allowed position size, see code.
Pero es difícil de comprobar.
Creo que lo mejor es pedir consejo a Metaquotes. Lo intentaré.
La línea relativa a "cada tick" podría 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:
La línea relativa a "cada tick" puede ser la razón por la que ya no sucede.
La función sólo se ejecuta cuando aparece una nueva barra. Por lo tanto, 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 trozo de código es de los artículos:
Corrección. Hay un doble "Posición abierta en..." y se han abierto 2 operaciones.