关于历史订单排序的问题

 

                  我在想一个网格类的ea,这类的ea须要单独计算盈亏进行累加。那么我想从历史订单中平掉的订单累加计算出当前的盈亏。我想知道有没有那位高手研究过历史订单排序的,请指教一下或者有这方面的文章推荐一下! 目前我的研究结果是:ea获取的历史订单顺序是固定的,按照下单先后的顺序排列!(我知道可以手动调节时间  止盈  获利 平仓时间这类的排列顺序,我说的是ea获取的排列顺序)!!!序号越大的开单时间越接近当前时间,最大值为空!!比如历史订单总数为32    那么从0开始排序31就是最后一张开单并平仓的订单。 32数值为空!!!但是有一个问题,历史订单数电脑上会变得,,订单多了或者星期一打开电脑订单数量会改变,比如 星期五停盘电脑关机历史订单总数为32,星期一就会变成0!我指的是电脑端,点击右键还是可以查询的,但ea不知道会不会识别出来,这也是我的困惑之一,,希望有经验的告知!

 

单子数32,最后一个的索引是31, 不存在32这个索引.

客户端的历史单会影响依赖历史单的数据的EA,所以只能把历史单设置位显示所有的历史单.

 
Xiliang Dong:

                  我在想一个网格类的ea,这类的ea须要单独计算盈亏进行累加。那么我想从历史订单中平掉的订单累加计算出当前的盈亏。我想知道有没有那位高手研究过历史订单排序的,请指教一下或者有这方面的文章推荐一下! 目前我的研究结果是:ea获取的历史订单顺序是固定的,按照下单先后的顺序排列!(我知道可以手动调节时间  止盈  获利 平仓时间这类的排列顺序,我说的是ea获取的排列顺序)!!!序号越大的开单时间越接近当前时间,最大值为空!!比如历史订单总数为32    那么从0开始排序31就是最后一张开单并平仓的订单。 32数值为空!!!但是有一个问题,历史订单数电脑上会变得,,订单多了或者星期一打开电脑订单数量会改变,比如 星期五停盘电脑关机历史订单总数为32,星期一就会变成0!我指的是电脑端,点击右键还是可以查询的,但ea不知道会不会识别出来,这也是我的困惑之一,,希望有经验的告知!

我的处理方式是;首先默认电脑终端的排序。摸清他的规律是,电脑上现有的排序不会变,是按照开单时间先后排序的,开单越晚序列号越大。最后一个序号为空,有入金的序号值也为空。。比如当前电脑上的历史订单序列号是32,OrdersHistoryTotal()获取的也是32个订单;0到31,那么最后一张订单的序列号就是31,可以读取开单时间,利润,平仓时间等各种数值,32是空值。。序列中要是中间有入金或出金会有一个单独的序列号(重点)***这个序列号比如是11。入金是100。那么这个序列号利润获取值就是:100.其他数值( 开单时间 , 平仓时间等 )都是空!!如果直接获取利润会加100的

有时星期一开盘会把电脑上所有历史订单清空,变成0!!!

我就利用电脑上现有的历史订单,,设一个变量记录最后平仓的订单号码(比如是31号订单的订单号码),如果历史订单数是0。(星期一电脑清零)。记录当前最后平仓的变量=零。。。。。我尝试过记录最后平仓订单的开单时间,但是不行,最后平仓的平仓时间没有毫秒,也就是说会有可能出现相同的两张一样平仓时间的订单会被漏掉

       如果历史订单数不是零是0。。循环一下订单找到变量里匹配的订单号码,,并获取订单的序列号(32),,然后循环检测是否有大于32的序号(重点***)并且是否有开单时间数值(入金或出金的序列号没有这个数值),,如果有获取利润并累加,,订单号和累加利润写入电脑单独文件夹,避免断电丢失,这里唯一的buy就是如果星期五出现断电停盘前没来电星期一又清零就没办法了,最后变量=最后一张平仓订单的订单号码,如此循环

不知道我说明白没有!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

其实,可以换一个思路。

一个帐号只做一个品种,一个EA管理一个帐号。

这样盈亏的问题,就简化成帐号的总盈亏了。

另一个方法是设置幻数,EA 在开仓时,将序号填入幻数中。

例子

多单序号从 1001 到 1999

空单序号从 3001 到 3999

更复杂的序号是高位代表商品种类,低四位代表序号

例子

561001 代表 黄金(56)多单(1)序号 001

563008  代表 黄金(56)空单(3)序号 008

 
关机怎么可能历史订单数量会改变,除非改变了登录账号,或者代码有问题