关于历史订单排序的问题!!!

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

但是有一个问题,历史订单数电脑上会变得,,订单多了或者星期一打开电脑订单数量会改变,比如 星期五……      这个不是问题。请看下图

关于排序, 终端的工作机制如下图

这意味着,默认排序是会受终端操作人员的设置影响。也就是说,使用默认排序来检索订单,想得到完全想要的数据是不安全的。

我的处理方式:首先,得确保终端设置显示  所有订单 ,然后,EA里先读取所有指定条件的订单(如指定魔术号)到一个数组,然后,对这个数组再按需求进行排序(如按订单关闭时间从大到小排序,则最后平仓的订单将处于数组0位),然后,再对已经排好序的订单进行  相应  的统计计算。

 
Lin Luo #:

但是有一个问题,历史订单数电脑上会变得,,订单多了或者星期一打开电脑订单数量会改变,比如 星期五……      这个不是问题。请看下图

关于排序, 终端的工作机制如下图

这意味着,默认排序是会受终端操作人员的设置影响。也就是说,使用默认排序来检索订单,想得到完全想要的数据是不安全的。

我的处理方式:首先,得确保终端设置显示  所有订单 ,然后,EA里先读取所有指定条件的订单(如指定魔术号)到一个数组,然后,对这个数组再按需求进行排序(如按订单关闭时间从大到小排序,则最后平仓的订单将处于数组0位),然后,再对已经排好序的订单进行  相应  的统计计算。

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

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

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

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

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

 
虽然看了几遍没有理解你的问题,但是一个24小时不掉线的云服务器可以解决烦恼我觉得
 
MT4 这个问题容易解决 ,但是 MT5 就比较麻烦。我目前在写 MT5 实时把平仓的信息发送到本地一个文件里的模块,遇到问题结果老是不对。
 
bingru #:
MT4 这个问题容易解决 ,但是 MT5 就比较麻烦。我目前在写 MT5 实时把平仓的信息发送到本地一个文件里的模块,遇到问题结果老是不对。
bingru #:
MT4 这个问题容易解决 ,但是 MT5 就比较麻烦。我目前在写 MT5 实时把平仓的信息发送到本地一个文件里的模块,遇到问题结果老是不对。

求教高手.程序本来是KDJ指标,然后我加了下面代码意图实现当J线死叉的时候,发出预警信号,但总是没收到预警信息,测试也没任何错误提示,求大神看看问题在哪里?谢谢

for(int j=10;j<limit;j++)

   {

     if((JBuffer[j-1] > KBuffer[j-1])&&(JBuffer[j] < KBuffer[j])) //判断两线产生了死叉

      {

     

       if(j==prev_calculated)//只针对当前K线报警历史K线就不用报警了

          {

           Alert("UP");

           SendMail("eurusd","死叉");

           SendNotification("空平");

          }//预警

      }

原因: