大地 发表于 2012-11-19 09:06:44

多仓位时,如何安全准确全部平仓

背景:
很多同学喜欢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的方式 可以正确选择,并执行平仓。

360 发表于 2012-11-19 12:51:45

谢谢分享

曾先生 发表于 2012-11-22 00:05:51

支持你加分

baoshan2007 发表于 2012-11-22 00:05:51

EA要好!

阳光小虾 发表于 2012-11-22 00:05:51

顶的就是你

汇眼识金 发表于 2012-11-22 00:05:51

不看白不看,看也不白看

2641318963 发表于 2012-11-22 00:05:51

真是佩服得六体投地啊

combo18 发表于 2012-11-22 00:05:51

我帮你 喝喝

why9250 发表于 2012-11-22 00:05:51

终于看完了~~~

trend 发表于 2015-1-24 22:26:20

页: [1] 2 3
查看完整版本: 多仓位时,如何安全准确全部平仓