Características del lenguaje mql5, sutilezas y técnicas - página 19

 
Artyom Trishkin:

¿Cómo puedo determinar la hora de apertura de la última posición y la hora de cierre de la última posición?

En general, me gustaría conocer los principios generales y los algoritmos para obtener información sobre las posiciones abiertas/cerradas en mql5.

¿Qué hay que tener en cuenta, qué peculiaridades hay en este momento?

La cuestión es que estoy utilizando la sintaxis MQL4, que es 1000 veces más fácil y comprensible que la sintaxis MQL5 para trabajar con la parte de comercio.

Sabes muy bien lo fácil y claro que se puede resolver tu tarea en tres líneas en MQL4. Por eso es exactamente como lo hago yo.

Para responder a todas las preguntas relacionadas con MQL5 estoy buscando en el código fuente de la biblioteca. Todos los matices que conozco han sido considerados allí.

Por el momento, podemos afirmar que las posiciones de cobertura y de compensación son muy diferentes. Por ejemplo, en el Netting siempre se puede tener una sola posición durante meses, mientras que se negocia constantemente. Por lo tanto, la posición de compensación en la comprensión normal de MT5 es algo mal concebido y, en consecuencia, inconveniente. Así que para esta Red podemos crear nuestra propia esencia de posición. En MT4 también se pueden tener posiciones netas, pero con una interacción mucho más clara.

Abra una posición para 1 lote. Luego, ciérralo a 0,99 y deposita la misma cantidad. Y así varias veces.

La cobertura es conveniente no porque pueda tener posiciones multidireccionales, sino porque puede tener varias posiciones en un símbolo de UNA dirección. Así es exactamente como veo cómodo trabajar con posiciones en sistemas de red. No como en MT5.

Lo ideal es que cuando se trabaje con cuentas de Netting, se tenga siempre una tabla que se corresponda totalmente con las cuentas de MT4. Porque sólo estas tablas le dan una comprensión instantánea de lo que sucedió y cómo sucedió en la cuenta de operaciones. No las estadísticas de MT5.

En cuanto a la MT5-Hedge, todo es sencillo. Sin embargo, CloseBy no ha investigado. Por lo tanto, no lo sé.

 
fxsaber:
No siempre es posible conocer los niveles SL/TP de una posición cerrada.

De la cita también se deduce que las posiciones TP en MT5 son siempre una orden de mercado. No marque la contraparte del límite - ver arriba.

Esto es interesante... Necesito saber con certeza que la última posición cerrada se cerró con el take profit.

¿Hay alguna forma de saberlo con seguridad?

 
Artyom Trishkin:

Esto es interesante... Me encuentro con la necesidad de saber con certeza que la última posición cerrada se cerró en el take profit.

¿Hay alguna forma de saberlo con seguridad?

Estoy haciendo lo que me han aconsejado:

//+------------------------------------------------------------------+
//| Возвращает причину закрытия позиции по Take Profit               |
//+------------------------------------------------------------------+
bool IsClosedByTP (const string symbol)
{
  //--- Получим комментарий последней сделки на указанном символе
  string last_comment = LastDealComment (symbol);
  //--- Если в комментарии есть строка "tp"
  if(StringFind (last_comment, "tp", 0) > -1)
    return (true);
  //--- Если нет строки "tp"
  return (false);
}
//+------------------------------------------------------------------+
//| Возвращает причину закрытия позиции по Stop Loss                 |
//+------------------------------------------------------------------+
bool IsClosedBySL (const string symbol)
{
  //--- Получим комментарий последней сделки на указанном символе
  string last_comment = LastDealComment (symbol);
  //--- Если в комментарии есть строка "sl"
  if(StringFind (last_comment, "sl", 0) > -1)
    return (true);
  //--- Если нет строки "sl"
  return (false);
}
//+------------------------------------------------------------------+
//| Возвращает комментарий последней сделки на указанном символе     |
//+------------------------------------------------------------------+
string LastDealComment (const string symbol)
{
  int    total_deals  = 0;  // Всего сделок в списке выбранной истории
  string deal_symbol  = ""; // Символ сделки
  string deal_comment = ""; // Комментарий сделки
                            //--- Если история сделок получена
  if(HistorySelect (0, TimeCurrent ()))
  {
    //--- Получим количество сделок в полученном списке
    total_deals = HistoryDealsTotal ();
    //--- Пройдемся по всем сделкам в полученном списке от последней сделки к первой
    for(int i = total_deals - 1; i >= 0; i--)
    {
      //--- Получим комментарий сделки
      deal_comment = HistoryDealGetString (HistoryDealGetTicket (i), DEAL_COMMENT);
      //--- Получим символ сделки
      deal_symbol = HistoryDealGetString (HistoryDealGetTicket (i), DEAL_SYMBOL);
      //--- Если символ сделки и текущий символ равны, остановим цикл
      if(deal_symbol == symbol)
        break;
    }
  }
  //---
  return (deal_comment);
}
 
Andrey Dik:

Estoy haciendo lo que me han aconsejado.

Bien, ¿cómo puedo saber si la última operación ha provocado el cierre o la inversión de una posición?

Si la posición está cerrada o invertida, entonces tiene sentido comprobar sus datos, que serán necesarios para la lógica del asesor: volumen, hecho de cerrar en la toma o en el stop, etc.

De lo contrario, si el hecho de cerrar en la toma se detectó en la última operación, pero la posición se ha mantenido, entonces no tiene sentido comprobar los datos de la última posición cerrada (todavía existe).

