Stop-Auslöser im OnTradeTransaction-Backtest erkennen

 

Hallo,

ich versuche, einen Ausführungsstopp in meinem EA zu erkennen. Leider erhalte ich nurDEAL_ENTRY_IN, das von MqlTradeTransaction an OnTradeTransaction übergeben wird.

Dies scheint nur im Backtest der Fall zu sein.

Weiß jemand, wie man einen ausgelösten Stop im Backtest zuverlässig erkennt - am besten zusammen mit Preis und (Teil-) Gewinn ?

Dankeschön

Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties - Documentation on MQL5
 
chinaski:

Hallo,

ich versuche, einen Ausführungsstopp in meinem EA zu erkennen. Leider erhalte ich nurDEAL_ENTRY_IN, das von MqlTradeTransaction an OnTradeTransaction übergeben wird.

Dies scheint nur im Backtest der Fall zu sein.

Weiß jemand, wie man einen ausgelösten Stop im Backtest zuverlässig erkennt- am besten zusammen mit Preis und (Teil-) Gewinn ?

Vielen Dank!

In OnTradeTransaction muss man prüfen auf :

trans.order_state = ORDER_STATE_PLACED;

Gefolgt von einer weiteren Transaktion mit :

trans.type = TRADE_TRANSACTION_DEAL_ADD;
 
angevoyageur:

In OnTradeTransaction müssen Sie prüfen, ob :

Gefolgt von einer weiteren Transaktion mit :

Hallo Angevoyageur,

bitte werfen Sie einen Blick auf meinen Dump. Dieser Dump druckt ALLE Transaktionen in eine Datei. Mein EA ist sehr einfach. Er kauft oder verkauft zusammen mit Stop und Ziel. Leider kann ich keine Transaktionen im Log finden, die

die mit einem ausgelösten Stop oder Target zusammenhängen:

20130507 00:26:59:672 entry short at 1.32176 <- entry short
20130507 00:26:59:672 symbol=EURUSD price=1.3217600 volume=0.01 sl=1.3229200 tp=1.3202000 order=2 deal=2 entry-type=IN trans-type=DEAL_ADD order_type=BUY deal_type=DEAL_TYPE_SELL type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:672 symbol=EURUSD price=1.3217600 volume=0.01 sl=1.3229200 tp=1.3202000 order=2 deal=0 entry-type=IN trans-type=ORDER_DELETE order_type=SELL deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:672 symbol=EURUSD price=1.3217600 volume=0.00 sl=1.3229200 tp=1.3202000 order=2 deal=0 entry-type=IN trans-type=HISTORY_ADD order_type=SELL deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:672 symbol= price=0.0000000 volume=0.00 sl=0.0000000 tp=0.0000000 order=0 deal=0 entry-type=IN trans-type=REQUEST order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00

/// before the entry long, the stop or target of entry short should be triggerd.
/// The EA does not allow to enter new trade before latest is closed, simply by check current positions for symbol before open an entry tradde.

20130507 00:26:59:674 entry long at 1.32140 <- entry long
20130507 00:26:59:674 symbol=EURUSD price=1.3214000 volume=0.01 sl=1.3200900 tp=1.3231100 order=3 deal=3 entry-type=IN trans-type=DEAL_ADD order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:674 symbol=EURUSD price=1.3214000 volume=0.01 sl=1.3200900 tp=1.3231100 order=3 deal=0 entry-type=IN trans-type=ORDER_DELETE order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:674 symbol=EURUSD price=1.3214000 volume=0.00 sl=1.3200900 tp=1.3231100 order=3 deal=0 entry-type=IN trans-type=HISTORY_ADD order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:674 symbol= price=0.0000000 volume=0.00 sl=0.0000000 tp=0.0000000 order=0 deal=0 entry-type=IN trans-type=REQUEST order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00

/// As you can see, my entry short shows transaction BUY, SELL, SELL what ever the purpose of this confusing transactions is.
/// No a bit about stop or target orders

Wie bekomme ich also die Transaktionen von Stop und Target? Ich spreche hier von Backtest. Ich bin mir nicht sicher, ob dies auch unter Live-Bedingungen der Fall ist.

 
chinaski:

Hallo Angevoyageur,

bitte werfen Sie einen Blick auf meinen Dump. Dieser Dump druckt ALLE Transaktionen in eine Datei. Mein EA ist sehr einfach. Er kauft oder verkauft mit Stop und Target. Leider kann ich keine Transaktionen im Log finden, die

die mit einem ausgelösten Stop oder Target zusammenhängen:

Wie bekomme ich also die Transaktionen von Stop und Target? Ich spreche hier von Backtest. Ich bin mir nicht sicher, ob dies auch unter Live-Bedingungen der Fall ist.

Ok, tut mir leid, dass ich Ihre erste Frage missverstanden habe. Ich dachte an einen schwebenden Auftrag (Kauf- oder Verkaufsstopp), als Sie "ausgelöster Stopp" sagten.

Sind Sie sicher, dass Sie die Transaktionen überwachen müssen? Wenn Sie jeweils nur ein Geschäft platzieren, können Sie Ihre geöffnete Position einfach mit PositionSelect(_Symbol) überprüfen.

 
angevoyageur:

Ok, tut mir leid, dass ich Ihre erste Frage missverstanden habe, ich dachte an einen schwebenden Auftrag (Kaufstopp oder Verkaufsstopp), als Sie "ausgelöster Stopp" sagten.

Sind Sie sicher, dass Sie eine Transaktion überwachen müssen? Wenn Sie jeweils nur einen Handel platzieren, können Sie Ihre offene Position einfach mit PositionSelect(_Symbol) überprüfen.

Hallo,

um zu prüfen, ob eine Position offen ist oder nicht, mache ich dies bereits.CPositionInfo.Select.

Aber wie bekommt man den ausgeführten Stop oder Zielpreis, wenn ein Stop oder Ziel ausgelöst wurde ? Gibt es eine intelligente Methode?

 
chinaski:

Hallo,

um zu prüfen, ob eine Position offen ist oder nicht, mache ich dies bereits.CPositionInfo.Select.

Aber wie bekomme ich den ausgeführten Stop- oder Zielkurs, wenn ein Stop oder Ziel ausgelöst wurde ? Gibt es eine intelligente Methode ?

Warum nicht den Geschäftsverlauf prüfen?
 
angevoyageur:
Warum überprüfen Sie nicht die Geschäftshistorie?

Können Sie bitte mehr Details angeben. Ich benötige den ausgeführten Stop- oder Zielkurs. Ich habe keine Deal-ID oder kein Ticket für das ausgelöste Ziel oder den Stopp (nicht als Transaktion übergeben).

Die Historie liefertDEAL_PRICE, aber ich brauche eine Geschäftsnummer oder ein Ticket. Welches Ticket oder Geschäft soll ich nehmen? Ichdanke Ihnen.

Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties - Documentation on MQL5
 
chinaski:

Können Sie bitte mehr Details nennen. Ich benötige den ausgeführten Stop- oder Zielkurs. Ich habe keine Deal-ID oder kein Ticket für das ausgelöste Ziel oder den Stopp (nicht als Transaktion übergeben).

Die Historie liefertDEAL_PRICE, aber ich brauche eine Geschäftsnummer oder ein Ticket. Welches Ticket oder Geschäft soll ich nehmen? Vielen Dank!

Wenn ein Sl oder Tp ausgelöst wird, wird ein Geschäft mit der Gegenseite Ihres Handels hinzugefügt. Ein Beispiel: Sie haben eine offene Position von BUY 0,25 Lots. Wenn Ihr Sl/Tp ausgelöst wird, haben Sie ein Geschäft des Typs SELL. Sie können OnTradeTransaction verwenden, um dies zu überwachen, oder einfach den Verlauf der Geschäfte überprüfen, sobald Sie wissen, dass Ihre Position geschlossen ist.

Sehen Sie sich das Code-Beispiel hier an.

 
angevoyageur:

Wenn ein Sl oder Tp ausgelöst wird, haben Sie ein Geschäft mit der Gegenseite Ihres Handels hinzugefügt. Ein Beispiel: Sie haben eine offene Position von BUY 0,25 Lots. Wenn Ihr sl/tp ausgelöst wird, haben Sie ein Geschäft des Typs SELL. Sie können OnTradeTransaction verwenden, um das zu überwachen, oder einfach die Historie der Geschäfte überprüfen, sobald Sie wissen, dass Ihre Position geschlossen ist.

Siehe das Codebeispiel hier.

Hallo angev,

das ist mein Problem: Offensichtlich kann ich OnTradeTransaction nicht verwenden. Bitte sieh dir meine Logs oben an. Dort ist keine Stop- oder Target-Order aufgeführt - also KEIN Geschäft, das mit einem Stop oder Target zusammenhängt. Der Dump wird für JEDE Transaktion erstellt, die an OnTradeTransaction übergeben wird.

Auch hier spreche ich von Backtest.

 
chinaski:

Hallo angev,

dies ist mein Problem: offensichtlich kann ich OnTradeTransaction nicht verwenden. Bitte sehen Sie sich meine Logs oben an. Dort ist keine Stop- oder Target-Order aufgeführt - also KEIN Geschäft, das mit einem Stop oder Target zusammenhängt. Der Dump wird für JEDE Transaktion erstellt, die an OnTradeTransaction übergeben wird.

Auch hier spreche ich von Backtest.

Das Einzige, was ich tun kann, ist, Ihren Code zu testen, wenn Sie ihn zur Verfügung stellen. Ich habe ein solches Problem nicht.
 
angevoyageur:
Das Einzige, was ich tun kann, ist, Ihren Code zu testen, wenn Sie ihn zur Verfügung stellen. Ich habe ein solches Problem nicht.

Hallo angevoyageur,

im Anhang finden Sie einen einfachen EA, der das Problem demonstriert. Der EA eröffnet long mit Stop und Target, dann short, dann long und so weiter.

Eine Dump-Methode ist ebenfalls enthalten. Wenden Sie einfach EUR.USD 1 Minute 1 Woche an und beobachten Sie die Transaktionsdumps im Backtest-Log.

Vielen Dank für Ihre Hilfe.

Dateien:
tc_ea_trans.mq5  11 kb