En realidad el error está en el primer post, a diferencia del topicstarter yo tengo todas las jugadas escritas, es decir, sólo escribo sobre lo que se ha probado
keekkenen: no importa lo que pienses sobre cómo escribir el código, lo principal es que el código funcione correctamente, en lugar de traer tu código y preguntar dónde te equivocas... una vez más, no hay error 4105 si la entrada es correcta
Lo que dices es falso, porque el error 4105 se produce al llamar a funciones a las que no es necesario pasar el ticket.
Por ejemplo, cuando se llama a OrderTicket() si no se llamó a OrderSelect() antes de llamar a OrderTicket() - esta es la situación que se discute en este hilo.
No, lo que quería decir era una selección garantizada de mi orden para cada una de las funciones independientemente de las transiciones (salidas) hacia el exterior.
No, lo que quería decir era una selección garantizada de mi orden para cada una de las funciones independientemente de las transiciones (salidas) hacia el exterior.
es decir, guardar la última orden seleccionada para cada función como su propia
Si hay varias funciones anidadas con el control del último orden seleccionado, es decir, una función llama a otra y la otra llama a una tercera, entonces cada función mantendrá la selección del orden en el momento en que sea llamada y devolverá la selección a ese estado al regresar, si he entendido bien la pregunta. Pero esta es una solución realmente complicada. Por lo general, es poco probable que haya más de un nivel de anidamiento. Lo principal es controlar el entorno de cada una de estas funciones, de modo que una llamada a esta función no provoque errores lógicos debido a la reposición de una selección de orden anterior. Esto sólo es necesario para las funciones de servicio que pueden ser llamadas desde el bucle principal de recuperación de pedidos y seguir recuperando los propios pedidos para calcular cualquier cosa.
Por cierto, parece que si la función de servicio está en la biblioteca - entonces no hay necesidad de guardar el "puntero"(selección de orden), ¿verdad? Dado que el EA principal y la biblioteca tienen su propio "puntero", es decir, una orden seleccionada en la biblioteca no se seleccionará en el EA y viceversa.
Esto parece una solución perfecta al problema si las funciones A y B no se encuentran dentro del mismo módulo
Ideología: tener una función de selección de orden (una para todos) con los filtros necesarios fuera (de todos modos, en cada función hay que seleccionar este orden en algún lugar (muy probablemente al principio))
int OrdersTicket(filters, int function_id, boolnew = false){staticint tickets[functions count];int ticket = -1;
if(!new){
if(OrderSelect(tickets[function_id],SELECT_BY_TICKET)){return(OrderTicket());}
}
// Выбор и возврат тикета ордера с нужными фильтрамиreturn(ticket);
}
que seguramente devolverá el ticket de la orden elegida anteriormente (en esta función), o bien hacer una nueva búsqueda con los filtros que hayamos especificado
En este caso, la construcción ticket = OrdersTicket(); funcionará perfectamente.
Lo que dices es falso, porque el error 4105 se produce al llamar a funciones a las que no es necesario pasar un ticket.
Por ejemplo, cuando se llama a OrderTicket() si no se llamó a OrderSelect() antes de llamar a OrderTicket() - esta es la situación que se discute en este hilo.
¿de dónde sacas el ticket de la configuración de EA, archivo externo - de dónde?
si es así, entonces sí, habrá un error, porque el hecho de llamar a OrderSelect( ) se mantiene al inicio en los siguientes ticks (al menos en el probador),...
Por cierto, parece que si la función de servicio está en la biblioteca - entonces no hay necesidad de guardar el "puntero" (selección de orden), ¿verdad? Dado que el EA principal y la biblioteca tienen su propio "puntero", es decir, una orden seleccionada en la biblioteca no se seleccionará en el EA y viceversa.
Esto parece una solución perfecta al problema si las funciones A y B no se encuentran dentro del mismo módulo
Por cierto, parece que si la función de servicio está en la biblioteca - entonces no hay necesidad de guardar el "puntero" (selección de orden), ¿verdad? Dado que el EA principal y la biblioteca tienen su propio "puntero", es decir, una orden seleccionada en la biblioteca no se seleccionará en el EA y viceversa.
Esto parece una solución perfecta al problema si las funciones A y B no se encuentran dentro del mismo módulo
Yo paso. No puedo ayudarte con nada más. ¡¡¡Gira y gira sin mí!!!
Todo depende de lo global que sea la variable externa.
En concreto, el "puntero" -el estado de laselección de orden actual- es global dentro del módulo, es decir, este puntero es el mismo para la biblioteca y diferente para el módulo del programa. Esto significa que si la función A en el programa selecciona algún orden en el bucle y luego llama a la función auxiliar B de la biblioteca, entonces incluso si durante su operación B selecciona otro orden, la selección de orden en la función A no debe ser cambiada al regreso. Pero si ambas funciones se encuentran dentro de un módulo, al regresar de B, la selección de orden actual debe ser almacenada y restaurada antes y después de que B sea llamado en A mismo o en B al inicio y al terminar su trabajo para que la lógica del trabajo de A no sea violada en ese punto.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
no importa lo que pienses sobre cómo escribir el código, lo principal es que el código funcione correctamente, en lugar de traer tu código y preguntar dónde te equivocas... una vez más, no hay error 4105 si la entrada es correcta
Lo que dices es falso, porque el error 4105 se produce al llamar a funciones a las que no es necesario pasar el ticket.
Por ejemplo, cuando se llama a OrderTicket() si no se llamó a OrderSelect() antes de llamar a OrderTicket() - esta es la situación que se discute en este hilo.
No, lo que quería decir era una selección garantizada de mi orden para cada una de las funciones independientemente de las transiciones (salidas) hacia el exterior.
es decir, guardar la última orden seleccionada para cada función de su
No, lo que quería decir era una selección garantizada de mi orden para cada una de las funciones independientemente de las transiciones (salidas) hacia el exterior.
es decir, guardar la última orden seleccionada para cada función como su propia
Si hay varias funciones anidadas con el control del último orden seleccionado, es decir, una función llama a otra y la otra llama a una tercera, entonces cada función mantendrá la selección del orden en el momento en que sea llamada y devolverá la selección a ese estado al regresar, si he entendido bien la pregunta. Pero esta es una solución realmente complicada. Por lo general, es poco probable que haya más de un nivel de anidamiento. Lo principal es controlar el entorno de cada una de estas funciones, de modo que una llamada a esta función no provoque errores lógicos debido a la reposición de una selección de orden anterior. Esto sólo es necesario para las funciones de servicio que pueden ser llamadas desde el bucle principal de recuperación de pedidos y seguir recuperando los propios pedidos para calcular cualquier cosa.
Por cierto, parece que si la función de servicio está en la biblioteca - entonces no hay necesidad de guardar el "puntero"(selección de orden), ¿verdad? Dado que el EA principal y la biblioteca tienen su propio "puntero", es decir, una orden seleccionada en la biblioteca no se seleccionará en el EA y viceversa.
Esto parece una solución perfecta al problema si las funciones A y B no se encuentran dentro del mismo módulo
Ideología: tener una función de selección de orden (una para todos) con los filtros necesarios fuera (de todos modos, en cada función hay que seleccionar este orden en algún lugar (muy probablemente al principio))
que seguramente devolverá el ticket de la orden elegida anteriormente (en esta función), o bien hacer una nueva búsqueda con los filtros que hayamos especificado
En este caso, la construcción ticket = OrdersTicket(); funcionará perfectamente.
Lo que dices es falso, porque el error 4105 se produce al llamar a funciones a las que no es necesario pasar un ticket.
Por ejemplo, cuando se llama a OrderTicket() si no se llamó a OrderSelect() antes de llamar a OrderTicket() - esta es la situación que se discute en este hilo.
¿de dónde sacas el ticket de la configuración de EA, archivo externo - de dónde?
si es así, entonces sí, habrá un error, porque el hecho de llamar a OrderSelect( ) se mantiene al inicio en los siguientes ticks (al menos en el probador),...
Por cierto, parece que si la función de servicio está en la biblioteca - entonces no hay necesidad de guardar el "puntero" (selección de orden), ¿verdad? Dado que el EA principal y la biblioteca tienen su propio "puntero", es decir, una orden seleccionada en la biblioteca no se seleccionará en el EA y viceversa.
Esto parece una solución perfecta al problema si las funciones A y B no se encuentran dentro del mismo módulo
Todo depende del grado de globalidad de la variable externa.
Por cierto, parece que si la función de servicio está en la biblioteca - entonces no hay necesidad de guardar el "puntero" (selección de orden), ¿verdad? Dado que el EA principal y la biblioteca tienen su propio "puntero", es decir, una orden seleccionada en la biblioteca no se seleccionará en el EA y viceversa.
Esto parece una solución perfecta al problema si las funciones A y B no se encuentran dentro del mismo módulo
Yo paso. No puedo ayudarte con nada más. ¡¡¡Gira y gira sin mí!!!
Todo depende de lo global que sea la variable externa.
En concreto, el "puntero" -el estado de laselección de orden actual- es global dentro del módulo, es decir, este puntero es el mismo para la biblioteca y diferente para el módulo del programa. Esto significa que si la función A en el programa selecciona algún orden en el bucle y luego llama a la función auxiliar B de la biblioteca, entonces incluso si durante su operación B selecciona otro orden, la selección de orden en la función A no debe ser cambiada al regreso. Pero si ambas funciones se encuentran dentro de un módulo, al regresar de B, la selección de orden actual debe ser almacenada y restaurada antes y después de que B sea llamado en A mismo o en B al inicio y al terminar su trabajo para que la lógica del trabajo de A no sea violada en ese punto.