Répartir les postes ouverts en groupes - page 12

 
Sergey Voytsekhovsky:
Il semble que cela ait fonctionné. J'ai une impression négative pour chaque TakeProfit, et une impression positive pour chaque entrée sur le marché. Je suis désolé pour l'argot familier, mais je suis complètement autodidacte et je n'ai personne avec qui communiquer sur ce sujet.


Et je suis autodidacte. Bref, j'ai coupé et coupé et coupé le code... Si je n'avais pas dialogué avec vous, j'aurais découvert ces problèmes un peu plus tard...

Je devrais ajouter au code un choix de transaction avant de lire les propriétés.

    HistoryDealSelect(trans.deal);

Ou pour vérifier le succès du choix.

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

Et je suis autodidacte. Bref, j'ai coupé et coupé et coupé le code... Si je n'avais pas dialogué avec vous, j'aurais découvert ces problèmes un peu plus tard...

Il est toujours bon de parler, et vous découvrirez plus tard si la conversation est utile ou non. Ainsi, les personnes les plus bavardes augmentent en moyenne le minPolus, mais diminuent le maxPolus. C'est un peu long à dire.

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

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

Vous pensez tout haut ou c'est ce que vous me recommandez de faire ?

 

Avec la fonction

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

J'ai lu un truc à ce sujet, mais je ne sais pas encore comment l'utiliser.

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

Prochaine tâche - j'invite les personnes compétentes à discuter.

Comment faire pour qu'un ticket de transaction(fermeture d'une position sur TR) renvoie un ticket de position qui a été fermé par cette transaction ?

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

Le problème est que j'ai une structure dans laquelle les positions réelles doivent être stockées. Lorsqu'ils quittent le jeu, ils doivent être nettoyés.

? ??

 
Sergey Voytsekhovsky:

Au moins, il est utile de parler de quelque chose, et vous découvrirez plus tard si la conversation est utile ou non. Ainsi, les personnes les plus bavardes augmentent en moyenne le minPolus, mais diminuent le maxPolus. C'est un peu long à dire.

Vous pensez tout haut ou c'est ce que vous me recommandez de faire ?

Je ne fais pas que le recommander, mais je renvoie une ligne récemment supprimée dans mon code.

 
Sergey Voytsekhovsky:

Avec la fonction

Vous devez être prudent, j'ai lu une fonctionnalité là-bas, je ne sais pas encore comment l'utiliser.

Cela dépend de l'endroit où vous faites la sélection. Il n'y a aucun risque de cela dans OnTradeTransaction. En général, nous devons prendre l'habitude de le sélectionner avant d'accéder aux propriétés d'un ordre, d'une transaction ou d'une position.

Et n'oubliez pas que si, après la sélection, l'exécution passe à une autre fonction et qu'une autre sélection y est effectuée, la liste contiendra la dernière option sélectionnée au retour.

 
Sergey Voytsekhovsky:

Prochaine tâche - j'invite les personnes compétentes à discuter.

Comment faire pour qu'un ticket de transaction(fermeture d'une position sur TR) renvoie un ticket de position qui a été fermé par cette transaction ?

Le problème est que j'ai une structure dans laquelle les positions réelles doivent être stockées. Lorsqu'ils quittent le jeu, ils doivent être nettoyés.

? ??

Eh bien, c'est assez 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:

Cela dépend de l'endroit où vous faites la sélection. Il n'y a aucun risque de cela dans OnTradeTransaction. En fait, nous devrions prendre l'habitude de le sélectionner avant d'accéder aux propriétés d'un ordre, d'une transaction ou d'une position.

Et n'oubliez pas que si, après la sélection, l'exécution passe à une fonction quelconque et qu'elle fait un autre choix, alors le retour dans la liste sera celui qui a été sélectionné en dernier.

Mec, comment comprendre tout ça est au-delà de l'abstraction pour moi.

Je viens de résoudre le problème mentionné ci-dessus en recherchant le ticket d'une position fermée par une transaction connue - et je l'ai immédiatement demandé à l'impression, donc je suis revenu au point de départ - tous les TakeProfits n'apparaissent pas dans l'impression.

 
Alexey Viktorov:

C'est aussi simple que cela...

Mon Dieu, vous avez eu "mon précieux" tout ce temps et vous avez été si modestement silencieux ? ??

Merci beaucoup.

J'ai beaucoup appris. J'aurais pu le reposter, c'est tout.

 
Sergey Voytsekhovsky:

Oh mon Dieu, vous avez eu "mon précieux" tout ce temps et vous avez été si modestement silencieux ? ??

Merci beaucoup.

J'ai beaucoup appris, mais j'aurais juste reposté le document et c'est tout.

Il ne s'est rien passé. Je l'ai juste écrit pour vérifier et l'ai fait passer dans le débogueur sur des données historiques. Apprenez à utiliser le débogueur. C'est une compétence très utile.

J'ai commencé à programmer dans Excell ce qu'on appelle VBA (visual VBA for applications) et j'y ai appris à déboguer. Après cela, il m'a été difficile de m'habituer aux imprimantes pour vérifier les valeurs reçues... Et lorsqu'ils ont introduit le débogage dans mql5, j'étais heureux comme un enfant que ma souffrance soit terminée.

Raison: