Bonjour, et une fois de plus, je vous supplie. Deuxième jour, je ne comprends pas pourquoi ce morceau de code ne fonctionne pas.
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction& trans,
constMqlTradeRequest& request,
constMqlTradeResult& result)
{
//---if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
{
Print("Зашла сделка ########## ",trans.position," ###########");
if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN)// Открылась позиция
{
if(PositionSelectByTicket(trans.position))
{
int SizeArrayPosition = ArraySize(ArrayPosition);
ArrayResize(ArrayPosition,SizeArrayPosition+1);
ArrayPosition[SizeArrayPosition].kod_clana = 0;
ArrayPosition[SizeArrayPosition].open_price = trans.price;
ArrayPosition[SizeArrayPosition].ticket_position = trans.position;
ArrayPosition[SizeArrayPosition].identi_position = PositionGetInteger(POSITION_IDENTIFIER);
ArrayPosition[SizeArrayPosition].open_tyme = (datetime)PositionGetInteger(POSITION_TIME);
ArrayPosition[SizeArrayPosition].type_position = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
ArrayPosition[SizeArrayPosition].StopLoss = trans.price_sl;
ArrayPosition[SizeArrayPosition].TakeProfit = trans.price_tp;
Print("Открыта позиция +++ ",trans.position," +++ записана в структуру ArrayPosition ++++++++++++++");
}
}
if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) != DEAL_ENTRY_IN)
{
Print("Закрыта позиция --- ",trans.position," --- записана в структуру ArrayDealOut ------------");
}
}
}
L'impression "Deal entered...." se passe bien, puis il y a une division, certaines transactions"Open position ...." sont imprimées, mais toutes les autres transactions (ce sont des transactions fermant la position sur TakeProfit) ne sont pas imprimées.
Je ne comprends pas quel est le problème. Je marquerai les transactions perdues en couleur ci-dessous.
2020.04.1211:27:33.103 Core 12018.01.0218:54:00 CTrade::OrderSend: market buy 0.01 EURUSD tp: 1.20621 [done at 1.20574]
2020.04.1211:27:33.103 Core 12018.01.0218:54:00 Зашла сделка ##########1042###########
2020.04.1211:27:33.103 Core 12018.01.0218:54:00Открыта позиция +++ 1042 +++ записана в структуру ArrayPosition ++++++++++++++
2020.04.1211:27:33.103 Core 12018.01.0218:54:00 Зашла сделка ########## 1043###########
2020.04.1211:27:33.103 Core 12018.01.0218:54:00Открыта позиция +++ 1043 +++ записана в структуру ArrayPosition ++++++++++++++
2020.04.1211:27:33.103 Core 12018.01.0218:55:43take profit triggered #1039 sell 0.01 EURUSD 1.20579 tp: 1.20532 [#1044 buy 0.01 EURUSD at 1.20532]
2020.04.1211:27:33.103 Core 12018.01.0218:55:43 deal #1044 buy 0.01 EURUSD at 1.20527 done (based on order #1044)
2020.04.1211:27:33.103 Core 12018.01.0218:55:43 deal performed [#1044 buy 0.01 EURUSD at 1.20527]
2020.04.1211:27:33.103 Core 12018.01.0218:55:43 order performed buy 0.01 at 1.20527 [#1044 buy 0.01 EURUSD at 1.20532]
2020.04.1211:27:33.103 Core 12018.01.0218:55:43 Зашла сделка ########## 1039###########
2020.04.1211:27:33.103 Core 12018.01.0218:56:30take profit triggered #1042 sell 0.01 EURUSD 1.20571 tp: 1.20523 [#1045 buy 0.01 EURUSD at 1.20523]
2020.04.1211:27:33.103 Core 12018.01.0218:56:30 deal #1045 buy 0.01 EURUSD at 1.20523 done (based on order #1045)
2020.04.1211:27:33.103 Core 12018.01.0218:56:30 deal performed [#1045 buy 0.01 EURUSD at 1.20523]
2020.04.1211:27:33.103 Core 12018.01.0218:56:30 order performed buy 0.01 at 1.20523 [#1045 buy 0.01 EURUSD at 1.20523]
2020.04.1211:27:33.103 Core 12018.01.0218:56:30 Зашла сделка ##########1042###########
2020.04.1211:27:33.103 Core 12018.01.0218:57:00 На символе EURUSD открылся новый бар в 2018.01.0218:572020.04.1211:27:33.103 Core 12018.01.0218:57:00 market sell 0.01 EURUSD tp: 1.20458 (1.20507 / 1.20509 / 1.20507)
Alexey, tout cela se réfère uniquement au traitement de l'événement OnTradeTransaction.
Un événement s'est produit, une transaction qui ferme une position a été exécutée. La position est déjà perdue à ce moment-là. Ceci peut être confirmé en sélectionnant une liste d'ordres et d'affaires (il n'y a pas une telle liste dans le code) et en lisant
Et notez que nous parlons d'un compte hadge où la position ne comporte généralement que deux ordres et deux transactions.
Bonjour, si cela ne vous dérange pas trop, vous avez tout décrit avec précision dans ce post. Dans mes deux messages ci-dessus, j'essaie d'obtenir le résultat dont j'ai besoin - m'engager à fermer une position. Je ne peux toujours pas le faire.
Veuillez m'indiquer où j'ai fait une erreur ou un défaut ? ????.
Sergey Voytsekhovsky: Et de cette façon, il n'y a pas de séparation du tout, il s'avère que la fermeture d'une position à TakeProfit correspond aussi àDEAL_ENTRY_IN?
Il me semble que des modifications ont été apportées au traitement de l'événement OnTradeTransaction.
Essayez de remplacer TRADE_TRANSACTION_DEAL_ADD par TRADE_TRANSACTION_HISTORY_ADD
Il me semble que des modifications ont été apportées au traitement de l'événement OnTradeTransaction.
Essayez de remplacer TRADE_TRANSACTION_DEAL_ADD par TRADE_TRANSACTION_HISTORY_ADD
Les positions d'ouverture des transactions sont imprimées, c'est-à-dire que cette sélection fonctionne. Mais il n'est pas clair comment sélectionner les transactions - positions de clôture, même si elles sont visibles dans la liste des transactions du terminal (toujours deux/trois lignes plus haut).
Les positions d'ouverture des transactions sont imprimées, c'est-à-dire que cette sélection fonctionne. Mais comment sélectionner les transactions - les positions de clôture - n'est pas clair, même si elles sont visibles dans la liste des transactions du terminal (toujours deux/trois lignes plus haut).
Essayez de passer dans le débogueur en appuyant sur le bouton bleu.
des points d'arrêt prédéfinis et vérifier où se trouvent les valeurs et quelles sont les valeurs attendues. OK, je ne semble pas voir d'erreurs, je dois donc vérifier, donc écrire des positions ouvertes, ajuster les stops pour ne pas avoir à attendre longtemps pour fermer....
J'en fais profiter le public. Je n'ai pas encore joint de chèques, mais je pense qu'ils devraient fonctionner.
Et quelque part dans OnTick :DelitClosePositionFromArrayPosition() ;
Bonjour, et une fois de plus, je vous supplie. Deuxième jour, je ne comprends pas pourquoi ce morceau de code ne fonctionne pas.
L'impression "Deal entered...." se passe bien, puis il y a une division, certaines transactions"Open position ...." sont imprimées, mais toutes les autres transactions (ce sont des transactions fermant la position sur TakeProfit) ne sont pas imprimées.
Je ne comprends pas quel est le problème. Je marquerai les transactions perdues en couleur ci-dessous.
Alors c'est comme SOS ! !!
Alexey, tout cela se réfère uniquement au traitement de l'événement OnTradeTransaction.
Un événement s'est produit, une transaction qui ferme une position a été exécutée. La position est déjà perdue à ce moment-là. Ceci peut être confirmé en sélectionnant une liste d'ordres et d'affaires (il n'y a pas une telle liste dans le code) et en lisant
Et notez que nous parlons d'un compte hadge où la position ne comporte généralement que deux ordres et deux transactions.Bonjour, si cela ne vous dérange pas trop, vous avez tout décrit avec précision dans ce post. Dans mes deux messages ci-dessus, j'essaie d'obtenir le résultat dont j'ai besoin - m'engager à fermer une position. Je ne peux toujours pas le faire.
Veuillez m'indiquer où j'ai fait une erreur ou un défaut ? ????.
Et de cette façon, il n'y a pas de séparation du tout, il s'avère que la fermeture d'une position à TakeProfit correspond aussi à DEAL_ENTRY_IN?
Il me semble que des modifications ont été apportées au traitement de l'événement OnTradeTransaction.
Essayez de remplacer TRADE_TRANSACTION_DEAL_ADD par TRADE_TRANSACTION_HISTORY_ADD
Il me semble que des modifications ont été apportées au traitement de l'événement OnTradeTransaction.
Essayez de remplacer TRADE_TRANSACTION_DEAL_ADD par TRADE_TRANSACTION_HISTORY_ADD
Ça n'aide pas. Merci pour vos commentaires.
Il me semble que des modifications ont été apportées au traitement de l'événement OnTradeTransaction.
Essayez de remplacer TRADE_TRANSACTION_DEAL_ADD par TRADE_TRANSACTION_HISTORY_ADD
Les positions d'ouverture des transactions sont imprimées, c'est-à-dire que cette sélection fonctionne. Mais il n'est pas clair comment sélectionner les transactions - positions de clôture, même si elles sont visibles dans la liste des transactions du terminal (toujours deux/trois lignes plus haut).
Je vais essayer depuis le début, parce que j'ai déjà la tête en vrac. Comme le dit le film classique : "Qui construit comme ça ? ..... ????".
Il y aune transaction commerciale, mais il n'y a pas encore de ticket commercial. Est-ce que je comprends bien ?
Les positions d'ouverture des transactions sont imprimées, c'est-à-dire que cette sélection fonctionne. Mais comment sélectionner les transactions - les positions de clôture - n'est pas clair, même si elles sont visibles dans la liste des transactions du terminal (toujours deux/trois lignes plus haut).
Essayez de passer dans le débogueur en appuyant sur le bouton bleu.
des points d'arrêt prédéfinis et vérifier où se trouvent les valeurs et quelles sont les valeurs attendues. OK, je ne semble pas voir d'erreurs, je dois donc vérifier, donc écrire des positions ouvertes, ajuster les stops pour ne pas avoir à attendre longtemps pour fermer....
Je vais essayer depuis le début, parce que j'ai déjà la tête en vrac. Comme le dit le film classique : "Qui construit comme ça ? ..... ????".
Il y a une transaction commerciale, mais il n'y a pas encore de ticket commercial. Est-ce que je lis bien ?
Je ne comprends rien du tout. Voici un morceau de code de mon EA en cours d'exécution
Et il ne s'est jamais arrêté sur DebugBreak(); donc tout fonctionne sans aucun problème.
Apparemment, vous avez une commande en cours d'ajout à l'historique et vous attendez un ticket d'échange.