OnTradeTransactionバックテストでのストップトリガーの検出 - ページ 3

 
angevoyageur:

確認しました。SL/TPがトリガーされると、このようなトランザクションが発生します。

  1. TRADE_TRANSACTION_POSITIONでSLとTPが設定されている(ただし、まだ取引は行われていない)、次に
  2. トレード_トランザクション_ディール_追加

処女ポジションからショートをする場合、3つのトランザクションが発生します。

エントリー)

20130507 21:52:28:943 entry short at 1.31060 time=2013.01.10 11:43

20130507 21:52:28:943 symbol=EURUSD price=1.3106000 volume=0.01 sl=1.3119000 tp=1.3088000 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 21:52:28:943 symbol=EURUSD price=1.3106000 volume=0.01 sl=1.3119000 tp=1.3088000 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 21:52:28:943 symbol=EURUSD price=1.3106000 volume=0.00 sl=1.3119000 tp=1.3088000 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

ストップ・ロスが 発動されると、次のようになります。

B 終了)

20130507 21:52:28:945 symbol=EURUSD price=1.3119000 volume=0.01 sl=0.0000000 tp=0.0000000 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

TRADE_TRANSACTION_POSITIONが ない。ここでは使えないと思います。

概要

ショートがオープンされ、最初のトランザクションは

entry-type=IN trans-type=DEAL_ADD order_type=BUYsl=1.3119000 tp=1.3088000

ショートをクローズ、ストップまたはターゲットで、最初の取引は反映された取引

エントリータイプ=IN トランスタイプ=DEAL_ADD オーダータイプ=BUY sl=0.0 tp=0.0

これは紛らわしいですね。となるはずです。

オープンショート

entry-type=IN trans-type=DEAL_ADD order_type=SELLsl=1.3119000 tp=1.3088000

ショートをクローズします。

エントリータイプ=OUT trans-type=DEAL_ADD order_type=BUY sl=0.0 tp=0.0

angevoyageur:

確認しました。SL/TPがトリガーされると、このようなトランザクションが発生します。

  1. SLとTPが設定されたTRADE_TRANSACTION_POSITION(ただし、まだ取引は行われていない)、次に
  2. TRADE_TRANSACTION_DEAL_ADD
 
chinaski:

処女ポジションから空売りをする場合、3つのトランザクションが発生します。

エントリー)

ストップ・ロスが 発動されると、次のようになります。

B exit )

TRADE_TRANSACTION_POSITIONがないここでは 使えないと思います。

...

いくつかの取引を見逃している、なぜかわからない。バックテストが原因?

 

少し余談ですが、intead of :

ORDER_TYPE_to_string(t.order_type)

を使用することができます。

EnumToString(t.order_type)


 
angevoyageur:

少し余談ですが、intead of :

を使うことができます。


EnumToStringをありがとうございます.

そうですね、私の懸念はバックテストでの トランザクションについてです。しかし、可能な限りリアルにするために、取引は本番と同じであるべきです。

TRADE_TRANSACTION_POSITIONは、あなたが以前にも述べたように、取引とは関係ありません。例えば、口座のお金を移動させた時などに表示されると思います。

 
chinaski:

...

バックテスト時に利用できないトランザクションがあるようです。バグか バックテストの制限か。フォワードテストで実行すると、SL/TPがトリガーされたときにTRADE_TRANSACTION_POSITIONが発生するのですが、これは何ですか?

2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    TRADE_TRANSACTION_ORDER_ADD
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    trans=symbol=EURUSD price=1.3170100 volume=0.01 sl=0.0000000 tp=0.0000000 order=19683612 deal=0 entry-type=IN trans-type=ORDER_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
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    TRADE_TRANSACTION_ORDER_DELETE
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    trans=symbol=EURUSD price=1.3170100 volume=0.01 sl=0.0000000 tp=0.0000000 order=19683612 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
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    TRADE_TRANSACTION_HISTORY_ADD
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    trans=symbol=EURUSD price=1.3170100 volume=0.00 sl=0.0000000 tp=0.0000000 order=19683612 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
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    TRADE_TRANSACTION_POSITION
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    trans=symbol=EURUSD price=1.3173500 volume=0.01 sl=1.3174200 tp=1.3170100 order=0 deal=0 entry-type=IN trans-type=POSITION order_type=BUY deal_type=DEAL_TYPE_SELL type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    TRADE_TRANSACTION_DEAL_ADD
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    trans=symbol=EURUSD price=1.3170100 volume=0.01 sl=0.0000000 tp=0.0000000 order=19683612 deal=16655372 entry-type=OUT 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.34

Get in touch with developers using Service Desk!
Get in touch with developers using Service Desk!
  • www.mql5.com
We therefore attach great importance to all user reports about issues in our programs and try to answer each one of them.
 
angevoyageur:

バックテスト時に利用できないトランザクションがあるようです。バグか バックテストの制限か。フォワードテストで実行すると、SL/TPがトリガーされたときにTRADE_TRANSACTION_POSITIONが発生するのですが、これは何ですか?

2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    TRADE_TRANSACTION_ORDER_ADD
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    trans=symbol=EURUSD price=1.3170100 volume=0.01 sl=0.0000000 tp=0.0000000 order=19683612 deal=0 entry-type=IN trans-type=ORDER_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
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    TRADE_TRANSACTION_ORDER_DELETE
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    trans=symbol=EURUSD price=1.3170100 volume=0.01 sl=0.0000000 tp=0.0000000 order=19683612 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
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    TRADE_TRANSACTION_HISTORY_ADD
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    trans=symbol=EURUSD price=1.3170100 volume=0.00 sl=0.0000000 tp=0.0000000 order=19683612 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
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    TRADE_TRANSACTION_POSITION
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    trans=symbol=EURUSD price=1.3173500 volume=0.01 sl=1.3174200 tp=1.3170100 order=0 deal=0 entry-type=IN trans-type=POSITION order_type=BUY deal_type=DEAL_TYPE_SELL type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    TRADE_TRANSACTION_DEAL_ADD
2013.05.08 19:20:29    tc_ea_trans (EURUSD,M1)    trans=symbol=EURUSD price=1.3170100 volume=0.01 sl=0.0000000 tp=0.0000000 order=19683612 deal=16655372 entry-type=OUT 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.34

OK、この情報をありがとうございました。それで、私はこれを私の検討に含めることを知っています。
 

こんにちは、angevoyageurさん。

バックテストでは、ストップやロスカットの約定値を取得するのに苦労しています。本番でどうなるかは今のところわかりません。

これはバックテストのログです。

KP      0       23:18:29        Core 1  2010.05.11 11:00:00   instant buy 0.01 EURUSD at 1.26882 (1.26871 / 1.26882 / 1.26871)
EM      0       23:18:29        Core 1  2010.05.11 11:00:00   deal #2  buy 0.01 EURUSD at 1.26882 done (based on order #2)
 MG      0       23:18:29        Core 1  2010.05.11 11:00:00   deal performed [#2  buy 0.01 EURUSD at 1.26882]
RI      0       23:18:29        Core 1  2010.05.11 11:00:00   order performed buy 0.01 at 1.26882 [#2  buy 0.01 EURUSD at 1.26882]
JS      0       23:18:29        Core 1  2010.05.11 11:00:00   CTrade::OrderSend: instant buy 0.01 EURUSD at 1.26882 [done at 1.26882]
LP      0       23:18:29        Core 1  2010.05.11 11:00:00   position modified [buy 0.01 EURUSD 1.26882 sl: 1.26809 tp: 1.27028]
LM      0       23:18:29        Core 1  2010.05.11 11:00:00   CTrade::OrderSend: modify EURUSD (sl: 1.26809, tp: 1.27028) [done]
LR      0       23:18:29        Core 1  2010.05.11 11:00:00   trans=symbol=EURUSD price=1.2688200 volume=0.01 sl=0.0000000 tp=0.0000000 order=2 deal=2 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 order-open=0.000000 order-current=0.000000 deal-price=0.000000
GG      0       23:18:29        Core 1  2010.05.11 11:18:40   take profit triggered buy 0.01 EURUSD 1.26882 sl: 1.26809 tp: 1.27028 [#3  sell 0.01 EURUSD at 1.27028]
MD      0       23:18:29        Core 1  2010.05.11 11:18:40   deal #3  sell 0.01 EURUSD at 1.27028 done (based on order #3)
 PI      0       23:18:29        Core 1  2010.05.11 11:18:40   deal performed [#3  sell 0.01 EURUSD at 1.27028]
NO      0       23:18:29        Core 1  2010.05.11 11:18:40   order performed sell 0.01 at 1.27028 [#3  sell 0.01 EURUSD at 1.27028]
RS      0       23:18:29        Core 1  2010.05.11 11:18:40   trans=symbol=EURUSD price=1.2702800 volume=0.01 sl=0.0000000 tp=0.0000000 order=3 deal=3 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 order-open=0.000000 order-current=0.000000 deal-price=0.000000
JM      0       23:18:29        Core 1  2010.05.20 09:00:00   ut =3.00 candle=o=1.24130 c=1.24170 h=1.24360 l=1.24100 b=39 uw=190 lw=29
FK      0       23:18:29        Core 1  2010.05.20 09:00:00   instant sell 0.01 EURUSD at 1.24180 (1.24180 / 1.24195 / 1.24180)
MG      0       23:18:29        Core 1  2010.05.20 09:00:00   deal #4  sell 0.01 EURUSD at 1.24180 done (based on order #4)
 IG      0       23:18:29        Core 1  2010.05.20 09:00:00   deal performed [#4  sell 0.01 EURUSD at 1.24180]
CN      0       23:18:29        Core 1  2010.05.20 09:00:00   order performed sell 0.01 at 1.24180 [#4  sell 0.01 EURUSD at 1.24180]
EO      0       23:18:29        Core 1  2010.05.20 09:00:00   CTrade::OrderSend: instant sell 0.01 EURUSD at 1.24180 [done at 1.24180]
EQ      0       23:18:29        Core 1  2010.05.20 09:00:00   position modified [sell 0.01 EURUSD 1.24180 sl: 1.24253 tp: 1.24034]
DO      0       23:18:29        Core 1  2010.05.20 09:00:00   CTrade::OrderSend: modify EURUSD (sl: 1.24253, tp: 1.24034) [done]
HI      0       23:18:29        Core 1  2010.05.20 09:00:00   trans=symbol=EURUSD price=1.2418000 volume=0.01 sl=0.0000000 tp=0.0000000 order=4 deal=4 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 order-open=0.000000 order-current=0.000000 deal-price=0.000000
JH      0       23:18:29        Core 1  2010.05.20 09:00:40   stop loss triggered sell 0.01 EURUSD 1.24180 sl: 1.24253 tp: 1.24034 [#5  buy 0.01 EURUSD at 1.24253]
HI      0       23:18:29        Core 1  2010.05.20 09:00:40   deal #5  buy 0.01 EURUSD at 1.24253 done (based on order #5)
 MK      0       23:18:29        Core 1  2010.05.20 09:00:40   deal performed [#5  buy 0.01 EURUSD at 1.24253]
NL      0       23:18:29        Core 1  2010.05.20 09:00:40   order performed buy 0.01 at 1.24253 [#5  buy 0.01 EURUSD at 1.24253]
KQ      0       23:18:29        Core 1  2010.05.20 09:00:40   trans=symbol=EURUSD price=1.2425300 volume=0.01 sl=0.0000000 tp=0.0000000 order=5 deal=5 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 order-open=0.000000 order-current=0.000000 deal-price=0.000000
PJ      0       23:18:30        Core 1  2010.08.26 09:08:00   ut =3.83 candle=o=1.27238 c=1.27274 h=1.27448 l=1.27238 b=35 uw=174 lw=0
IH      0       23:18:30        Core 1  2010.08.26 09:08:00   instant sell 0.01 EURUSD at 1.27276 (1.27276 / 1.27287 / 1.27276)
GH      0       23:18:30        Core 1  2010.08.26 09:08:00   deal #6  sell 0.01 EURUSD at 1.27276 done (based on order #6)
 MR      0       23:18:30        Core 1  2010.08.26 09:08:00   deal performed [#6  sell 0.01 EURUSD at 1.27276]
HR      0       23:18:30        Core 1  2010.08.26 09:08:00   order performed sell 0.01 at 1.27276 [#6  sell 0.01 EURUSD at 1.27276]
PR      0       23:18:30        Core 1  2010.08.26 09:08:00   CTrade::OrderSend: instant sell 0.01 EURUSD at 1.27276 [done at 1.27276]
FE      0       23:18:30        Core 1  2010.08.26 09:08:00   position modified [sell 0.01 EURUSD 1.27276 sl: 1.27349 tp: 1.27130]
LK      0       23:18:30        Core 1  2010.08.26 09:08:00   CTrade::OrderSend: modify EURUSD (sl: 1.27349, tp: 1.27130) [done]
NE      0       23:18:30        Core 1  2010.08.26 09:08:00   trans=symbol=EURUSD price=1.2727600 volume=0.01 sl=0.0000000 tp=0.0000000 order=6 deal=6 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 order-open=0.000000 order-current=0.000000 deal-price=0.000000
HM      0       23:18:30        Core 1  2010.08.26 09:08:40   stop loss triggered sell 0.01 EURUSD 1.27276 sl: 1.27349 tp: 1.27130 [#7  buy 0.01 EURUSD at 1.27349]

最後の行にあるように、約定価格はログに記載されています -> [#7 buy 0.01 EURUSD at 1.27349].

しかし、構造、取引、取引履歴、注文履歴には、この価格はありません。

この行は停止をトリガーした取引に関連するものをダンプしています。

NE      0       23:18:30        Core 1  2010.08.26 09:08:00   trans=symbol=EURUSD price=1.2727600 volume=0.01 sl=0.0000000 tp=0.0000000 order=6 deal=6 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 order-open=0.000000 order-current=0.000000 deal-price=0.000000

これはダンプ機能のコードです。

string dump_MqlTradeTransaction(const MqlTradeTransaction& t)
{
    //CDealInfo deal;
    //deal.Ticket(t.deal);
   if(t.deal > 0)
      HistoryDealSelect(t.deal);
   string msg=StringFormat("symbol=%s price=%.7f volume=%.2f sl=%.7f tp=%.7f order=%d deal=%d entry-type=%s trans-type=%s order_type=%s deal_type=%s type_time=%d expiration=%s price_trigger=%.7f profit=%.2f order-open=%.6f order-current=%.6f deal-price=%.6f"
                           
                           ,t.symbol
                           ,t.price
                           ,t.volume                           
                           ,t.price_sl
                           ,t.price_tp
                           ,t.order
                           ,t.deal           
                                                   ,tc_DEAL_ENTRY_to_string_short((ENUM_DEAL_ENTRY)HistoryDealGetInteger(t.deal,DEAL_ENTRY))                                          
                           ,tc_ENUM_TRADE_TRANSACTION_TYPE_to_string_short((ENUM_TRADE_TRANSACTION_TYPE) t.type)
                           ,tc_ORDER_TYPE_to_string(t.order_type)
                           ,tc_DEAL_TYPE_to_string(t.deal_type)
                           ,t.time_type
                           ,TimeToString(t.time_expiration)                           
                           ,t.price_trigger
                           ,HistoryDealGetDouble(t.deal,DEAL_PROFIT)
                                                        ,HistoryOrderGetDouble(t.order,ORDER_PRICE_OPEN)
                                                        ,HistoryOrderGetDouble(t.order,ORDER_PRICE_CURRENT)
                                                        ,HistoryDealGetDouble(t.deal,DEAL_PRICE)
                           );
                        
    return msg;
}

そこで、注文と取引履歴から執行価格を取得しようとしたのですが、結果が出ません。

 
chinaski:

angevoyageurさん、こんにちは。

...
ありがとうございます、私は早急にそれを勉強しに行きます。
 
angevoyageur:
ありがとうございます、早速勉強しに行きます。

これは本当に素敵なことです。急がないでください。

OnTradeTransactionに渡された各トランザクション、リクエスト、結果を確認しました。

バックテストログ(MetaTraderで作成)に記載されているトリガーされたストップロス価格は、sl価格以外では見つからず、価格や取引価格、執行価格では見つかりませんでした。

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:

これは本当に素敵なことです。急がないでください。

OnTradeTransactionに渡された各トランザクション、リクエスト、結果を確認しました。

バックテストログ(MetaTraderで作成)に記載されているトリガーされたストップロス価格は、sl価格以外では見つからず、価格や取引価格、執行価格では見つかりませんでした。

つまり、バックテストのみの話です。私は自分のコードでテストし、私はストップがトリガされたときに3つのトランザクションを取得しました。

2013.05.15 10:22:27    Core 1    2013.05.10 16:20:37   Symbol : EURUSD  event : TRADE_TRANSACTION_DEAL_ADD(6)
2013.05.15 10:22:27    Core 1    2013.05.10 16:20:37   Symbol : EURUSD  event : TRADE_TRANSACTION_ORDER_DELETE(2)
2013.05.15 10:22:27    Core 1    2013.05.10 16:20:37   Symbol : EURUSD  event : TRADE_TRANSACTION_HISTORY_ADD(3)

DEAL_ADDで取引価格を取得し、私の場合はSLを取得しました。すべて正しいようです。使用したコード、バックテストログ(ファイルとして)、ストラテジーテスターの設定のスクリーンショットを私に送ることを提案します。そうすれば、あなたと全く同じテストを再現し、その結果を分析することができます。もしご希望であれば、PMで送っていただいても結構です。