Guten Tag, und wieder einmal flehe ich Sie an. Auch am zweiten Tag verstehe ich nicht, warum dieses Stück Code nicht funktioniert
//+------------------------------------------------------------------+//| 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 ------------");
}
}
}
Print "Deal entered...." geht gut, dann sollte es eine Aufteilung geben, einige Geschäfte"Open position ...." werden gedruckt, aber alle anderen (das sind Geschäfte , die die Position durch TakeProfit schließen ) werden nicht gedruckt.
Ich verstehe nicht, wo das Problem liegt. Ich werde die verlorenen Geschäfte unten farblich markieren.
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)
Ein Ereignis ist eingetreten, ein Handel, der eine Position schließt, wurde ausgeführt. Die Stelle ist in diesem Moment bereits vergeben. Sie können dies bestätigen , indem Sie eine Liste von Aufträgen und Geschäften auswählen (es gibt keine solche Liste im Code) und lesen
Dabei ist zu beachten, dass es sich um ein kleines Konto handelt, bei dem die Position in der Regel nur zwei Aufträge und zwei Trades umfasst.
Guten Tag, wenn es nicht zu viel Mühe für Sie ist, haben Sie alles in diesem Beitrag genau beschrieben. In meinen beiden obigen Beiträgen versuche ich, das gewünschte Ergebnis zu erzielen, d. h. mich zu verpflichten, eine Position zu schließen. Ich kann es immer noch nicht tun.
Bitte teilen Sie mir mit, wo ich einen Fehler oder Defekt habe ?????
Und auf diese Weise gibt es überhaupt keine Unterscheidung, so dass es sich herausstellt, dass das Schließen einer Position bei TakeProfit auch unterDEAL_ENTRY_IN fällt.
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)// Открылась позиция
{
Print("Открыта позиция +++ ",trans.position," +++ записана в структуру ArrayPosition ++++++++++++++");
}
if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) != DEAL_ENTRY_IN)
{
Print("Закрыта позиция --- ",trans.position," --- записана в структуру ArrayDealOut ------------");
}
}
}
2020.04.1212:10:27.368 Core 12018.01.0304:58:00 CTrade::OrderSend: modify position #1252 EURUSD (sl: 0.00000, tp: 0.00000) [done]
2020.04.1212:10:27.368 Core 12018.01.0304:59:38take profit triggered #2540 sell 0.01 EURUSD 1.20473 tp: 1.20425 [#2676 buy 0.01 EURUSD at 1.20425]
2020.04.1212:10:27.368 Core 12018.01.0304:59:38 deal #2676 buy 0.01 EURUSD at 1.20425 done (based on order #2676)
2020.04.1212:10:27.368 Core 12018.01.0304:59:38 deal performed [#2676 buy 0.01 EURUSD at 1.20425]
2020.04.1212:10:27.368 Core 12018.01.0304:59:38 order performed buy 0.01 at 1.20425 [#2676 buy 0.01 EURUSD at 1.20425]
2020.04.1212:10:27.368 Core 12018.01.0304:59:38Зашла сделка ########## 2540###########
2020.04.1212:10:27.368 Core 12018.01.0304:59:38Открыта позиция +++ 2540 +++ записана в структуру ArrayPosition ++++++++++++++
2020.04.1212:10:27.368 Core 12018.01.0304:59:40 take profit triggered #2473 sell 0.01 EURUSD 1.20472 tp: 1.20424 [#2677 buy 0.01 EURUSD at 1.20424]
Sergey Voytsekhovsky: Und auf diese Weise gibt es überhaupt keine Trennung, es stellt sich heraus, dass das Schließen einer Position bei TakeProfit auch unterDEAL_ENTRY_IN?
Ich habe den Eindruck, dass einige Änderungen an der Handhabung des OnTradeTransaction-Ereignisses vorgenommen wurden.
Versuchen Sie, TRADE_TRANSACTION_DEAL_ADD durch TRADE_TRANSACTION_HISTORY_ADD zu ersetzen.
Ich habe den Eindruck, dass an der Behandlung des OnTradeTransaction-Ereignisses einige Änderungen vorgenommen wurden.
Versuchen Sie, TRADE_TRANSACTION_DEAL_ADD durch TRADE_TRANSACTION_HISTORY_ADD zu ersetzen.
Die Eröffnungspositionen der Transaktionen werden gedruckt, d. h. diese Auswahl funktioniert. Aber es ist nicht klar, wie man Geschäfte - Schließungspositionen - auswählt, obwohl sie in der Liste der Terminal-Transaktionen sichtbar sind (immer ein paar/drei Zeilen höher).
Die Eröffnungspositionen der Transaktionen werden gedruckt, d. h. diese Auswahl funktioniert. Aber wie man die Transaktionen - die Schlusspositionen - auswählt, ist nicht klar, auch wenn sie in der Transaktionsliste des Terminals sichtbar sind (immer ein paar / drei Zeilen höher).
Versuchen Sie, den Debugger durch Drücken der blauen Taste einzuschalten.
voreingestellte Haltepunkte und prüfen, wo die Werte liegen und welche Werte erwartet werden. OK, ich scheine keine Fehler zu sehen, also muss ich prüfen, also offene Positionen schreiben, Stopps anpassen, damit ich nicht lange mit dem Schließen warten muss...
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Ich überlasse es der Öffentlichkeit, darüber zu urteilen. Ich habe zwar noch keine Schecks beigefügt, aber ich denke, sie sollten funktionieren.
Und irgendwo in OnTick:DelitClosePositionFromArrayPosition();
Guten Tag, und wieder einmal flehe ich Sie an. Auch am zweiten Tag verstehe ich nicht, warum dieses Stück Code nicht funktioniert
Print "Deal entered...." geht gut, dann sollte es eine Aufteilung geben, einige Geschäfte"Open position ...." werden gedruckt, aber alle anderen (das sind Geschäfte , die die Position durch TakeProfit schließen ) werden nicht gedruckt.
Ich verstehe nicht, wo das Problem liegt. Ich werde die verlorenen Geschäfte unten farblich markieren.
Es ist also wie SOS !!!
Alexey, es bezieht sich alles nur auf die Behandlung des OnTradeTransaction-Ereignisses
Ein Ereignis ist eingetreten, ein Handel, der eine Position schließt, wurde ausgeführt. Die Stelle ist in diesem Moment bereits vergeben. Sie können dies bestätigen , indem Sie eine Liste von Aufträgen und Geschäften auswählen (es gibt keine solche Liste im Code) und lesen
Dabei ist zu beachten, dass es sich um ein kleines Konto handelt, bei dem die Position in der Regel nur zwei Aufträge und zwei Trades umfasst.Guten Tag, wenn es nicht zu viel Mühe für Sie ist, haben Sie alles in diesem Beitrag genau beschrieben. In meinen beiden obigen Beiträgen versuche ich, das gewünschte Ergebnis zu erzielen, d. h. mich zu verpflichten, eine Position zu schließen. Ich kann es immer noch nicht tun.
Bitte teilen Sie mir mit, wo ich einen Fehler oder Defekt habe ?????
Und auf diese Weise gibt es überhaupt keine Trennung, es stellt sich heraus, dass das Schließen einer Position bei TakeProfit auch unter DEAL_ENTRY_IN?
Ich habe den Eindruck, dass einige Änderungen an der Handhabung des OnTradeTransaction-Ereignisses vorgenommen wurden.
Versuchen Sie, TRADE_TRANSACTION_DEAL_ADD durch TRADE_TRANSACTION_HISTORY_ADD zu ersetzen.
Ich habe den Eindruck, dass an der Behandlung des OnTradeTransaction-Ereignisses einige Änderungen vorgenommen wurden.
Ersetzen Sie TRADE_TRANSACTION_DEAL_ADD durch TRADE_TRANSACTION_HISTORY_ADD
Das ist nicht hilfreich. Wir danken Ihnen für Ihr Feedback.
Ich habe den Eindruck, dass an der Behandlung des OnTradeTransaction-Ereignisses einige Änderungen vorgenommen wurden.
Versuchen Sie, TRADE_TRANSACTION_DEAL_ADD durch TRADE_TRANSACTION_HISTORY_ADD zu ersetzen.
Die Eröffnungspositionen der Transaktionen werden gedruckt, d. h. diese Auswahl funktioniert. Aber es ist nicht klar, wie man Geschäfte - Schließungspositionen - auswählt, obwohl sie in der Liste der Terminal-Transaktionen sichtbar sind (immer ein paar/drei Zeilen höher).
Ich werde es von Anfang an versuchen, denn mein Kopf ist schon ganz durcheinander. Wie der Filmklassiker sagte - "Wer baut so.....????".
Es gibtein Handelsgeschäft, aber es gibt noch keinen Handelsschein. Verstehe ich das richtig?
Die Eröffnungspositionen der Transaktionen werden gedruckt, d. h. diese Auswahl funktioniert. Aber wie man die Transaktionen - die Schlusspositionen - auswählt, ist nicht klar, auch wenn sie in der Transaktionsliste des Terminals sichtbar sind (immer ein paar / drei Zeilen höher).
Versuchen Sie, den Debugger durch Drücken der blauen Taste einzuschalten.
voreingestellte Haltepunkte und prüfen, wo die Werte liegen und welche Werte erwartet werden. OK, ich scheine keine Fehler zu sehen, also muss ich prüfen, also offene Positionen schreiben, Stopps anpassen, damit ich nicht lange mit dem Schließen warten muss...
Ich werde es von Anfang an versuchen, denn mein Kopf ist schon ganz durcheinander. Wie der Filmklassiker sagte - "Wer baut so.....????".
Es gibt ein Handelsgeschäft, aber es gibt noch keinen Handelsschein. Verstehe ich das richtig?
Ich verstehe überhaupt nichts mehr. Hier ist ein Stück Code aus meinem laufenden EA
Und bei DebugBreak() hat es nie aufgehört; es funktioniert also alles ohne Probleme.
Offenbar haben Sie einen Auftrag, der in die Historie aufgenommen wird, und Sie warten auf ein Handelsticket.