嗨嗨!
当 Order 无论任何因素, 在 Broker Side (券商方) 发生了变动, 除非我们主动侦测,
基本上不会知道的
关于这个部分, 技术实作上的一些内容可以和你分享
首先, 关于你的程式有两个部分, 我建议你可能可以改一下写法
(1) OrdersTotal() == ordersTotal-1
首先, 因为你的单可能一次关到 2 个, 所以这个逻辑可能会没有触发, 但是发生你要的
情况
这样你就会漏, 会很危险, 如果你只是在回测环境想测试一下想法, 没有问题
但记得上线的话, 这个会很危险, 甚至说你之后在这样的程式码上继续扩展, 可能久远之
后你忘记了
之后要抓程式的错误也会不容易
(2) tickPrice == sl / tp
也是一样, sl / tp 不一定会刚好在你要的价位, 基本上 90% 应该会是, 毕竟是在
Broker Side 执行
但是还是有可能会滑到, 所以这部分要小心, 这两个 "==" 都要留意
关于怎么侦测, 我推荐的做法是, 用 Magic Number, 使用 Magic Number 的有两派
第一派是倾向同一个 EA 档案 Magic Number 就固定, 第二个是根据 Order 状况可以写
不同的 Magic Number
我是属于后者, 所以我可能会每次进场会有一个 EA 主序号例如 10000
这个进场的 Magic Number 会是 10001, 10002 依此类推, 如果 10001 关掉, 下个单就
会回来用 10001
方便追踪现在这个 EA 开了多少个进场
追踪方式就是每次把 Magic Number 拿回来, 如果找不到, 就代表他已经被触发 sl / tp
这时候怎么判断, 我会去 History Orders 中找, 然后从最后面往前找, 看他的
OrderClosePrice()
如果 OrderClosePrice 是关在 sl 就是 sl / 关在 tp 就是 tp
如果你能取得 OrderType (例如如果是 OP_BUY)你可以考虑用
OrderClosePrice()<=sl 来判断是否触发 sl
而不是用等于, 当然这还是有漏洞, 他可能成交在 sl 之上, 但机率非常非常低
要记得一件事情, sl 或 tp 基本上是代表价格到那个地方他帮你用市价单进场平仓
所以不代表在逻辑上一定会停在 sl 和 tp 的价格, 所以如果你想判断他是 sl 或 tp
然后再用这个逻辑做其他事, 我会建议你把它消化, 改成价格走到这个单进场多少大小,
去触发逻辑, 而不是依赖 sl tp
和你分享 ~~