Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1413

 
gyperion #:
¿Y qué es lo que no se puede trabajar desde Rusia? En realidad no importa. La pregunta es, ¿cómo descargar la historia, incluso si no lo tienen?

¿Puedes prestarme dinero, incluso si usted no tiene?

 
gyperion #:
¿Y qué es lo que no se puede trabajar desde Rusia? En realidad no importa. La pregunta es cómo cargar la historia, incluso si no lo tienen?

A través de caracteres personalizados hacer su historia.

Importing High Quality Tick Data to MetaTrader 5
Importing High Quality Tick Data to MetaTrader 5
  • 2021.11.28
  • www.mql5.com
In order to vet a potential trading strategy, it is imperative to ensure that the results obtained f r om optimizations and strategy tests are a true reflection of the performance of your EA
 
Nauris Zukas #:

A través de personajes personalizados haz tu historia.

Funcionó parcialmente, pero lo importante es que funcionó. Seguiré investigando. Gracias por su ayuda, señor, ya lo he intentado todo.
 

Hola a todos, quiero escribir mi primer robot de comercio (Asesor Experto). Funciona perfectamente en el backtest y los resultados de las pruebas también son respetables. Pero hay varias cosas a tener en cuenta: tipos de cuenta, propiedades de los símbolos, interferencias con otros EAs, etc.

Tengo cuatro variables para esto:

bool isHedging; bool isFIFO; ulong positionTicket; double positionVolume;

Las dos primeras variables se establecen en el método init:

if ((bool)AccountInfoInteger(ACCOUNT_HEDGE_ALLOWED)) isHedging = true;
else isHedging = false;
if ((bool)AccountInfoInteger(ACCOUNT_FIFO_CLOSE)) isFIFO = true;
else isFIFO = false;

Si quiero abrir una posición, primero compruebo si esto podría causar problemas con FIFO (es decir, si quiero abrir una posición larga, compruebo si ya hay una posición larga con el mismo volumen o una posición corta para el símbolo respectivo, ya que de lo contrario StopLoss y TakeProfit podrían no funcionar correctamente, según he oído). Y por último, utilizo el método OrderSend y establezco si ha tenido éxito:

positionVolume = tradeResult.volume;
positionTicket = tradeResult.deal;

Con un StopLoss o TakeProfit ejecutado, reconozco a través del método OnTradeTransaction si mi posición (interna) del EA se ha cerrado comprobando si la variable positionTicket coincide con transaction.position.

Si quiero cerrar una posición de cuenta de compensación, simplemente cierro una posición larga con una operación corta con el mismo volumen.

Si quiero cerrar una posición de cuenta de cobertura, cierro la posición con trade.PositionClose(positionTicket, slippage);

Si quiero cerrar una posición de cuenta de cobertura FIFO, cierro la posición más antigua del símbolo respectivo que coincida con la dirección de la posición (larga/corta) y el volumen, que debería ser el mío debido a mis condiciones de entrada para cuentas FIFO descritas anteriormente.

Ahora estoy seguro de que he pasado por alto algo fundamental. ¿Cómo me aseguro de que StopLoss y TakeProfit en una cuenta de compensación también se cierran cuando cierro la posición (interna) EA como se describió anteriormente? ¿Existen formas más elegantes y eficientes de hacer que el EA cumpla con FIFO? Con una cuenta de cobertura no FIFO, si sólo abro una posición en el EA con una MarketOrder, no la edito y luego quiero cerrarla, ¿el valor tradeResule.deal es siempre el mismo, de modo que también puedo cerrar esta posición sin preocuparme con trade.PositionClose(positionTicket, slippage), donde positionTicket es el valor tradeResult.deal guardado?

Llevo varios días buscando respuestas, pero aún no he encontrado ninguna que pueda resolver todas mis dudas. Espero que alguien de aquí pueda ayudarme.

 
Benjamin Fotteler #:

Ahora estoy seguro de que he pasado por alto algo fundamental. ¿Cómo me aseguro de que StopLoss y TakeProfit en una cuenta de compensación también se cierran cuando cierro la posición (interna) del EA como se describe anteriormente? ¿Existen formas más elegantes y eficientes de hacer que el EA cumpla con FIFO? Con una cuenta de cobertura no FIFO, si sólo abro una posición en el EA con una MarketOrder, no la edito y luego quiero cerrarla, ¿el valor tradeResule.deal es siempre el mismo, de modo que también puedo cerrar esta posición con trade.PositionClose(positionTicket, slippage) sin preocupaciones, por lo que positionTicket es el valor tradeResult.deal guardado?

Llevo varios días buscando respuestas, pero aún no he encontrado ninguna que pueda resolver todas mis dudas. Espero que alguien de aquí pueda ayudarme.

En una cuenta de compensación sólo hay una posición por símbolo. Si el EA sólo negocia un símbolo, esto se puede leer en PositionTotal() - o incluso más simple PositionSelect() está mal (=ninguno) o por lo tanto también seleccionado para seguir negociando.

Documentation on MQL5: Trade Functions / PositionSelect
Documentation on MQL5: Trade Functions / PositionSelect
  • www.mql5.com
PositionSelect - Trade Functions - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 

Correcto. Gracias por el consejo. Pero, ¿qué hago, por ejemplo, si otro EA se ejecuta en el mismo símbolo, abre una posición de 0,5 lotes y un stop loss de 100 puntos, mi EA abre una "posición interna EA" de 0,5 y un stop loss de 150 puntos, es decir, aumenta la posición existente a 1 lote, y luego cierro la "posición interna EA", es decir, reduzco la posición existente a 0,5 lotes. ¿Qué stop loss tienen entonces los 0,5 lotes restantes? ¿100 puntos o 150 puntos? ¿O no es posible en el modo de compensación establecer un stop loss independiente para "mis" 0,5 lotes a través de SendRequest en tal caso?

Es decir, no quiero simplemente cambiar stop losses bien pensados de otros EAs, pero no quiero simplemente renunciar a los míos propios. ¿Hay alguna solución eficiente a mi "problema" que no sea abrir una "posición interna del EA" en modo de compensación sólo cuando no haya ninguna posición abierta para el símbolo?

 
Benjamin Fotteler símbolo, abre una posición de 0,5 lotes y un stop loss de 100 puntos, mi EA abre una "posición interna EA" de 0,5 y un stop loss de 150 puntos, es decir, aumenta la posición existente a 1 lote, y luego cierro la "posición interna EA", es decir, reduzco la posición existente a 0,5 lotes. ¿Qué stop loss tienen entonces los 0,5 lotes restantes? ¿100 puntos o 150 puntos? ¿O no es posible en el modo de compensación establecer un stop loss independiente para "mis" 0,5 lotes a través de SendRequest en tal caso?

Es decir, no quiero simplemente cambiar stop losses bien pensados de otros EAs, pero no quiero simplemente renunciar a los míos. ¿Hay alguna solución eficiente a mi "problema" que no sea abrir una "posición interna del EA" en modo de compensación sólo cuando no haya ninguna posición abierta para el símbolo?

Si en una cuenta neteada (!) el primer EA para por ejemplo EURUSD compra 0,01 lote (compra) y un segundo EA vende 0,05 lote (venta) hay de nuevo sólo una posición en la cuenta con ahora 0,04 venta. Los números de las entradas son completamente irrelevantes aquí por el momento. Y si la segunda orden para la única posición en EURUSD establece nuevos (su= SL y TP, los de la primera orden se sobrescriben.

Sólo hay una posición con un SL y un TP, si se especifica.

 
Puedo entenderlo, gracias. Pero sigo sin entender qué stop loss se aplica si el primer EA compra 0,01 lotes y el segundo compra 0,05 lotes. Entonces se abre una posición de 0,06 lotes, ¿no? ¿Y qué stop loss se aplica a esta posición? ¿El primero, el segundo o uno agregado?
 
Benjamin Fotteler #:
Puedo entenderlo, gracias. Pero sigo sin entender qué stop loss se aplica si el primer EA compra 0,01 lotes y el segundo compra 0,05 lotes. Entonces se abre una posición de 0,06 lotes, ¿no? ¿Y qué stop loss se aplica a esta posición? ¿El primero, el segundo o uno agregado?
Yo creo que entra el último.
 

Ok, si ese es el caso, entonces finalmente he entendido el principio subyacente de una cuenta de compensación: Sólo hay una posición, que es un agregado de todas las operaciones anteriores; y quienquiera que haya sido el último en establecer SL y TP - ya sea a través del método OrderSend o a través de PositionModify o de otra manera - ha establecido SL y TP para toda la posición, independientemente de si conviene a los otros EAs o no.

Esto significa que cuando se utilizan varios EAs en un mismo símbolo con una cuenta de compensación, el usuario debe ser consciente de que debe establecer el SL y TP de los diferentes EAs de forma idéntica para que no funcionen de forma diferente a la prevista originalmente - a menos que tengan una función de protección y sólo abran una posición "interna" si no hay ninguna posición abierta en el símbolo respectivo. Y el PositionSelect() que mencionó anteriormente es muy útil para esto.

Documentation on MQL5: Trade Functions / PositionSelect
Documentation on MQL5: Trade Functions / PositionSelect
  • www.mql5.com
PositionSelect - Trade Functions - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
Razón de la queja: