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

 
chinaski:

你好,angevoyageur。

我在附件中找到一个简单的EA,证明了这个问题。该EA开仓做多,并带有止损和目标,然后做空,再做多,如此循环。

也包含了一个抛售方法。只需应用EUR.USD 1分钟1周,观察回测日志中的交易转储。

谢谢你的帮助。

这里你的止损被触发了。

2013.05.03 16:52106欧元兑美元买入0.011.312401060.000.000.009 978.84
2013.05.03 18:35107欧元兑美元卖出出货0.011.310401070.000.00-2.009 976.84sl 1.31040

2013.05.07 18:45:27    Core 1    2013.05.03 18:35:40   trans=symbol=EURUSD price=1.3104000 volume=0.01 sl=0.0000000 tp=0.0000000 order=107 deal=107 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

 
angevoyageur:

在这里,你的止损被触发了。

2013.05.03 16:52106欧元兑美元买入0.011.312401060.000.000.009 978.84
2013.05.03 18:35107欧元兑美元卖出出货0.011.310401070.000.00-2.009 976.84sl 1.31040

2013.05.07 18:45:27    Core 1    2013.05.03 18:35:40   trans=symbol=EURUSD price=1.3104000 volume=0.01 sl=0.0000000 tp=0.0000000 order=107 deal=107 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

你好。

但这是entry-type=IN,不是out....

 
chinaski:

你好。

但这是entry-type=IN,而不是out....

也许吧,但这是你触发的滑动。永远不要虔诚地 相信 一个 程序告诉 东西;-)
 
angevoyageur:
也许吧,但这是你的sl触发的。永远不要虔诚地 相信 程序告诉 东西;-)

你是对的,另一方面,我怎么能知道我可以依靠sl=0.0和tp=0.0意味着这是止损或目标订单,而不是:sl和tp只是错过了(在交易结构中)?

 
chinaski:

你是对的,另一方面,我怎么能知道我可以依靠sl=0.0和tp=0.0意味着这是止损或目标订单,而不是:sl和tp只是错过了(在交易结构中)?

一个结构不可能有缺失的字段。这是关于交易的交易(DEAL_TYPE_SELL),交易不可能有SL/TP,这没有意义。SL(或TP)是一个订单(一种特殊的待定订单),当它被触发时,该订单会产生交易。你可以在OnTradeTransaction中检查所有这些。

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
 
angevoyageur:

一个结构不可能有缺失的字段。这是关于交易(DEAL_TYPE_SELL)的交易,一个交易不能有SL/TP,这没有意义。SL(或TP)是一个订单(一种特殊的挂单),当它被触发时,该订单会产生交易。你可以在OnTradeTransaction中检查所有这些。

当然,我不是指结构成员;我是指数值。
 
chinaski:
当然,我不是指结构成员;我是指价值。
所以呢? 有点让人困惑, 我还能 帮助
 
angevoyageur:
所以 有点令人困惑, 我还帮助你

是的,是一种帮助。什么叫混淆?我想知道是否总是得到ENTRY_IN。你说不要相信程序告诉我的东西。我说,你是对的,所以sl=0.0或tp=0.0(遗漏的值)也可能是服务器的错误--忘记写值。

对我来说,最重要的 是:用一种保存方法来确定什么交易是停止的。MT很好,但在许多方面令人困惑,没有做你通常期望的事情,比如在这种情况下。

你知道我的意思吗?

 
chinaski:

是的,是一种帮助。什么叫混淆?我想知道是否总是得到ENTRY_IN。你说不要相信程序告诉我的东西。我说,你是对的,所以sl=0.0或tp=0.0(遗漏的值)也可能是服务器的错误--忘记写值。

对我来说,最重要的是:用一种保存方法来确定什么交易是停止的。MT很好,但在许多方面令人困惑,没有做你通常期望的事情,比如在这种情况下。

你知道我的意思吗?

是我 感到困惑;-) 我阅读并 回应了 许多主题。我理解你所说的, 必须 能够改变 使用 MT4 习惯
 
chinaski:

是的,是一种帮助。什么叫混淆?我想知道是否总是得到ENTRY_IN。你说不要相信程序告诉我的东西。我说,你是对的,所以sl=0.0或tp=0.0(遗漏的值)也可能是服务器的错误--忘记写值。

对我来说,最重要的是:用一种保存方法来确定什么交易是停止的。MT很好,但在许多方面令人困惑,没有做你通常期望的事情,比如在这种情况下。

你知道我的意思吗?

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

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

贸易_交易_位置

改变一个与交易执行无关的头寸。这种类型的交易表明,在交易服务器端,一个头寸已经被改变。仓位数量、开仓价、止损和止盈水平可以被改变。 改变的数据通过OnTradeTransaction处理程序提交到MqlTradeTransaction 结构中。作为交易执行的结果,仓位变化(增加、改变或关闭)不会导致TRADE_TRANSACTION_POSITION交易的发生。