在交易中,当止损被触发时,交易的手数会翻倍;而当止盈触发时,则会使用最小手数。可以通过 OnTradeTransaction 函数来判断交易是因止损还是止盈而执行的。
在 1625版本 中,新增了一个非常实用的枚举 ENUM_DEAL_REASON:
| ENUM_DEAL_REASON | 原因描述 |
|---|---|
| ... | ... |
| DEAL_REASON_SL | 该操作是由于止损被触发而执行的 |
| DEAL_REASON_TP | 该操作是由于止盈被触发而执行的 |
| ... | ... |
我们可以在 OnTradeTransaction 中进行检查。
换句话说,这是一种非常简单且可靠的方法,能够判断一笔交易是由于止损还是止盈而产生的。
目前(1626版本),这个专家顾问只能在实时测试中进行检查——通过在图表上运行它,或者在真实数据下以调试模式启动(在MetaEditor中按F5)。我使用了以下的变通方法:
在 OnTradeTransaction 中,我们可以判断是止盈还是止损触发:
if(deal_symbol==m_symbol.Name() && deal_magic==m_magic) if(deal_entry==DEAL_ENTRY_OUT) { if(deal_reason==DEAL_REASON_SL) ExtLot*=2.0; elseif(deal_reason==DEAL_REASON_TP) ExtLot=m_symbol.LotsMin(); }

评论 0