Antwort

Stop-/Limit-Order zu nahe am tatsächlichen Preis

6 Antworten

sansay

Abonnent, bbp_participant, Gemeinschaft, 11 Antworten.

Profil besuchen

vor 7 Jahren #116332

Siehe beigefügtes Bildschirmfoto.

Als ich zum ersten Mal dieses EA-Protokoll sah, "Stop/Limit-Order zu nahe am aktuellen Preis", dachte ich sofort: "OK, das Stop-Level ist falsch". Also bearbeitete ich den Code und änderte den Wert von MinDistanceOfStopFromPrice auf 70, da dies die Spezifikation des USDMXN-Paares war. Wie Sie jedoch auf dem Screenshot sehen können, hat das das Problem nicht gelöst. In der Tat habe ich sogar versucht, 100, 200, 700, es änderte sich nicht eine Sache.

Für jede Hilfe wären wir Ihnen sehr dankbar.

0

sansay

Abonnent, bbp_participant, Gemeinschaft, 11 Antworten.

Profil besuchen

vor 7 Jahren #141561

Welcher Bildschirmausdruck?

 

Ich habe das gegenteilige Problem: Ich brauche einige Stop_limit-Aufträge, die näher am Kurs liegen.

 

Das ist seltsam, ich bin mir ziemlich sicher, dass ich die png-Datei angehängt habe. Versuchen wir es noch einmal...

0

tomas262

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 7 Jahren #141585

Tritt das Problem auf, wenn Sie einen Auftrag erteilen oder versuchen, PT, SL oder den Auftragspreis zu ändern?

0

sansay

Abonnent, bbp_participant, Gemeinschaft, 11 Antworten.

Profil besuchen

vor 7 Jahren #141594

Ich tue nichts, es ist ein mit SQ erstellter EA. Es tut dies, und ich denke, der Code wird zu jedem einzelnen EA, den es erstellt, hinzugefügt. Der Unterschied in diesem Fall ist, dass diese besondere Forex-Händler hat eine 70 stoppt Ebene, wo als andere haben 0.

Diejenigen mit 0 lösen natürlich nichts aus.

Der Code ist in Funktion: 

void openPosition(int tradeDirection) {

      // Prüfen, ob der Stopp-/Limitkurs nicht zu nahe ist
      if(NormalizeDouble(MathAbs(openPrice - AskOrBid), Digits) <= NormalizeDouble(eaStopDifferenceNumber, Digits)) {
         //Log("Stop-/Limit-Order liegt zu nahe am aktuellen Preis");
         Rückkehr;
      }
Wenn dies geschieht, wird natürlich kein Handel eröffnet.
Gestern habe ich versucht herauszufinden, was passiert, wenn ich den Retourenschein entferne. Ich wollte sehen, ob der Händler die Bestellung auch ablehnen würde. 
Die Anweisung erschien im Expertenprotokoll, aber es fand kein Handel statt und es erschien kein anderes Protokoll. Ich werde es noch einmal versuchen, diesmal werde ich mehr Protokolle hinzufügen, damit ich weiß, welchen Weg der Prozess genommen hat.

0

sansay

Abonnent, bbp_participant, Gemeinschaft, 11 Antworten.

Profil besuchen

vor 7 Jahren #141656

Heute Morgen habe ich festgestellt, dass der Versuch, einen Verkaufsstopp zu platzieren, fehlgeschlagen ist. Siehe beigefügtes Protokoll.

0

tomas262

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 7 Jahren #141681

Ich frage, weil Sie die Frage in den "EA Wizard"-Thread gestellt haben

 

Sie können die Strategie hier posten oder mir schicken an [email protected] damit ich versuchen kann, es auch auf USDMXN zu testen

0

sansay

Abonnent, bbp_participant, Gemeinschaft, 11 Antworten.

Profil besuchen

vor 7 Jahren #141685

Dank meiner Tests konnte ich das Problem finden und habe den Code korrigiert.

Das Problem ist, dass der Server des Brokers nach:
short: Auftragskurs < aktuellerKurs - stopLevel 

long: Auftragskurs > aktuellerKurs + stopLevel

 

Wenn die Bedingung nicht erfüllt ist, schlägt die Änderungsanforderung fehl. Derzeit passt der Code die stopLoss und targetProfit, um nur mindestens miting orderPrice + oder - Händler Stop-Level sein. Und dies führt dazu, dass der Test fehlschlägt, wenn der orderPrice genau CurrentPrice -+ stopLevel ist. Die Lösung bestand also darin, einfach 1 Pip zu addieren oder zu subtrahieren. Hier ist die Code-Änderung:

 

Geben Sie in den versteckten Parametern an:

double stopOffset = 0,0001;

 

Hinzufügen und Übergeben des Parameters tradeDirection an die Signatur und den Aufruf der Methode openOrderWithErrorHandling:
int openOrderWithErrorHandling(int tradeDirection, int orderType, double orderLots, double openPrice, double stopLoss, double profitTarget, string comment, int magicNumber) {

 

Fügen Sie in derselben Methode den grünen Code hinzu:

 

   if(stopLoss != 0 || profitTarget != 0) {
      if( tradeDirection == 1 )
      {
         stopLoss -= stopOffset;
         profitTarget += stopOffset;
      }
      sonst if( tradeDirection == -1 )
      {
         stopLoss += stopOffset;
         profitTarget -= stopOffset;
      }
      Log("Einstellung SL/PT, SL: ", stopLoss, ", PT: ", profitTarget);
      if(OrderModify(ticket, OrderOpenPrice(), stopLoss, profitTarget, 0, 0)) {
         Log("Order geändert, StopLoss: ", OrderStopLoss(),", Profit Target: ", OrderTakeProfit());
      } sonst {
         Log("Fehler beim Ändern der Bestellung: ",error, " : ", ErrorDescription(error));
      }
   }
 
Das funktioniert. Trades Änderungen werden vom Server akzeptiert.

0

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