Dividir las posiciones abiertas en grupos - página 12

 
Sergey Voytsekhovsky:
Parece que ha funcionado. Tengo una impresión negativa para cada TakeProfit, y una impresión positiva para cada entrada en el mercado. Siento la jerga coloquial, pero soy completamente autodidacta y no tengo a nadie con quien comunicarme sobre este tema.


Y soy autodidacta. De todos modos, estuve cortando y cortando y cortando el código... Si no fuera por el diálogo con usted, habría encontrado estos problemas un poco más tarde...

Debería añadir al código una opción de trato antes de leer las propiedades.

    HistoryDealSelect(trans.deal);

O para comprobar el éxito de la elección.

    if(!HistoryDealSelect(trans.deal))
      Print(GetLastError());
 
Alexey Viktorov:

Y soy autodidacta. De todos modos, estuve cortando y cortando y cortando el código... Si no fuera por el diálogo con usted, habría encontrado estos problemas un poco más tarde...

Siempre es bueno hablar, y más tarde descubrirás si la conversación es útil o no. Así, las personas más habladoras aumentan el minPolus en promedio, pero disminuyen el maxPolus. Eso es un poco de un bocado.

Надо добавить в код выбор сделки перед чтением свойств.

или с проверкой успешности выбора.

¿Está pensando en voz alta o es eso lo que me recomienda hacer?

 

Con la función

bool  HistoryDealSelect( 
   ulong  ticket     // тикет сделки 
   );

He leído algo al respecto, pero aún no sé cómo usarlo

Функция HistoryDealSelect() очищает в mql5-программе список сделок, доступных для обращений, и копирует в него одну единственную сделку, если выполнение HistoryDealSelect() завершилось успешно.
 

Próxima tarea - Invito a los conocedores a debatir.

¿Cómo hacer que un ticket de transacción(cerrado una posición en TR) devuelva un ticket de posición que fue cerrado por esta transacción?

2020.04.12 18:15:09.620 Core 1  2018.06.19 04:52:40   take profit triggered #6571  buy 0.01 EURUSD 1.16343 tp: 1.16389 [#6572  sell 0.01 EURUSD at 1.16389]
2020.04.12 18:15:09.620 Core 1  2018.06.19 04:52:40   deal #6572  sell 0.01 EURUSD at 1.16389 done (based on order #6572)
2020.04.12 18:15:09.620 Core 1  2018.06.19 04:52:40   deal performed [#6572  sell 0.01 EURUSD at 1.16389]
2020.04.12 18:15:09.620 Core 1  2018.06.19 04:52:40   order performed sell 0.01 at 1.16389 [#6572  sell 0.01 EURUSD at 1.16389]
2020.04.12 18:15:09.620 Core 1  2018.06.19 04:52:40   Закрыта позиция ---Тикет сделки--- 6572 ---Позицию в структуре ArrayDealOut пометить на удаление ------------

El caso es que tengo una estructura en la que hay que almacenar las posiciones reales. Al salir del juego, hay que limpiarlos.

???

 
Sergey Voytsekhovsky:

Al menos, siempre es útil hablar de algo, y más tarde se sabrá si la conversación es útil o no. Así, las personas más habladoras aumentan el minPolus de media, pero disminuyen el maxPolus. Eso es un poco de un bocado.

¿Está pensando en voz alta o es eso lo que me recomienda hacer?

No sólo lo recomiendo, sino que he devuelto la línea recientemente eliminada en mi código.

 
Sergey Voytsekhovsky:

Con la función

Hay que tener cuidado, he leído una función ahí, aún no sé cómo usarla.

Depende de dónde se haga la selección. En OnTradeTransaction no existe ese peligro. En general, debemos acostumbrarnos a seleccionarla antes de acceder a las propiedades de una orden, operación o posición.

Y no olvide que si después de la selección la ejecución pasa a alguna función y se hace otra selección en ella, entonces al regresar la lista contendrá la última opción seleccionada.

 
Sergey Voytsekhovsky:

Próxima tarea - Invito a los conocedores a debatir.

¿Cómo hacer que un ticket de transacción(cerrado una posición en TR) devuelva un ticket de posición que fue cerrado por esta transacción?

El caso es que tengo una estructura en la que hay que almacenar las posiciones reales. Al salir del juego, hay que limpiarlos.

???

Bueno, es bastante simple...

/*********************TradeTransaction function**********************/
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
 {
  if(trans.type == TRADE_TRANSACTION_DEAL_ADD && trans.symbol == _Symbol)
   {
    if(!HistoryDealSelect(trans.deal))
      Print(GetLastError());
    /******************** Если открылась позиция********************/
    if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN)
      Print("********** открытие сделка ", trans.deal, " позиция ", trans.position);
    /******************** Если закрылась позиция********************/
    if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_OUT)
     {
      if(HistoryDealGetInteger(trans.deal, DEAL_REASON) == DEAL_REASON_TP)
       {
        Print("********** закрытие по тейку сделка ", trans.deal, " позиция ", trans.position);
       }
      if(HistoryDealGetInteger(trans.deal, DEAL_REASON) == DEAL_REASON_SL)
       {
        Print("********** закрытие по стопу сделка ", trans.deal, " позиция ", trans.position);
       }
     }
   }
 }/*******************************************************************/
CN      0       19:20:27.920    !00 (GBPUSD.m,H1)       2020.02.03 12:01:20   ********** закрытие по стопу сделка 27 позиция 26
CG      0       19:20:27.920    !00 (GBPUSD.m,H1)       2020.02.03 12:01:20   ********** открытие сделка 28 позиция 28
HJ      0       19:20:28.023    Trade   2020.02.03 12:01:40   stop loss triggered #28  buy 0.1 GBPUSD.m 1.30698 sl: 1.30598 tp: 1.30798 [#29  sell 0.1 GBPUSD.m at 1.30598]
GE      0       19:20:28.023    Trades  2020.02.03 12:01:40   deal #29  sell 0.1 GBPUSD.m at 1.30598 done (based on order #29)
 JF      0       19:20:28.023    Trade   2020.02.03 12:01:40   deal performed [#29  sell 0.1 GBPUSD.m at 1.30598]
CD      0       19:20:28.023    Trade   2020.02.03 12:01:40   order performed sell 0.1 at 1.30598 [#29  sell 0.1 GBPUSD.m at 1.30598]
GI      0       19:20:28.023    Trade   2020.02.03 12:01:40   market buy 0.1 GBPUSD.m sl: 1.30512 tp: 1.30712 (1.30598 / 1.30612 / 1.30598)
FQ      0       19:20:28.023    Trades  2020.02.03 12:01:40   deal #30  buy 0.1 GBPUSD.m at 1.30612 done (based on order #30)
 QQ      0       19:20:28.023    Trade   2020.02.03 12:01:40   deal performed [#30  buy 0.1 GBPUSD.m at 1.30612]
ON      0       19:20:28.023    Trade   2020.02.03 12:01:40   order performed buy 0.1 at 1.30612 [#30  buy 0.1 GBPUSD.m at 1.30612]
KR      0       19:20:28.025    !00 (GBPUSD.m,H1)       2020.02.03 12:01:40   CTrade::OrderSend: market buy 0.10 GBPUSD.m sl: 1.30512 tp: 1.30712 [done at 1.30612]
RM      0       19:20:28.025    !00 (GBPUSD.m,H1)       2020.02.03 12:01:40   ********** закрытие по стопу сделка 29 позиция 28
FP      0       19:20:28.025    !00 (GBPUSD.m,H1)       2020.02.03 12:01:40   ********** открытие сделка 30 позиция 30
NK      0       19:20:28.295    Trade   2020.02.03 12:02:39   take profit triggered #30  buy 0.1 GBPUSD.m 1.30612 sl: 1.30512 tp: 1.30712 [#31  sell 0.1 GBPUSD.m at 1.30712]
IS      0       19:20:28.295    Trades  2020.02.03 12:02:39   deal #31  sell 0.1 GBPUSD.m at 1.30712 done (based on order #31)
 NE      0       19:20:28.295    Trade   2020.02.03 12:02:39   deal performed [#31  sell 0.1 GBPUSD.m at 1.30712]
KI      0       19:20:28.295    Trade   2020.02.03 12:02:39   order performed sell 0.1 at 1.30712 [#31  sell 0.1 GBPUSD.m at 1.30712]
IH      0       19:20:28.295    Trade   2020.02.03 12:02:39   market buy 0.1 GBPUSD.m sl: 1.30626 tp: 1.30826 (1.30712 / 1.30726 / 1.30712)
EI      0       19:20:28.295    Trades  2020.02.03 12:02:39   deal #32  buy 0.1 GBPUSD.m at 1.30726 done (based on order #32)
 LR      0       19:20:28.295    Trade   2020.02.03 12:02:39   deal performed [#32  buy 0.1 GBPUSD.m at 1.30726]
RL      0       19:20:28.295    Trade   2020.02.03 12:02:39   order performed buy 0.1 at 1.30726 [#32  buy 0.1 GBPUSD.m at 1.30726]
HR      0       19:20:28.297    !00 (GBPUSD.m,H1)       2020.02.03 12:02:39   CTrade::OrderSend: market buy 0.10 GBPUSD.m sl: 1.30626 tp: 1.30826 [done at 1.30726]
HS      0       19:20:32.663    !00 (GBPUSD.m,H1)       2020.02.03 12:02:39   ********** закрытие по тейку сделка 31 позиция 30
KP      0       19:20:32.663    !00 (GBPUSD.m,H1)       2020.02.03 12:02:39   ********** открытие сделка 32 позиция 32
 
Alexey Viktorov:

Depende de dónde se haga la selección. En OnTradeTransaction no existe ese riesgo. De hecho, deberíamos acostumbrarnos a seleccionarla antes de acceder a las propiedades de una orden, operación o posición.

Y no olvide que si después de la selección la ejecución va a alguna función y hace otra elección, entonces al regresar en la lista estará la que fue seleccionada en último lugar.

Hombre, cómo comprender todo esto está más allá de la abstracción para mí.

Acabo de resolver el problema mencionado anteriormente con la búsqueda de un ticket de una posición cerrada por una operación conocida - e inmediatamente lo solicité de la impresión, por lo que volví al punto de partida - no todos los TakeProfits aparecen en la impresión.

 
Alexey Viktorov:

Es tan simple como eso...

Dios mío, ¿has tenido a "mi preciosa" todo este tiempo y te has callado tan modestamente?

Muchas gracias.

He aprendido mucho. Podría haberla reenviado, eso es todo.

 
Sergey Voytsekhovsky:

Dios mío, ¿has tenido a "mi preciosa" todo este tiempo y has estado tan modestamente callada?

Muchas gracias.

He aprendido mucho, pero lo habría reenviado y ya está.

No pasó nada. Acabo de escribirlo para comprobarlo y lo he pasado por el depurador con datos históricos. Aprende a utilizar el depurador. Es una habilidad muy útil.

Empecé a programar en Excell en el llamado VBA (VBA visual para aplicaciones) y llegué a conocer la depuración allí. Después me costó acostumbrarme a las impresoras para comprobar los valores recibidos... Y cuando introdujeron la depuración en mql5 me alegré como un niño de que se acabara mi sufrimiento.

Razón de la queja: