Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1259

 
Yevhenii Levchenko:
¿He entendido bien que en mt5, en lugar de la hora de cierre, hay que mirar POSITION_TIME_UPDATE?
No. Necesitas una operación de cierre.
 
Valerius:

El TakeProfit se calcula en pips y el Trailing TakeProfit se calcula en la moneda del depósito. El Trailing TakeProfit es el beneficio en la moneda del depósito de una o más órdenes, y pone los stops de las órdenes en la cantidad especificada en los ajustes, es decir, a una distancia calculada.

Por ejemplo, en la configuración se especifica el Trailing Take Profit en 100 dólares. Una vez que el precio alcanza el beneficio de 100$ y va más allá, el programa calcula la distancia de 100$ y coloca todos los stoploss de las órdenes en el punto calculado, si lo permite. En cuanto el precio vuelva a los topes, se cerrarán todas las órdenes. En principio, es lo mismo que el Trailing Stop, sólo que se calcula en moneda de depósito y sigue el beneficio. Puede que me haya equivocado en alguna parte, pero este es el principio. Espero haberlo explicado.

Arrastre - movimiento. Trailing Stop - movemos el stop según el algoritmo. Trailing TakeProfit - movemos el nivel a medida que se acerca según algún algoritmo.

 
Artyom Trishkin:
No. Necesitas una operación de cierre.

Gracias.

Aquí hay una función para martin que comprueba el último comercio para el beneficio. Si no es rentable, devuelve el volumen de la operación. Qué tan correcto es hacerlo de esta manera:

double lastDealVolume() {
   datetime lastDealTime = 0;
   double volume = 0;
   if(HistorySelect(TimeCurrent() - PeriodSeconds(PERIOD_D1) * 10, TimeCurrent())) {
      int historyDealsTotal = HistoryDealsTotal();
      for(int i = historyDealsTotal - 1; i >= 0; i--) {
         if(HistoryDealSelect(HistoryDealGetTicket(i))) {
            ulong dealTicket = HistoryDealGetTicket(i);
            ENUM_DEAL_TYPE dealType = (ENUM_DEAL_TYPE) HistoryDealGetInteger(dealTicket, DEAL_TYPE);
            if(HistoryDealGetString(dealTicket, DEAL_SYMBOL) == _Symbol && HistoryDealGetInteger(dealTicket, DEAL_MAGIC) == MagicNumber &&
                  (dealType == DEAL_TYPE_BUY || dealType == DEAL_TYPE_SELL) ) {
               if(HistoryDealGetInteger(dealTicket, DEAL_TIME) > lastDealTime) {
                  lastDealTime = (datetime) HistoryDealGetInteger(dealTicket, DEAL_TIME);
                  if(HistoryDealGetDouble(dealTicket, DEAL_PROFIT) < 0) {
                     volume = HistoryDealGetDouble(dealTicket, DEAL_VOLUME);
                  } else {
                     volume = 0;
                  }
               }
            }
         }
      }
   } else Print("HistorySelect() (lastOrderVolume) error! ");
   return volume;
}

Si queremos saber el beneficio de toda la posición:

-> Buscar todas las operaciones y obtener el DEAL_POSITION_ID de la última operación;
-> Buscar y obtener el beneficio de toda la posición de nuevo utilizando DEAL_POSITION_ID?

¿O hay un camino más corto?

 
Yevhenii Levchenko:

Gracias.

Aquí hay una función para martin que comprueba el último comercio para el beneficio. Si no es rentable, devuelve el volumen de la operación. Qué tan correcto es hacerlo de esta manera:

Si queremos saber el beneficio de toda la posición:

-> Buscar todas las operaciones y obtener el DEAL_POSITION_ID de la última operación;
-> Buscar y obtener el beneficio de toda la posición de nuevo utilizando DEAL_POSITION_ID?

¿O hay un camino más corto?

Mira el problema desde otro ángulo. Por qué tenemos que buscar en el historial, si podemos obtener el ID de la posición en el momento del cierre de la misma y seleccionar las órdenes y operaciones de esta posición sabiendo ya todo.

 
Alexey Viktorov:

Mira el problema desde otro ángulo. Para qué buscar en el historial si se puede obtener el ID de la posición en el momento de cerrarla y seleccionar las órdenes y operaciones de esta posición ya sabiendo todo.

El caso es que hay que comprobarlo antes de abrir una operación :(

Pero si no tienes uno corto, siempre puedes ir por el camino largo :)

 
Yevhenii Levchenko:

