Dividere le posizioni aperte in gruppi - pagina 12

 
Sergey Voytsekhovsky:
Sembra che abbia funzionato: ho una stampa in meno per ogni TakeProfit e una stampa in più per ogni entrata nel mercato. Mi dispiace per lo slang colloquiale, ma sono completamente autodidatta e non ho nessuno con cui comunicare su questo argomento.


E sono un autodidatta. Comunque, stavo tagliando e tagliando e tagliando il codice... Se non fosse stato per il dialogo con voi, avrei trovato questi problemi un po' più tardi...

Dovrei aggiungere al codice una scelta di accordo prima di leggere le proprietà.

    HistoryDealSelect(trans.deal);

O per controllare il successo della scelta.

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

E sono un autodidatta. Comunque, stavo tagliando e tagliando e tagliando il codice... Se non fosse stato per il dialogo con voi avrei trovato questi problemi un po' più tardi...

È sempre bene parlare, e si scoprirà più tardi se la conversazione è utile o no. Così, le persone più loquaci aumentano il minPolus in media, ma diminuiscono il maxPolus. Questo è un po' un boccone.

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

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

Sta pensando ad alta voce o è questo che mi consiglia di fare?

 

Con la funzione

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

Ho letto una cosa su di esso, ma non so ancora come usarlo

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

Prossimo compito - invito i consapevoli a discutere.

Come avere un ticket di transazione(chiuso una posizione su TR) per restituire un ticket di posizione che è stato chiuso da questa transazione?

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 пометить на удаление ------------

Il fatto è che ho una struttura in cui le posizioni reali devono essere memorizzate. Quando lasciano il gioco, devono essere puliti.

???

 
Sergey Voytsekhovsky:

Almeno è utile parlare di qualcosa, e si scoprirà più tardi se la conversazione è utile o no. Quindi le persone più loquaci aumentano il minPolus facendo una media, ma diminuiscono il maxPolus. Questo è un po' un boccone.

Sta pensando ad alta voce o è questo che mi consiglia di fare?

Non solo raccomandandolo, ma restituendo una linea recentemente cancellata nel mio codice.

 
Sergey Voytsekhovsky:

Con la funzione

Bisogna fare attenzione, ho letto una funzione lì, non so ancora come usarla.

Dipende da dove si fa la selezione. Non c'è pericolo di questo in OnTradeTransaction. In generale, dovremmo prendere l'abitudine di selezionarlo prima di accedere alle proprietà di un ordine, affare o posizione.

E non dimenticate che se dopo la selezione l'esecuzione passa a qualche funzione e si fa un'altra selezione in essa, allora al ritorno la lista conterrà l'ultima opzione selezionata.

 
Sergey Voytsekhovsky:

Prossimo compito - invito i consapevoli a discutere.

Come avere un ticket di transazione(chiuso una posizione su TR) per restituire un ticket di posizione che è stato chiuso da questa transazione?

Il fatto è che ho una struttura in cui le posizioni reali devono essere memorizzate. Quando lasciano il gioco, devono essere puliti.

???

Beh, è abbastanza semplice...

/*********************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:

Dipende da dove si fa la selezione. In OnTradeTransaction non c'è alcun rischio. In effetti, dovremmo prendere l'abitudine di selezionarlo prima di accedere alle proprietà di un ordine, un affare o una posizione.

E non dimenticate che se dopo la selezione l'esecuzione va a qualche funzione e fa un'altra scelta, allora al ritorno nella lista sarà quella che è stata selezionata per ultima.

Amico, come comprendere tutto questo è al di là dell'astrazione per me.

Ho appena risolto il suddetto problema con la ricerca di un ticket di una posizione chiusa da un trade noto - e l'ho immediatamente richiesto dalla stampa, quindi sono tornato al punto di partenza - non tutti i TakeProfits appaiono nella stampa.

 
Alexey Viktorov:

È così semplice...

Mio Dio, hai avuto il "mio prezioso" per tutto questo tempo e sei stato così modestamente in silenzio?

Grazie mille.

Ho imparato molto, avrei potuto semplicemente ripubblicarlo, tutto qui.

 
Sergey Voytsekhovsky:

Oh mio Dio, hai avuto il "mio prezioso" per tutto questo tempo e sei stato così modestamente in silenzio?

Grazie mille.

Ho imparato molto, ma l'avrei semplicemente ripubblicato e basta.

Non è successo niente. L'ho appena scritto per controllare e l'ho eseguito attraverso il debugger sui dati storici. Imparate ad usare il debugger. È un'abilità molto utile.

Ho iniziato a programmare in Excell il cosiddetto VBA (visual VBA for applications) e ho imparato a conoscere il debugging. Dopo di che è stato difficile per me abituarmi alle stampanti per controllare i valori ricevuti... E quando hanno introdotto il debugging in mql5 ero felice come un bambino che la mia sofferenza era finita.