Antwort

SQ 3.8.0 Fehler 129 ungültiger Preis im realen Handel

14 Antworten

mikeyc

Kunde, bbp_participant, Gemeinschaft, 877 Antworten.

Profil besuchen

vor 9 Jahren #113353

Hallo Mark,

 

Ich habe erstellt, getestet und exportiert die MQL4 für eine Strategie, die auf EURUSD H1 Zeitrahmen vielversprechend aussieht. Es verwendet die Reverse-Markt-Position-Option, aber scheitert beim Vorwärts-Testen auf einem realen Konto:

 

2015.02.16 17:59:59.599 Strategie 9.7 EURUSD,H1: 2015.02.16 20:00:09 Fehler bei der Ordereröffnung: 129 : ungültiger Preis
2015.02.16 17:59:59.599 Strategie 9.7 EURUSD,H1: 2015.02.16 20:00:09 Eröffnungsauftrag, Richtung: 0, Preis: 1,13572, Ask: 1,13572, Bid: 1.13548
2015.02.16 17:59:55.489 Strategie 9.7 EURUSD,H1: 2015.02.16 20:00:05 Fehler bei der Ordereröffnung: 129 : ungültiger Preis
2015.02.16 17:59:55.489 Strategie 9.7 EURUSD,H1: 2015.02.16 20:00:05 Eröffnungsauftrag, Richtung: 0, Preis: 1,13572, Ask: 1,13572, Bid: 1.13548
2015.02.16 17:59:52.067 Strategie 9.7 EURUSD,H1: 2015.02.16 20:00:01 Fehler bei der Ordereröffnung: 129 : ungültiger Preis
2015.02.16 17:59:52.067 Strategie 9.7 EURUSD,H1: 2015.02.16 20:00:01 Eröffnungsauftrag, Richtung: 0, Preis: 1,13572, Ask: 1,13572, Bid: 1.13548
2015.02.16 17:59:52.052 Strategie 9.7 EURUSD,H1: close #164716296 sell 0.10 EURUSD at 1.14383 at price 1.13572

 

Irgendeine Idee, warum der EA nicht in der Lage zu sein scheint, die entgegengesetzte Handelsrichtung nach dem Schließen eines Handels zu öffnen?

 

Danke,

 

Mike

0

mikeyc

Kunde, bbp_participant, Gemeinschaft, 877 Antworten.

Profil besuchen

vor 9 Jahren #128868

Mark,

 

Wenn ich mir die Handelslogik im generierten EA ansehe, sieht es für mich so aus, als ob er unabhängig von der Fehlerursache einen neuen Versuch unternimmt, und im Falle des Fehlers 129 sollte er das Geld-/Briefkursverhältnis aktualisieren, da sich der Preis über den Slippage hinaus bewegt hat.

 

Siehe http://forum.mql4.com/61528

 

 

Für meine eigenen EAs verwende ich eine Bibliothek namens OrderReliable, um die schwierige Fehlerbehandlung zu bewältigen. 

 

https://github.com/keyguy/TradersTech/blob/master/OrderReliable_2011.01.07.mqh

 

Vielleicht wird dies in die nächste Version der SQ-Vorlage für MQ4 aufgenommen?

 

Herzliche Grüße,

 

Mike

0

Mark Fric

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 9 Jahren #128890

danke für den Hinweis auf diesen Fehler und die Bibliothek, ich werde mir das ansehen.

Mark
StrategyQuant Architekt

0

mikeyc

Kunde, bbp_participant, Gemeinschaft, 877 Antworten.

Profil besuchen

vor 9 Jahren #129627

Ich sehe den Slippage-Fehler ziemlich oft bei bestimmten Brokern (hallo FXDD :angry: ). Ich denke, die beste Lösung ist, diese Makler mit schlechten Schlupf zu vermeiden.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Profil besuchen

vor 9 Jahren #129666

Gehen Sie mit einem ECN-Broker, dieser Fehler ist eine typische Market-Maker-Broker Sache, dass sie sich weigern, Ihre Bestellung zu dem Preis, den sie in MT4 zeigen zu akzeptieren. Es heißt requotes und die sind da, um den Makler mehr Gewinne aus Ihren Verlusten zu machen:) Das wird bei einem guten und ehrlichen ECN-Broker nie passieren. Davon gibt es viele, meine Empfehlung ist Global Prime in Australien.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Matusiak Adrian

Kunde, bbp_participant, Gemeinschaft, 300 Antworten.

Profil besuchen

vor 9 Jahren #129687

Das wird bei einem guten und ehrlichen ECN-Broker nie passieren.

 

Sie liegen falsch... Es gibt viele andere Dinge, die Requotes auftreten. Versuchen Sie einfach, den Handel ohne Requotes mit Ping zum Handelsserver > 300ms zu machen. Selbst mit ehrlichen Makler werden Sie nie bekommen, dass Preis, was Sie sehen, weil dieser Preis bereits nicht existiert. 

btn_viewmy_160x33.png

0

geektrader

Customer, bbp_participant, community, 522 replies.

Profil besuchen

vor 9 Jahren #129701

Sicher, aber das ist kein Requote, das ist Slippage und wirft dem EA keinen Fehler vor, wie es ein Requote tut - der Handel wird in jedem Fall eröffnet, nur mit einem Slippage-Preis. Ich bevorzuge das immer noch im Vergleich zu Requotes. Btw, es ist klar, dass man keinen 300 ms Ping zum Broker-Server haben sollte. Ich arbeite übrigens für einen ECN-Broker, und selbst für kleine Konten sollten Sie einen VPS mieten, um Ihre Strategien auszuführen.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Matusiak Adrian

Kunde, bbp_participant, Gemeinschaft, 300 Antworten.

Profil besuchen

vor 9 Jahren #129704

Selbst für kleine Konten sollten Sie einen VPS mieten, um Ihre Strategien auszuführen.

 

Völlig ZUSTIMMEN.

btn_viewmy_160x33.png

0

Dan

Kunde, bbp_participant, Gemeinschaft, 31 Antworten.

Profil besuchen

vor 8 Jahren #133511

Hallo Mark,

 

Ich bin immer den gleichen Fehler wie MickeyC, in denen einige Male, wenn meine AE geht, um einen Handel zu platzieren, bekomme ich die "Fehler öffnen, um 129: ungültigen Preis" Es zieht sich 3 weitere Male mit dem ursprünglichen Preis. Gibt es einen Code, um den Preis zu aktualisieren, wenn er versucht, den Auftrag zu ersetzen, den ich einfügen kann, und ist dies etwas, das SQ4 ansprechen wird.

 

Vielen Dank für Ihre Hilfe

0

tomas262

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 8 Jahren #133524

Dan,

 

können Sie diese Strategie hochladen oder an folgende Adresse senden [email protected]?

0

Dan

Kunde, bbp_participant, Gemeinschaft, 31 Antworten.

Profil besuchen

vor 8 Jahren #133528

Hallo Thomas,

 

Ich ziehe es vor, meine AE nicht mitzuteilen und eine Fehlersuche vom Standpunkt aus zu betreiben, dass es sich um ein SQ-Logikproblem handelt, bei dem der Preis aktualisiert werden sollte, wenn er den Slippage-Betrag überschritten hat. MIckeyC hat in diesem Thread bereits darauf hingewiesen, und Mark wollte sich darum kümmern. Siehe oben, hat Mark irgendwelche Änderungen vorgenommen, um diesen Fehler in der nächsten Ausgabe von SQ zu beheben? Ich bin dem von MickeyC angegebenen Link zur MQL4-Website gefolgt  http://forum.mql4.com/61528 und da steht, um den Fehlercode 129 ungültiger Preis zu beheben, soll man RefreshRates(); vor dem Senden der Bestellung einfügen. Ich bin kein Programmierer in irgendeiner Weise am besten habe ich versucht, dass in der AE einzufügen. In Fettdruck unten habe ich den Code für die Aktualisierungsrate eingefügt, ich bin nicht sicher, ob das funktioniert, hier bräuchte ich Ihr Fachwissen. Ich werde sagen, ich habe nur den Fehler zweimal passieren, und es versucht, die Reihenfolge 3 mal danach mit jedes Mal nicht erfolgreich ungültigen Preis error129, ich hoffe, durch das Hinzufügen der RefreshRate Code in dort, dass es dieses Problem behebt. 

 

Vielen Dank für Ihre Hilfe

 

 // Offener Auftrag mit Fehlerbehandlung und Wiederholungsversuchen
   int ticket = 0;
   int retries = 3;
   while(true) {
      Wiederholungen-;
      if(Wiederholungen < 0) return;
      if(getMarketPosition() != 0) return;

      if(sqIsTradeAllowed() == 1) {
         ticket = openOrderWithErrorHandling(orderType, orderLots, openPrice, stopLoss, profitTarget, comment, MagicNumber);
         if(ticket > 0) {
            if(tradeDirection > 0) {
                ObjectSetText("Zeilen", "Letztes Signal: Lang, Ticket: "+Ticket, 8, "Tahoma", LabelColor);
            } sonst {
                ObjectSetText("Zeilen", "Letztes Signal: Kurz, Ticket: "+Ticket, 8, "Tahoma", LabelColor);
            }
            Rückkehr;
         }
      }

      if(ticket == -130 || ticket == -129) {
         // ungültige Stops oder Volumen, wir können den Handel nicht eröffnen
         Rückkehr;
      }

      Sleep(1000);
     
   }
   Rückkehr;
}

//+——————————————————————+

int openOrderWithErrorHandling(int orderType, double orderLots, double openPrice, double stopLoss, double profitTarget, string comment, int magicNumber) {

   //—————————————
   // Bestellung abschicken
   int error, ticket;
   Log("Eröffnungsauftrag, Richtung: ", orderType,", Preis: ", openPrice, ", Ask: ", Ask, ", Bid: ", Bid);
   ticket = OrderSend(Symbol(), orderType, orderLots, openPrice, MaxSlippage, 0, 0, comment, magicNumber, 0, Green);
   if(ticket < 0) {
      // Bestellung fehlgeschlagen, Fehler ins Protokoll schreiben
      error = GetLastError();
      Log("Fehler beim Öffnen der Bestellung: ",error, " : ", ErrorDescription(error));
      return(-error);
      Sleep(1000);
      //-aktuelle Preisdaten  
      RefreshRates();

    
   }

   rettmp = OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
   Log("Order geöffnet: ", OrderTicket(), " zum Preis:", OrderOpenPrice());

   stopLoss = getSpecialSL(stopLoss);
   profitTarget = getSpecialPT(profitTarget);

   if(EmailNotificationOnTrade) {
      SendMail("GB Strategy - Order opened", getNotificationText());
   }

0

Dan

Kunde, bbp_participant, Gemeinschaft, 31 Antworten.

Profil besuchen

vor 8 Jahren #133543

Hallo Tomas, ich benötige deinen Verstand und deine Hilfe bei dem oben genannten Problem, das ich habe.

0

Dan

Kunde, bbp_participant, Gemeinschaft, 31 Antworten.

Profil besuchen

vor 8 Jahren #133561

Thomas werde ich keine Antwort bekommen????

0

Mark Fric

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 8 Jahren #133566

Entschuldigung für die späte Antwort. Leider ist es nicht so einfach, denn der Preis eines Handels wird einige Zeit vor dem Aufruf dieser Funktion festgelegt, auch für Marktaufträge.

Sie können jedoch das folgende Codestück direkt nach dem Aufruf von sqIsTradeAllowed() hinzufügen.

Sie aktualisiert den Marktpreis kurz vor dem Absenden des Auftrags.

 

 

   …
   // Offener Auftrag mit Fehlerbehandlung und Wiederholungsversuchen
   int ticket = 0;
   int retries = 3;
   while(true) {
      Wiederholungen-;
      if(Wiederholungen < 0) return;
      if(getMarketPosition() != 0) return;
 
      if(sqIsTradeAllowed() == 1) {
         
         if(orderType == OP_BUY || orderType == OP_SELL) {
            RefreshRates();
            openPrice = NormalizeDouble(getTradeOpenPrice(tradeDirection), Digits);
         }
 
         ticket = openOrderWithErrorHandling(orderType, orderLots, openPrice, stopLoss, profitTarget, comment, MagicNumber);
         if(ticket > 0) {
            if(tradeDirection > 0) {
                ObjectSetText("Zeilen", "Letztes Signal: Lang, Ticket: "+Ticket, 8, "Tahoma", LabelColor);
            } sonst {
                ObjectSetText("Zeilen", "Letztes Signal: Kurz, Ticket: "+Ticket, 8, "Tahoma", LabelColor);
            }
            Rückkehr;
         }
      }

 

 

Mark
StrategyQuant Architekt

0

Dan

Kunde, bbp_participant, Gemeinschaft, 31 Antworten.

Profil besuchen

vor 8 Jahren #133576

Hallo Mark,

Danke für die Antwort, ich werde den Codeschnipsel hinzufügen und sehen, ob das funktioniert........ Nochmals vielen Dank

0

Ansicht von 14 Antworten - 1 bis 14 (von insgesamt 14)