La cosa es que hay que comprobarlo antes de abrir una operación :(

Pero si no hay uno corto, siempre puedes ir por el camino largo :)

Sólo es necesario cuando se reinicia el Asesor Experto en OnInit para buscarlo de esa manera. Y en el proceso de trabajo del EA, obtenemos los datos necesarios en el momento de cerrar la posición. Pero esto depende de cada uno. A algunas personas les gusta cargar el procesador con acciones innecesarias.........

 
Alexey Viktorov:

Esto sólo debe buscarse al reiniciar el Asesor Experto en OnInit. Y en el proceso de trabajo del Asesor Experto para obtener los datos necesarios en el momento de cerrar la posición. Pero todo esto es asunto de todos. A algunas personas les gusta cargar el procesador con acciones innecesarias.........

Estoy un poco confundido, pero ¿cómo rastrear el momento de cierre de una posición salvo que se solicite el estado de la posición en cada tick? Ciertamente, no son todas las posiciones las que se interrogan, sino todas las mismas en cada solicitud de garrapatas.

 
Valerius:

El TakeProfit se calcula en pips y el Trailing TakeProfit se calcula en la moneda del depósito. El Trailing TakeProfit es el beneficio en la moneda del depósito de una o más órdenes, y pone los stops de las órdenes en la cantidad especificada en los ajustes, es decir, a una distancia calculada.

Por ejemplo, en la configuración se especifica el Trailing Take Profit en 100 dólares. Una vez que el precio alcanza el beneficio de 100$ y va más allá, el programa calcula la distancia de 100$ y coloca todos los stoploss de las órdenes en el punto calculado, si lo permite. En cuanto el precio vuelva a los topes, se cerrarán todas las órdenes. En principio, es lo mismo que el Trailing Stop, sólo que se calcula en moneda de depósito y sigue el beneficio. Puede que me haya equivocado en alguna parte, pero este es el principio. Espero haberlo explicado.

Valeriy Yastremskiy:

Arrastre - movimiento. Trailing Stop - movemos el stop según el algoritmo. Trailing TakeProfit - movemos el nivel a medida que se acerca según algún algoritmo.

No me des una patada, pero no lo entiendo. En la configuración del Asesor Experto generado por el MetaEditor que incluye el módulo de arrastre, el nivel de arrastre se especifica en puntos. Por ejemplo, establezco el "nivel de seguimiento deTake Profit(en puntos)" = 100. ¿Cómo funcionará este tope de arrastre? Corríjanme si me equivoco. Cuando el precio actual alcanza la distancia de 100 pips antes del nivel de Take Profit especificado, la orden de arrastre se activa. Cuando el precio alcanza y cruza el TP, la posición no se cierra. La red de arrastre simplemente comienza a seguir el precio a una distancia de 100 pips. Si el precio se invierte y va en contra de la posición, la posición se cerrará por TP, o por SL si el arrastre se mueve más allá de TP. ¿Verdad?
Общие принципы - Торговые операции - Справка по MetaTrader 5
Общие принципы - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит и...
 
altec3:
No me patees mucho, pero no lo entiendo. En la configuración del Asesor Experto, que se generó en el MetaEditor y que incluye el módulo de arrastre, el nivel de arrastre se especifica en puntos. Por ejemplo, establezco el "nivel de seguimiento deTake Profit(en puntos)" = 100. ¿Cómo funcionará este tope de arrastre? Corríjanme si me equivoco. Cuando el precio actual alcanza la distancia de 100 pips antes del nivel de Take Profit especificado, la orden de arrastre se activa. Cuando el precio alcanza y cruza el TP, la posición no se cierra. La red de arrastre simplemente comienza a seguir el precio a una distancia de 100 pips. Si el precio se invierte y va en contra de la posición, la posición se cerrará por TP, o por SL si el arrastre se mueve más allá de TP. ¿Verdad?

Sin el código, es difícil no responder.

 
Alexey Viktorov:

Esto sólo debe buscarse de esta manera al reiniciar el Asesor Experto en OnInit. Y en el proceso de trabajo del Asesor Experto para obtener los datos necesarios en el momento de cerrar la posición. Pero todo esto es asunto de todos. A algunas personas les gusta cargar el procesador con acciones innecesarias.........

No se comprueba en cada garrapata. Si hay una señal, empieza a comprobar y abre una operación. Eso es todo :)
Razón de la queja: