¿Por qué Metaquotes impulsa MT5 en lugar de MT4? - página 3

 
Stanislav Korotky:

¿Y qué funciones de MT4Orders se utilizan: asíncronas (OrderSendAsync, OrderCloseAsync) o no? Este es probablemente el problema.

No lo he investigado, sólo lo he conectado, he comprobado la velocidad, lo he comparado con el código original en mql5, he borrado el original y he dejado sólo la biblioteca con el código de mql4

 
Vitaly Muzichenko:

No lo entendí, sólo lo enchufé, comprobé la velocidad, lo comparé con el código original en mql5, borré el original y dejé sólo la biblioteca con código mql4

No pregunto por los detalles de la biblioteca, sino por cómo se ha utilizado, para entender el problema. En general, di un consejo.

 
Stanislav Korotky:

No preguntaba por las entrañas de la biblioteca, sino por el uso que se hace de ella, para ver cuál es la causa del problema. De todos modos, te he dado un consejo.


El problema no es cómo utilizar la biblioteca.

El problema es que no tenemos una posición compleja en MT4, tenemos órdenes. Por lo tanto, tenemos que cerrar una docena de órdenes para conseguir el efecto que acabamos de mostrar.

Por cierto, no hay tal efecto en el probador. Y no lo tenemos en la demo. Pero lo tenemos en la cuenta real.

En este caso, la migración de código de mql4 a mql5 y de vuelta "1 a 1" es imposible.

El trabajo con pedidos en mql4 debe organizarse adecuadamente a las posibilidades de mql4.

No hay forma de saberlo aquí:

Vitaly Muzichenko:

El único gran inconveniente de MT4 ...

Es que mql4 tiene unas características y mql5 otras. En este caso particular, mql5 tiene la ventaja. Pero el problema se puede resolver normalmente con mql4.

 
Andrey F. Zelinsky:

El problema no es cómo utilizar la biblioteca.

El problema es que en MT4 no hay posición agregada, hay órdenes. Y el cierre de una docena de órdenes tiene el efecto mostrado.

Por cierto, no hay tal efecto en el probador. Y no lo tenemos en la demo. Pero lo tenemos en la cuenta real.

En este caso, la migración de código de mql4 a mql5 y de vuelta "1 a 1" es imposible.

El trabajo con pedidos en mql4 debe organizarse adecuadamente a las posibilidades de mql4.

No hay forma de saberlo aquí:

Es que mql4 tiene unas características y mql5 otras. En este caso particular, mql5 tiene la ventaja. Pero este problema se puede resolver normalmente en mql4.

¿Qué se puede acelerar en MT4?

 if(OT==OP_BUY) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);
   if(!error) Print("Error ",GetLastError());
 }
 if(OT==OP_SELL) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);
   if(!error) Print("Error ",GetLastError());
 }
 
Andrey F. Zelinsky:

El problema no es cómo utilizar la biblioteca.

El problema es que en MT4 no hay posición agregada, hay órdenes. Y el cierre de una docena de órdenes tiene el efecto mostrado.

Es razonable comparar MT4 con una cuenta de cobertura de MT5 (en este caso se trata de un sistema de trading de este tipo). ¿Y qué tiene que ver eso con la posición agregada? En MT5 habrá exactamente la misma pila de posiciones = equivalentes de órdenes cuádruples. De todas formas, vuelves a alejar la conversación del problema.

 
Vitaly Muzichenko:

¿Qué se puede acelerar en MT4?

Sugerí arriba reemplazar con funciones XXXAsync. No estoy seguro de que sirva de algo, pero ¿por qué no intentarlo?

 
Stanislav Korotky:

Sugerí arriba reemplazar con funciones XXXAsync. No estoy seguro de que sirva de algo, pero ¿por qué no intentarlo?

Es probable que esté un poco apagado. No tengo ningún problema en MT5 con este código, y usando <MT4Orders>, todo se cierra al instante.

Hay un problema en MT4, pero allí por razones obvias y no necesita <MT4Orders>, hay el código cuádruple más simple. Tengo más de un centenar de ellos, tengo capturas de pantalla. A veces se desliza a mi favor, y muy a menudo, si se ha iniciado un cierre y el precio se ha movido. No sé con qué está relacionado, pero probablemente se deba a la secuencia de envío de pedidos.

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

¿Por qué Metaquotes desliza MT5 en lugar de MT4?

Vitaly Muzichenko, 2017.09.23 20:50

¿Qué se puede acelerar en MT4?

 if(OT==OP_BUY) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);
   if(!error) Print("Error ",GetLastError());
 }
 if(OT==OP_SELL) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);
   if(!error) Print("Error ",GetLastError());
 }

Como mínimo:

  • La supresión de las etiquetas agilizará el código.
  • La normalización de los precios no siempre es necesaria. Aunque la obtención del precio Ask o Bid imprima más decimales, no significa que la normalización vaya a dar algún resultado positivo.

La normalización del valor del precio sólo es necesaria en caso de operaciones matemáticas con ese precio. Cuando se añade o resta un valor al precio.

 
Vitaly Muzichenko:

Probablemente un poco apagado. No tengo ningún problema en MT5 con este código, y usando <MT4Orders>, todo se cierra al instante.

Hay un problema en MT4, pero allí por razones obvias y no necesitan <MT4Orders>, hay el código cuádruple más simple. Tengo más de un centenar de ellos, tengo capturas de pantalla. A veces se desliza a mi favor, y muy a menudo, si se ha iniciado un cierre y el precio se ha movido. No sé qué tiene que ver, pero probablemente se deba a la secuencia de envío de pedidos.

Sí, la culpa es mía: soy tonta.

La variante de solución es la siguiente: en lugar de cerrar varias órdenes, coloco un contador de volumen total, y luego llamo a OrderCloseBy varias veces hasta la destrucción mutua.

 
Stanislav Korotky:

La solución es la siguiente: en lugar de cerrar varias órdenes, poner un contador de volumen total, y luego llamar a OrderCloseBy varias veces hasta la destrucción mutua.

Esta variante funciona, por desgracia, sólo para un símbolo.


Es extraño que nadie haya añadido funciones de órdenes asíncronas al kodobase de MT4 a lo largo de los años.