检测OnTradeTransaction回测中的止损触发器 - 页 3

 
angevoyageur:

我检查过了。当一个SL/TP被触发时,你有这些交易。

  1. TRADE_TRANSACTION_POSITION,设置了SL和TP(但还没有交易),然后
  2. 交易_交易_交易_添加

当做空时--从一个原始头寸开始,我得到3个交易。

A进入 )

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

关闭空头,按止损或目标,第一笔反映交易

entry-type=IN trans-type=DEAL_ADD order_type=BUY sl=0.0 tp=0.0

这很令人困惑。它应该是。

open short:

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

关闭空头。

entry-type=OUT trans-type=DEAL_ADD order_type=BUY sl=0.0 tp=0.0

angevoyageur:

我检查过了。当一个SL/TP被触发时,你有这些交易:

  1. TRADE_TRANSACTION_POSITION,设置了SL和TP(但还没有交易),然后
  2. 交易_交易_交易_添加
 
chinaski:

当做空时--从一个原始头寸开始,我得到3个交易。

A进入 )

一旦止损 被触发,我得到

B 退出 )

没有TRADE_TRANSACTION_POSITION。我认为你不能在这里使用它

...

你错过了一些交易,不知道为什么。因为回溯测试?

 

小小的离题,代替了:

ORDER_TYPE_to_string(t.order_type)

你可以用:

EnumToString(t.order_type)


 
angevoyageur:

小小的离题,代替了:

你可以使用:


谢谢你的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

好的,谢谢你的信息。所以我知道要把它纳入我的考虑范围
 

你好,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在1.27349买入0.01 EURUSD] 。

但是没有结构、交易、交易或订单历史提供这个价格。

这一行转储了与触发的止损有关的交易。

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。