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
Mi Asesor Experto, que está participando en el Campeonato, está realizando acciones incorrectas debido al funcionamiento incorrecto de la biblioteca estándar de CTrade.
Utilizo la función PositionClose para cerrar posiciones. Pero además de cerrar posiciones, esta función abre operaciones.
La función se utiliza así:
PositionClose acaba abriendo órdenes a veces innecesarias.
Aquí, la operación de compra se cerró primero y luego se abrió una operación de venta adicional del mismo tamaño. Además, AccountInfoDouble(ACCOUNT_FREEMARGIN) no ha notado esta operación extra. Porque fue seguido por un comercio con lote más grande, aunque no había suficiente dinero para ello según el MM usado.
Me doy cuenta de que quizás no estoy utilizando las funciones MQL de forma óptima. Pero el hecho de que una función de la biblioteca propietaria de MQL destinada a cerrar operaciones abra operaciones por sí misma no se ajusta a mi idea del comportamiento aceptable de las funciones.
Entiendo que puede que no esté utilizando las funciones MQL de forma óptima. Pero el hecho de que una función de la biblioteca propietaria de MQL destinada a cerrar operaciones abra a su vez operaciones no se ajusta a mi idea del comportamiento aceptable de las funciones.
Lea el artículo Eventos comerciales en MetaTrader 5:
Los eventos comerciales y los cambios en el historial comercial se comunican a través de canales independientes. Al enviar una solicitud de compra mediante la función OrderSend(), puede reconocer inmediatamente el ticket del pedido, que se ha creado si la solicitud se ha comprobado con éxito. Pero al mismo tiempo, la orden en sí puede no aparecer todavía en el terminal del cliente, y un intento de seleccionarla usando la función OrderSelect() fallará.
Leer el artículo Operar con eventos en MetaTrader 5:
Vea también el artículo Órdenes, posiciones y operaciones en MetaTrader 5No he utilizado la función OrderSend. Se utiliza la función PositionClose de la biblioteca estándar de MQL, que está diseñada para trabajar con órdenes.
La ayuda de esta función no describe que pueda abrir operaciones.
Cita de la referencia:
PosiciónCierre
Cierra una posición en el símbolo especificado.
bool PosiciónCerrada(
const string symbol, // símbolo
ulong deviation=ULONG_MAX // desviación
)
Parámetros
símbolo
[Nombre del instrumento comercial sobre el que debe cerrarse la posición.
desviación=ULONG_MAX
[in] Desviación máxima del precio actual (en puntos).
Valor devuelto
true - si la comprobación básica de las estructuras tiene éxito, en caso contrario, false.
Nota
La finalización exitosa del método PositionClose(...) no siempre significa la ejecución exitosa de una operación comercial. Es necesario comprobar el resultado de una solicitud de comercio (código de retorno del servidor de comercio) llamando al método ResultRetcode().
No he utilizado la función OrderSend. Se utiliza la función PositionClose de la biblioteca estándar de MQL, que está diseñada para simplificar el trabajo con las órdenes.
La ayuda de esta función no describe que pueda abrir operaciones.
Cita de la referencia:
PosiciónCierre
Cierra una posición en el símbolo especificado.
bool PosiciónCerrada(
const string symbol, // símbolo
ulong deviation=ULONG_MAX // desviación
)
Parámetros
símbolo
[Nombre del instrumento comercial sobre el que debe cerrarse la posición.
desviación=ULONG_MAX
[in] Desviación máxima del precio actual (en puntos).
Valor devuelto
true - si la comprobación básica de las estructuras tiene éxito, en caso contrario, false.
Nota
La finalización exitosa del método PositionClose(...) no siempre significa la ejecución exitosa de una operación comercial. El resultado de la ejecución de la solicitud de comercio (el código de retorno del servidor de comercio) debe comprobarse llamando al método ResultRetcode().
No hay ningún error en la función de la biblioteca PositionClose(...). Pero hay uno en su código. Aquí está la cita de la referencia.
Yo, por ejemplo, no veo esta comprobación en su código.
No he utilizado la función OrderSend. Se utiliza la función PositionClose de la biblioteca estándar de MQL, que está diseñada para trabajar con órdenes.
La ayuda de esta función no describe que pueda abrir operaciones.
Y puedes ver la implementación de la función PositionClose:
Pensé que no necesitaba estudiar el código fuente de las bibliotecas estándar.
La ayuda no describe la posibilidad de abrir operaciones con la función PositionClose. Las comprobaciones y protecciones contra la apertura de operaciones con la función PositionClose, que su equipo ha desarrollado, deberían contenerse. Creo que las bibliotecas estándar son un código ideal que debería servir de modelo para los demás. Por lo tanto, no debería ser necesario analizar el código de las bibliotecas antes de utilizarlas.
Cita:
La biblioteca estándar MQL5 está escrita en lenguaje MQL5 y está diseñada para facilitar la escritura de programas (indicadores, scripts, expertos) a los usuarios finales. La biblioteca proporciona un fácil acceso a la mayoría de las funciones internas de MQL5.
Pensé que no necesitaba estudiar el código fuente de las bibliotecas estándar.
La ayuda no describe la posibilidad de abrir operaciones con la función PositionClose. Las comprobaciones y protecciones contra la apertura de operaciones con la función PositionClose, que su equipo ha desarrollado, deberían contenerse. Creo que las bibliotecas estándar son un código ideal que debería servir de modelo para los demás. Por lo tanto, no debería ser necesario analizar el código de las bibliotecas antes de utilizarlas.
La ignorancia de la ley no le exime de responsabilidad. ¿En qué parte de tu código está la comprobación de que la posición se ha cerrado?
Expresión
R == true
sólo indica que la función PositionClose() se ejecutó con éxito, pero no que la posición se cerró:
Nota
La finalización exitosa del método PositionClose(...) no siempre significa la ejecución exitosa de una operación comercial. Es necesario comprobar el resultado de la ejecución de una solicitud de comercio (código de retorno del servidor de comercio) llamando al método ResultRetcode().
La segunda expresión
equivale a
y tampoco ofrece ninguna garantía para las operaciones comerciales asíncronas. Ya se ha cerrado una posición en el servidor de operaciones y el terminal aún no ha recibido un mensaje al respecto. Resulta que ha creado un error en su código.
En la vida real, no todo es tan fluido como en el probador; puede haber pequeños retrasos entre el envío de una solicitud de operación y el resultado de su ejecución. Cada uno resuelve este problema por sí mismo, para empezar no estaría de más comprobar el código de retorno utilizando la función ResultRetcode(), tal y como está escrito en la ayuda.
Otra vez.
Me doy cuenta de que quizás no estoy utilizando las funciones MQL de forma óptima. Pero el hecho de que una función de la biblioteca propietaria de MQL destinada acerrar operacionesabra operaciones por sí misma no se ajusta a mi idea del comportamiento aceptable de las funciones.Todo lo que dices se aplica al cierre de operaciones. Sí, el EA no comprueba de forma óptima las posiciones de cierre. Pero eso no permite que una función diseñada para cerrar abra operaciones por sí misma.
La ayuda dice:
PosiciónCierre
Cierra la posición según el símbolo especificado.
No se describen condiciones para que la función pueda abrir una operación. La recomendación de comprobar el código de retorno también sirve sólo para comprobar adicionalmente si la operación está cerrada o no.
Otra vez.
Entiendo que puede que no esté utilizando las funciones MQL de forma óptima. Pero el hecho de que la función de la biblioteca propietaria de MQL destinada acerrar operacionesabra operaciones por sí misma no se ajusta a mi idea del comportamiento aceptable de las funciones.No hay función de cierre de posiciones, sólo existe la función de enviar una solicitud de compra o venta (y el resultado -la apertura o el cierre de una posición- es desconocido). En su caso, debido a un error algorítmico, se envían peticiones repetidas sin comprobar si se ejecutó la petición anterior.
La ayuda tiene esta función
Referencia MQL5 / Biblioteca Estándar / Clases de Negociación / CTrade / PositionClose
Cierra la posición por el símbolo especificado.
El usuario no debe preocuparse por cómo se implementa la función en el nivel bajo. Desde que existe esta función, MetaQuotes ha garantizado que no tendrá ningún comportamiento no estándar que no esté descrito en la ayuda.
La biblioteca estándar de MQL5 está escrita en MQL5 y está destinada a facilitar la escritura de programas (indicadores, scripts y Asesores Expertos) por parte de los usuarios finales. La biblioteca proporciona un fácil acceso a la mayoría de las funciones internas de MQL5.