Mein EA macht einen doppelten Eintrag - Seite 6

 
doshur:
Gibt es Neuigkeiten vom Service Desk?
Noch nicht.
 
angevoyageur:
Nein, noch nicht.

Hallo!

Gibt es schon Neuigkeiten vom Service Desk?

 
doshur:

Hallo!

Gibt es schon Neuigkeiten vom Service Desk?

Sie können sicher sein, dass ich die Antwort hier posten werde, wenn ich eine bekomme.

Persönlich bin ich nochnicht dazu gekommen, das Problem zu reproduzieren.

 

Mein EA generiert Signale sehr langsam und heute hat er einen Handel gemacht.

Kein Problem mit der Losgröße, nachdem ich den neuen Code verwenden, aber ich kann nicht bestätigt, dass der neue Code funktioniert.

 
doshur:

Mein EA generiert Signale sehr langsam und heute hat er einen Handel gemacht.

Kein Problem mit der Losgröße, nachdem ich den neuen Code verwendet habe, aber ich kann nicht bestätigen, dass der neue Code funktioniert.

Hallo Doshur,

Noch keine Antwort vom ServiceDesk. Aber Ihr Problem "beunruhigt" mich Können Sie bestätigen, dass Sie dieses Problem der doppelten Trades auf einem echten Konto und nicht auf einem Demokonto haben? (Ich kann dieses Problem auf meinem Demokonto nicht reproduzieren).

Auch durch die Überprüfung noch einmal Ihre Beiträge, bemerke ich jetzt dieses Protokoll :

Forum über Handel, automatisierte Handelssysteme und das Testen von Handelsstrategien

Mein EA macht einen doppelten Eintrag

