循环和关闭或删除订单-第4页

威廉·罗德
24104
威廉·罗德 2014.09.23 15:04:08  
格克科:

嗨,专家们,您对此解决方案有何看法?

while(OrdersTotal()>0)
这意味着它与其他所有EA(包括自身)和手动交易均不兼容。 (在其他图表上的交易)
戈登·格科
628
戈登·格科 2014.09.23 16:46:44  
WH罗德:
格克科:

嗨,专家们,您对此解决方案有何看法?

这意味着它与其他所有EA(包括自身)和手动交易均不兼容。 (在其他图表上的交易)

当然。这是全部关闭的全部。

有时在某些情况下(例如,您想立即关闭太多未平仓交易)“原始”版本不起作用。此版本对此很有用。

西蒙·尼亚德科夫斯基
17343
西蒙·尼亚德科夫斯基 2014.09.23 17:59:10  
格克科:

当然。这是全部关闭的全部。

有时在某些情况下(例如,您想立即关闭太多未平仓交易)“原始”版本不起作用。此版本对此很有用。

您为什么不尝试对错误做出反应?您不应该分析错误并做出相应反应吗? 对于某些错误,您可以重试, 对于其他人,您必须停止尝试。
[已删除] 2015.02.02 13:23:48  

你好


我有一个关于while循环的问题。我想尽可能频繁地在循环中运行当前EA。因此,我的想法是将当前代码放入带有 睡眠功能 包含在其中,导致while仅每1毫秒执行一次。


但是,当我这样做时(我进行了一些Print(“ ...”)函数调用,以跟踪每个循环中发生的事情),我看到了这种冻结,并且不再有任何打印到屏幕上。

我想知道问题可能出在哪里。可以在频率高达1ms的循环中运行EA吗?尝试每毫秒从服务器获取最新的出价/出价是否会有问题?这会否在此处施加过多负载,从而导致冻结?

我不确定,可能是我的算法正在执行其他操作导致此情况。


我已经在200ms的周期上运行它,但仍然遇到相同的问题(尽管不是那么立即)。在日志文件中打印太多行会不会有问题?



感谢您对此的任何建议。

问候,


C。

卡尔·施莱伯
主持人
11392
卡尔·施莱伯 2015.02.02 13:58:15  
可能是代码问题-但不知道代码?
威廉·罗德
24104
威廉·罗德 2015.02.02 15:27:07  

14967057:

我有一个关于while循环的问题。我想尽可能频繁地在循环中运行当前EA。

因此,我的想法是将当前代码放入一个while循环中,并在其中包含一个sleep函数,这会使while仅每1毫秒执行一次。

尝试获取最新的出价/要价是否会有问题。

在日志文件中打印太多行会不会有问题?

  1. 该线程与关闭和删除订单有关。不要劫持主题以外的话题。发布一个新的。
  2. 为什么要不断循环?一切都没有改变。您要做的只是浪费CPU时间。 
  3. 从返回 开始 当出价/询问发生变化时,您的 开始 将尽快被调用。
  4. 是的,您已经用行填充了所有可用的ram,这比Windows将它们放入磁盘的速度快。所有程序都被调出。一切都挂了。
[已删除] 2015.02.03 10:08:41  

你好

事实证明,我遇到的问题不是由于将EA代码封装在具有1ms睡眠的while循环内。这部分看起来不错(无论我在哪里打印到屏幕上),因为我已经运行了最后半个小时,没有出现故障。


问题是由于我在代码中遇到了另一个麻烦,最终导致EA被陷入无限循环。

感谢您的投入和Roesder。

问候,

[已删除] 2015.02.18 22:27:31  

大家好。我读了这个话题,我有疑问。我尝试编写一个代码, 删除待处理 订单(仅STOP,无LIMIT),但仅在激活另一个挂单(启动为OP_SELL或OP_BUY)时。代码就是这样(但是有一个错误,但是我不知道在哪里)。你能看一下我的代码吗? 

 

 bool   result;
   int   i, j, cmd, cmd2,total;

   total=OrdersTotal();

   for(i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         cmd=OrderType();
         
         if(cmd!=OP_BUYSTOP && cmd!=OP_SELLSTOP)  //take an orders which was activated 
           {
           for(j=0; j<total; j++)   //another variable j 
     { 
     if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)){ cmd2=OrderType();
     if(cmd2!=OP_BUY && cmd2!=OP_SELL)
           {
            
            OrderPrint();
            
            result=OrderDelete(OrderTicket());  //first pending order become to OP_SELL or OP_BUY, second pending order will be delete
            if(result!=TRUE) Print("LastError = ", GetLastError());
            break;
           }
        }
       }
     }
     }
   }
Spgandau
12
Spgandau 2018.04.20 03:26:44  

OrdersTotal()不正确...

我对循环代码序列感到惊讶 使用OrdersTotal() 没有给出正确的结果(由两个不同的经纪商观察)。 

我在运行WINE 3.0的Linux Ubuntu-MATE 16.04桌面上使用MT4版本1090

这是我一直在使用的...

for(int cc = 0; cc<OrdersTotal(); cc ++)
{
     如果(!OrderSelect(cc,SELECT_BY_POS,MODE_TRADES))继续;
     如果(OrderSymbol()!= Symbol())继续;
      if (OrderType() > 1) continue;   //-忽略未决交易

      OpenTradecnt++;   //-计算该符号存在的每个有效位置
     Print(“此交易品种的未平仓交易数量为:”,OpenTradecnt);
}

我注意到有两个不同的经纪人,OrdersTotal()值并不总是与MT4经纪人的“交易”标签中显示的一致。 最初,我以为是代理导致OrdersTotal()无法正常运行。 当我在第二个代理上注意到时,我开始怀疑MT4是否存在内部“问题”,或者我的代码是否错误,或者这是否是MT4与服务器正确同步的问题...?

在阅读了这个论坛主题之后,我想知道我是否会更改结果以将for..loop更改为:

for(int cc = OrdersTotal()-1; cc>= 0; cc--)
{
     ...........
}

或者,是否存在标志或代码行,以确保在OnTick()事件期间OrdersTotal()正确同步?

关于此的任何澄清将是非常有帮助的,将不胜感激!

少年皇帝有限公司
主持人
15190
埃莱尼·安娜·布兰努(Eleni Anna Branou) 2018.04.20 09:58:31  

请使用</>按钮插入您的代码。