En general, por supuesto, es difícil cambiar rápidamente a la lógica del sistema de órdenes de MT5 después del cuatro - por lo que surgen muchas preguntas al pensar en la lógica del comportamiento del EA, que depende de los datos de la última posición cerrada - en el cuatro es todo transparente - la posición tiene su propio tipo, y es la última - es conveniente - tomar los datos y utilizarlos. Pero aquí... cobertura, red ... y necesitamos el mismo resultado... y entonces empezamos a pensar de una manera diferente...

 
Artyom Trishkin:

Bien, entonces, ¿cómo saber si la última operación ha supuesto el cierre o la inversión de una posición?

1. Si la posición está cerrada o invertida, entonces tiene sentido comprobar sus datos, que serán necesarios para la lógica del Asesor Experto: el volumen, el hecho de cerrar en toma o stop, etc.

De lo contrario, si el hecho de cerrar sobre la toma de beneficios se detectó en la última posición, pero la posición se mantuvo, entonces no tiene sentido comprobar los datos de la última posición cerrada (todavía existe).

En general, por supuesto, es difícil cambiar rápidamente a la lógica del sistema de órdenes de MT5 después del cuatro - por lo que surgen muchas preguntas al pensar en la lógica del comportamiento del asesor, que está ligado a los datos de la última posición cerrada - en el cuatro todo es transparente - la posición tiene su propio tipo, y es la última - encaja, tomamos los datos y los utilizamos. Pero aquí... cobertura, red ... y necesitamos el mismo resultado... y entonces empezamos a pensar por todos lados...

1. Comprobar el tipo de transacción, IN, OUT o IN/OUT

2. Si una posición se ha cerrado por SL o TP, ya está cerrada, no necesitamos comprobar el tipo de operación.

 
Andrey Dik:

1. Compruebe el tipo de transacción, IN, OUT o IN/OUT

2. Si la posición se cierra por SL o TP, ya no existe, está cerrada, no es necesario comprobar el tipo de operación.

¿Es válido para las redes? ¿O para una cobertura? ¿No es posible tener varias posiciones en una dirección en una cuenta de cobertura? ¿O es una posición y ....? ¿Qué es "y"? ... Mierda... No sé qué es "y"... Hay muchas preguntas, las respuestas aún no están en mi cabeza.
 
Artyom Trishkin:
¿Es cierto para las redes? ¿O también es cierto para las coberturas? ¿No puede haber varias posiciones en una dirección en una cuenta de cobertura? ¿O es una posición y ....? ¿Qué es "y"? ... Mierda... No sé qué es "y"... Muchas preguntas, sin respuestas todavía.

También para el seto.

A lo largo de los años, mi cerebro se ha agudizado a la red. Orden->Transacción->Posición. Puede haber muchas operaciones en una posición (en una cobertura sólo hay una operación, corregidme si me equivoco), se puede saber qué pasó con la posición por el tipo de operación.

En una cobertura es, por supuesto, más fácil de entender, pero más difícil de seguir. Por supuesto, esta es mi opinión personal.

 
Andrey Dik:

También para una cobertura.

A lo largo de los años, mi cerebro se ha agudizado a la red. Orden->Transacción->Posición. Puede haber muchas operaciones en una posición (en una cobertura sólo hay una operación, corregidme si me equivoco), se puede saber qué pasó con la posición por el tipo de operación.

En una cobertura es, por supuesto, más fácil de entender, pero más difícil de seguir. En mi opinión, por supuesto.

Lo entiendo, gracias. Lo resolveré.
 
Artyom Trishkin:

Esto es interesante... Necesito saber con certeza que la última posición cerrada se cerró con el take profit.

¿Hay alguna forma de saberlo con seguridad?

Cuando se encuentra la última operación DEAL_ENTRY_OUT y se selecciona todo el historial de la posición HistorySelectByPosition en esta lista, hay 2 operaciones y 2 órdenes, abriendo una posición y cerrándola. La orden en base a la cual se produjo el cierre contiene ORDER_PRICE_OPEN. Luego se comprueba el tipo de posición y el tipo de orden que se utilizó para cerrarla. Si el tipo de orden es contrario, significa que fue un cierre. En consecuencia, el precio de la orden es el precio que debemos buscar, con una pequeña corrección: Si el beneficio de la orden es > 0, entonces este es el precio de TP, si es < 0, entonces la posición se ha cerrado en SL.

Si tenemos en cuenta el comentario a la orden, no debemos confiar en ella.

 
Alexey Viktorov:

Cuando se encuentra la última operación DEAL_ENTRY_OUT y se selecciona todo el historial de la posición HistorySelectByPosition en esta lista hay, para las cuentas hadge 2 operaciones y 2 órdenes, abriendo una posición y cerrándola. La orden en base a la cual se produjo el cierre contiene ORDER_PRICE_OPEN. Luego se comprueba el tipo de posición y el tipo de orden que se utilizó para cerrarla. Si el tipo de orden es contrario, significa que fue un cierre. En consecuencia, el precio de la orden es el precio que debemos buscar, con una pequeña corrección: Si el beneficio de la orden es > 0, entonces este es el precio de TP, si es < 0, entonces la posición se ha cerrado en SL.

Si nos basamos en el comentario de la orden yo no lo haría.

¿Y el SL? ¿Cómo se determina cuál fue la red de arrastre cerrada en beneficio?