(based on order #40018327) DEAL2 - Entry 3

2013.12.20 08:35:01 Trades '800****': exchange buy 0.01 EURUSD at market placed for execution in 331 ms DEAL2- Entry 2

2013.12.20 08:35:01 Trades '800****': deal #27731691 buy 0.01 EURUSD at 1.36353 done (based on order #40018326) DEAL 1 - Entry 3

2013.12.20 08:35:00 Trades '800****': exchange buy 0.01 EURUSD at market DEAL2 - Eintrag 1

2013.12.20 08:35:00 Trades '800****': exchange buy 0.01 EURUSD at market placed for execution in 313 ms DEAL1 - Entry 2

2013.12.20 08:35:00 Trades '800****': Börsenkauf 0,01 EURUSD am Markt DEAL1- Eintrag 1

Wenn ich das richtig verstehe, bestätigt es, dass das Problem darin besteht, dass PositionSelect() immer noch falsch ist, während eine neue Position eröffnet wird. In der Tat kann man sehen, dass 1 Handel zu 3 Einträgen führt, und der zweite Handel wird eingeleitet, bevor der dritte Eintrag für Handel 1 eintrifft (Bestätigung des neuen Handels/der neuen Position).

Über die Abhilfe mit Sleep() Funktion, ich bin nicht zufrieden mit diesem, da es keine Möglichkeit zu wissen, welche Verzögerung zu verwenden. Je größer die Verzögerung ist, desto geringer ist die Chance auf einen "doppelten Handel", aber dennoch ist es möglich. Ich bin also immer noch auf der Suche nach einer besseren Lösung.


 
angevoyageur:

Über die Umgehung mit Sleep() Funktion, ich bin nicht zufrieden mit diesem, da es keine Möglichkeit zu wissen, welche Verzögerung zu verwenden. Natürlich mehr diese Verzögerung ist groß, weniger ist die Chance, einen "doppelten Handel" zu erhalten, aber immer noch ist es möglich. Ich bin also immer noch auf der Suche nach einer besseren Lösung.

Sorry, wenn ich falsch bin, wie ich gerade hier in diesem Thema angekommen, aber sieht aus wie dieser Code könnte eine bessere Abhilfe als nur Sleep(), und würde helfen, das Problem und die wirkliche notwendige Verzögerung Wert identifizieren:

bool fatalError=false; // atention: declare this as global

....

if (fatalError==false) {
  if (m_Trade.PositionOpen(Symbol(), ORDER_TYPE_BUY, LotSize, Price, 0, 0)) {
    Print("Position opened in ", Symbol());
    int maxTimeout=0;
    while (!PositionSelect(Symbol())) {
       Sleep(100);
       maxTimeout++;
       if (maxTimeout>100) {
          Print("### PositionSelect fatal error!");
          fatalError=true;
          break;
       }
    }
    Print("--> PositionSelect delay=",maxTimeout*100);
    break;
  }
}
 
angevoyageur:

Hallo Doshur,

Noch keine Antwort vom ServiceDesk. Ihr Problem beunruhigt mich jedoch. Können Sie bestätigen, dass Sie dieses Problem der doppelten Trades auf einem echten Konto und nicht auf einem Demokonto haben? (Ich kann dieses Problem auf meinem Demokonto nicht reproduzieren).

Auch durch die Überprüfung noch einmal Ihre Beiträge, bemerke ich jetzt dieses Protokoll :

Wenn ich es richtig verstehe, bestätigt es, dass das Problem darin besteht, dass PositionSelect() noch falsch ist, während eine neue Position eröffnet wird. In der Tat kann man sehen, dass 1 Handel zu 3 Einträgen führt, und der zweite Handel wird eingeleitet, bevor der dritte Eintrag für Handel 1 eintrifft (Bestätigung des neuen Handels/der neuen Position).

Was die Umgehung mit der Funktion Sleep() betrifft, so bin ich damit nicht zufrieden, da es keine Möglichkeit gibt, die zu verwendende Verzögerung zu bestimmen. Je größer die Verzögerung ist, desto geringer ist die Chance, einen "doppelten Handel" zu erhalten, aber es ist trotzdem möglich. Ich bin also immer noch auf der Suche nach einer besseren Lösung.


Ja, ich verwende ein echtes Konto.
Ein weiteres Geschäft ist abgeschlossen. Keine doppelte Eingabe. Vielleicht funktioniert mein neuer Code?
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Environment State / Account Properties - Documentation on MQL5
 
figurelli:

Tut mir leid, wenn ich falsch liege, da ich gerade erst in diesem Thema gelandet bin, aber es sieht so aus, als ob dieser Code eine bessere Abhilfe als Sleep() sein könnte und helfen würde, das Problem und den wirklich notwendigen Verzögerungswert zu identifizieren:

Interessante Idee. Ich werde sie verwenden, um das Problem zu identifizieren, aber ich mag die Sleep()-Funktion nicht Obwohl es jedem freisteht, seine Lösung zu wählen.

Vielen Dank!

Documentation on MQL5: Common Functions / Sleep
Documentation on MQL5: Common Functions / Sleep
  • www.mql5.com
Common Functions / Sleep - Documentation on MQL5
 
angevoyageur:

Interessante Idee. Ich werde sie nutzen, um das Problem zu identifizieren, aber ich mag die Sleep()-Funktion nicht, obwohl es jedem freisteht, seine Lösung zu wählen.

Ich danke Ihnen.

Gern geschehen, diese Lösung ist nur ein Workaround, ich mag Sleep auch nicht, da man Ticks verliert. Wahrscheinlich wären Semaphore/Flags oder sogar Zustandsautomaten sicherer/effizienter/eleganter.
 
figurelli:
Sie sind willkommen, diese Lösung ist nur ein Workaround, ich mag nicht Sleep auch, da Sie Ticks verlieren. Wahrscheinlich wären Semaphore/Flags oder sogar Zustandsautomaten sicherer/effizienter/eleganter.
Meine Tests mit Ihrer Lösung zeigen, dass PositionSelect() manchmal direkt nach PositionOpen (maxcount=0) wahr ist, oder falsch (maxcount=1). Es gibt also offensichtlich eine Verzögerung. Es wäre interessant, wenn jemand dies an einem echten Konto testen könnte.
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Environment State / Account Properties - Documentation on MQL5
Grund der Beschwerde: