Détecter le déclenchement du stop dans le backtest OnTradeTransaction

 

Bonjour,

J'essaie de détecter un stop d'exécution dans mon EA. Malheureusement, je n'obtiens queDEAL_ENTRY_IN fourni par MqlTradeTransaction passé à OnTradeTransaction.

Cela semble être le cas uniquement dans le backtest.

Quelqu'un sait-il comment détecter de manière fiable un stop déclenché dans le backtest - au mieux avec le prix et le profit (partiel) ?

Merci pour votre aide.

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:

Bonjour,

J'essaie de détecter un stop d'exécution dans mon EA. Malheureusement, je n'obtiens queDEAL_ENTRY_IN fourni par MqlTradeTransaction passé à OnTradeTransaction.

Cela semble être le cas uniquement dans le backtest.

Quelqu'un sait-il comment détecter de manière fiable un stop déclenché dans le backtest - au mieux avec le prix et le profit (partiel) ?

Je vous remercie.

Dans OnTradeTransaction, vous devez vérifier si :

trans.order_state = ORDER_STATE_PLACED;

Suivi d'une autre transaction avec :

trans.type = TRADE_TRANSACTION_DEAL_ADD;
 
angevoyageur:

Dans OnTradeTransaction, vous devez vérifier si :

Suivi d'une autre transaction avec :

Bonjour Angevoyageur,

Je vous invite à jeter un coup d'oeil à mon dump. Ce dump imprime TOUTES les transactions dans un fichier. Mon EA est très simple. Il achète ou vend avec un stop et une cible. Malheureusement, je ne peux pas trouver de transactions dans le journal, qui

qui sont liées au déclenchement du stop ou de la cible :

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

Alors, comment obtenir les transactions du stop et de la cible ? Je parle ici de backtest. Je ne suis pas sûr que ce soit également le cas dans des conditions réelles.

 
chinaski:

Bonjour Angevoyageur,

Jetez un coup d'oeil à mon dump. Ce dump imprime TOUTES les transactions dans un fichier. Mon EA est très simple. Il achète ou vend avec un stop et une cible. Malheureusement, je ne peux pas trouver de transactions dans le journal, qui

qui sont liées au déclenchement du stop ou de la cible :

Alors, comment obtenir les transactions du stop et de la cible ? Je parle ici de backtest. Je ne suis pas sûr que ce soit également le cas dans des conditions réelles.

Ok, désolé d'avoir mal compris votre première question, je pensais à un ordre en attente (stop d'achat ou stop de vente) quand vous avez dit "stop déclenché".

Êtes-vous sûr d'avoir besoin de surveiller les transactions ? Si vous ne placez qu'une seule transaction à la fois, vous pouvez simplement vérifier votre position ouverte avec PositionSelect(_Symbol).

 
angevoyageur:

Ok, désolé j'ai mal compris votre première question, je pensais à un ordre en attente (stop d'achat ou stop de vente) quand vous avez dit "stop déclenché".

Etes-vous sûr d'avoir besoin de surveiller les transactions ? Si vous ne placez qu'une seule transaction à la fois, vous pouvez simplement vérifier votre position ouverte avec PositionSelect(_Symbol).

Bonjour,

Afin de vérifier si une position est ouverte ou non, je fais déjà ceci : CPositionInfo.Select.

Mais comment obtenir le prix du stop ou de l'objectif exécuté, une fois qu'un stop ou un objectif a été déclenché ? Existe-t-il une méthode intelligente ?

 
chinaski:

Bonjour,

Afin de vérifier si une position est ouverte ou non, je fais déjà ceci : CPositionInfo.Select.

Mais comment obtenir le prix du stop ou de l'objectif exécuté, une fois qu'un stop ou un objectif a été déclenché ? Existe-t-il une méthode intelligente ?

Pourquoi ne pas vérifier l'historique des transactions ?
 
angevoyageur:
Pourquoi ne pas vérifier l'historique des transactions ?

Pouvez-vous donner plus de détails s'il vous plaît. J'ai besoin du stop ou du prix cible exécuté. Je n'ai pas d'identifiant de transaction ou de ticket pour le déclenchement de l'objectif ou du stop (non transmis comme transaction).

L'historique fournitDEAL_PRICE mais j'ai besoin d'un numéro de transaction ou d'un ticket. Quel ticket ou transaction prendre ? Je vous remercie.

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:

Pouvez-vous donner plus de détails s'il vous plaît. J'ai besoin du stop ou du prix cible exécuté. Je n'ai pas d'identifiant de transaction ou de ticket pour le déclenchement de l'objectif ou du stop (non transmis comme transaction).

L'historique fournitDEAL_PRICE mais j'ai besoin d'un numéro de transaction ou d'un ticket. Quel ticket ou transaction prendre ? Merci.

Lorsqu'un sl ou un tp est déclenché, vous avez une transaction ajoutée avec le côté opposé de votre transaction. Par exemple, vous avez une position ouverte de BUY 0.25 lots. Lorsque votre sl/tp est déclenché, vous aurez une transaction de type SELL, vous pouvez utiliser OnTradeTransaction pour surveiller cela ou simplement vérifier l'historique des transactions une fois que vous savez que votre position est fermée.

Voir l'exemple de code ici.

 
angevoyageur:

Lorsqu'un sl ou tp est déclenché, vous avez une transaction ajoutée avec le côté opposé de votre trade. Par exemple, vous avez une position ouverte de BUY 0.25 lots. Lorsque votre sl/tp est déclenché, vous aurez une transaction de type SELL, vous pouvez utiliser OnTradeTransaction pour surveiller cela ou simplement vérifier l'historique des transactions une fois que vous savez que votre position est fermée.

Voir l'exemple de code ici.

Bonjour angev,

Voici mon problème : je ne peux évidemment pas utiliser OnTradeTransaction. Veuillez voir mes logs ci-dessus. Aucun ordre stop ou cible n'y figure - donc AUCUNE transaction liée à un stop ou une cible n'a été exécutée. Le dump est créé pour CHAQUE transaction passée à OnTradeTransaction.

Encore une fois, je parle de backtest.

 
chinaski:

Bonjour angev,

Voici mon problème : il est évident que je ne peux pas utiliser OnTradeTransaction. Veuillez voir mes logs ci-dessus. Aucun ordre stop ou cible n'y figure - donc AUCUNE transaction liée à un stop ou une cible n'a été exécutée Le dump est créé pour CHAQUE transaction passée à OnTradeTransaction.

Encore une fois, je parle de backtest.

La seule chose que je puisse faire est de tester votre code si vous le fournissez. Je n'ai pas ce genre de problème.
 
angevoyageur:
La seule chose que je puisse faire est de tester votre code si vous le fournissez. Je n'ai pas ce genre de problème.

Bonjour angevoyageur,

Je trouve ci-joint un EA simple qui démontre le problème. L'EA s'ouvre long avec stop et cible puis court, puis long et ainsi de suite.

Une méthode de dump est également contenue. Il suffit d'appliquer EUR.USD 1 minute 1 semaine et de regarder les dumps de transaction dans le journal de backtest.

Merci pour votre aide.

Dossiers :
tc_ea_trans.mq5  11 kb
Raison: