Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 302

 
mavar:

Zum Wohl! Heute habe ich meinen ersten EA im MT5 gestartet!

Die richtige Situation auf dem Markt kam und der Expert Advisor begann zu kaufen und zu kaufen!!! Wenigstens konnte ich noch rechtzeitig reagieren. Können Sie mir sagen, was an dem Code falsch ist? Ich dachte, es sollte nur ein Lot kaufen und sofort einen Stop Loss und Take Profit setzen. Sobald er etwas gekauft hat, sollte die Variable Bye_opened wahr werden und ihm nicht erlauben, einen weiteren Handel zu tätigen, bis die Stopps ausgelöst werden. Und woher weiß ich den Preis des letzten Handels, um Stops zu setzen?


Aber es sieht so aus, als hätte ich etwas falsch gemacht. Bitte weisen Sie mich auf meinen Fehler hin.

Die Ticks können schneller kommen, als die Position in der Liste der offenen Positionen erscheint. Also, Ihr Scheck

if(PositionSelect(_Symbol)==true)

wird eine Zeit lang nicht funktionieren, und während dieser Zeit werden mehrere Einträge vergehen. Es wird davon ausgegangen, dass sich das obige Codestück im Tick-Handler befindet.

 
pako:

Dieses Skript in den Skriptordner legen, in einem Unitor öffnen und kompilieren

Wenn die Börse geöffnet wird, ziehen Sie dieses Skript auf das Diagramm

Danke für die Hilfe, ich habe es selbst herausgefunden, alles hat funktioniert.
 
Guten Abend zusammen, teilen Sie den Code für das Schleppnetz. Ich danke Ihnen.
 
PokrovMT5:
Guten Abend zusammen, bitte teilen Sie den Code für das Schleppnetz. Danke.

Bitte benutzen Sie die Website-Suche - es ist nicht schwer:https://www.mql5.com/ru/search#!keyword=%D1%82%D1%80%D0%B0%D0%BB

 
barabashkakvn:

Bitte benutzen Sie die Website-Suche - es ist nicht schwer:https://www.mql5.com/ru/search#!keyword=%D1%82%D1%80%D0%B0%D0%BB

Ich danke Ihnen!
 
Dima_S:

Ticks können schneller kommen, als die Position in der Liste der offenen Positionen steht. Also, Ihr Scheck

wird eine Zeit lang nicht funktionieren, und während dieser Zeit wird es mehrere Einträge geben. Es wird davon ausgegangen, dass sich das obige Codestück im Tick-Handler befindet.

Dima, der Code befindet sich im Tick-Verarbeitungsblock. Was ist der richtige Weg, um dieses Problem zu lösen? Ich hatte das gleiche Problem in QuickBooks, der Roboter kauft oft mehr als er sollte. Ich habe es auf die zweite Verzögerung zurückgeführt und einfach eine separate Variable hinzugefügt, die sich ändert, wenn die Bedingungen erfüllt sind, aber auch hier gab es einige Probleme. Manchmal wurde der Auftrag von der Börse abgelehnt und die Variable hatte bereits den Wert "deal" und der Roboter handelte nicht.


Wie kann das Problem in MQL5 korrekt gelöst werden, damit der Roboter eine bestimmte Anzahl von Losen zu einer bestimmten Bedingung kauft und nicht mehr als die angegebene Anzahl von Losen kauft, bis er alle gekauften Lose verkauft hat?

 

Sollten wir nach dem Kauf eine Pause einlegen, um sicher eine Antwort der Börse abzuwarten?

Sleep(1000); //Haben Sie eine Pause gemacht?

 

Stop Loss bewegt sich nicht

schreibt:

--Auftrag ändern -> Preis open:1.3111 BID :1.3121 sl 1.3109
fehlgeschlagene Änderung der Order #3 Kauflimit 1,00 bei 1,31110 sl: 1,31080 tp: 0,00000 -> 1,31110, sl: 1,31090 tp: 0,00000 [Ungültige Stops]

--Bestellung ändern <- Ergebnis:10016

Und warum?

void MoveStopLoss()
{
   ulong  ticket     = OrderGetTicket(0);
   double price      = OrderGetDouble(ORDER_PRICE_OPEN);
   double slossPrev  = OrderGetDouble(ORDER_SL);
   double sloss      = SymbolInfoDouble(_SYMBOL, SYMBOL_ASK) - SymbolInfoDouble(_SYMBOL, SYMBOL_POINT)*15;

      if (slossPrev < sloss)
      {
         MqlTradeRequest request={0};
         MqlTradeResult  result={0};
         request.action       = TRADE_ACTION_MODIFY;        // Тип выполняемого действия
         request.order        = ticket;                     // Тикет ордера (для модификации ордеров)
         request.price        = price;                      // Цена 
         request.sl           = sloss;                      // Уровень Stop Loss ордера
         request.tp           = 0;                          // Уровень Stop Loss ордера
         request.type_time    = ORDER_TIME_DAY;             // Тип ордера по времени действия
   
         Print ("--Modify order -> ", " price open:", price, " BID :", SymbolInfoDouble(_SYMBOL, SYMBOL_BID), " sl ", request.sl);
         bool ret = OrderSend (request, result);
         Print ("--Modify order <- результат:", result.retcode);      
      }
}
 
mq35:

Stop Loss bewegt sich nicht

schreibt:

--Auftrag ändern -> Preis open:1.3111 BID :1.3121 sl 1.3109
fehlgeschlagene Änderung der Order #3 Kauflimit 1,00 bei 1,31110 sl: 1,31080 tp: 0,00000 -> 1,31110, sl: 1,31090 tp: 0,00000 [Ungültige Stops]

--Bestellung ändern <- Ergebnis:10016

Und warum?

Versuchen Sie, die SL zu normalisieren.
 

Normalisieren ist nicht hilfreich. Die gleiche Sache, sop-Verlust ist nicht hochgezogen

--Auftrag erstellen -> ASK:1,3121 Preis:1,3111 sl 1,3106

Kauflimit 1,00 EURUSD bei 1,3111 (1,3121) sl: 1,3106 (1,3118 / 1,3121 / 1,3118)
--Auftrag erstellen <- Ergebnis:10009

--Auftrag ändern -> Preis open:1.3111 BID :1.3119 sl 1.3107
Auftrag geändert [#3 Kauflimit 1.00 EURUSD bei 1.3111]

-Änderung der Reihenfolge <- Ergebnis:10009

--Auftrag ändern -> Preis open:1.3111 BID :1.312 sl 1.3108
Auftrag geändert [#3 Kauflimit 1.00 EURUSD bei 1.3111]

-Änderung der Reihenfolge <- Ergebnis:10009

--Auftrag ändern -> Preis open:1.3111 BID :1.3121 sl 1.3109
fehlgeschlagene Änderung der Order #3 Kauflimit 1.00 bei 1.31110 sl: 1.31080 tp: 0.00000 -> 1.31110, sl: 1.31090 tp: 0.00000 [Ungültige Stops]
--Bestellung ändern <- Ergebnis:10016