多仓位时,如何安全准确全部平仓
背景:很多同学喜欢for(int i =0;i <ordersTotal();i++)这样循环读取所有持仓单 并OrderSelect选择后 执行OrderClose或OrderDelete平仓。
其实这样是错误的!
原因:
当多个持仓单的时候,排列序号是 0 1 23 。。。。。这样子。
i=0时 执行了出场动作后,原来 1 2 3位置的订单序号就变成了0 1 2了
这时候按i去循环已近不是想象中的那个位置的序号持仓单。
所以当执行到最后还剩1个持仓单时,i肯定是大于0的,而这时最后持仓单的序号是0
就出现无法平仓的情况。
针对这种问题有以下两种解决办法,供大家参考:
1、循环改成
[*]for(int i=ordersTotal-1;i>=0;i--)</font>
复制代码
这样先平仓的持仓单序号都是从高往低,与i的递增顺序一致,可以正确执行
2、可以先用for循环,读取所有持仓单的Ticket存入一个数组,然后再次用for循环
使用OrderSelect+Ticket的方式 可以正确选择,并执行平仓。
谢谢分享 支持你加分 EA要好! 顶的就是你 不看白不看,看也不白看 真是佩服得六体投地啊 我帮你 喝喝 终于看完了~~~