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

 
ggekko:

专家你好,你对这个方案有什么看法?

while(OrdersTotal()>0)
这意味着它与其他所有的EA(包括它自己)和手动交易 都不兼容。(在其他图表上的交易)
 
WHRoeder:
ggekko

专家你好,你对这个方案有什么看法?

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

当然了。这是一个完全关闭的所有。

有时有些情况下(例如你想立即关闭太多未平仓的交易),"原始 "版本不能发挥作用。这个版本很适合这种情况。

 
ggekko:

当然了。这是一个完全关闭的全部。

有时有些情况下(例如你想立即关闭太多未平仓的交易),"原始 "版本不能发挥作用。这个版本很适合这种情况。

你为什么不尝试对错误做出反应呢? 你不是应该分析错误并做出相应的反应吗? 对于一些错误,你可以重试,对于其他错误,你必须停止尝试。
 

你好。


我有一个关于while循环的问题。我想尽可能频繁地在一个循环中运行当前的EA。因此,我的想法是把当前的代码放在一个while循环里,里面包含一个睡眠函数,使while每隔1毫秒才执行一次。


然而,当我这样做的时候,(我有一些Print("...")函数的调用,可以跟踪每个循环中发生的事情),我看到这个冻结,不再打印到屏幕上了。

我想知道问题出在哪里。循环运行EA的频率为1ms,这可以吗?例如,每隔一毫秒从服务器上获取最新的买入/卖出价,会有问题吗?这是否会给那里带来太多负担,导致冻结?

可能是我的算法做的其他事情导致了这个问题,我不确定。


我在200ms的周期上运行,仍然得到同样的问题(虽然没有那么直接)。会不会是在日志文件中打印了太多行的问题?



谢谢你在这方面的建议。

问候。


C.

 
可能是代码问题 - 但不知道代码?
 

14967057:

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

因此,我的想法是把当前的代码放在一个while循环里,里面包含一个睡眠函数,使while每隔1毫秒才执行一次。

试图获得最新的买入/卖出价会不会有问题。

会不会存在向日志文件打印过多行的问题?

  1. 这个主题是关于关闭和删除订单的。不要劫持线程来讨论非主题问题。发表一个新的主题。
  2. 你为什么要连续循环?没有什么在变化。你所做的只是在浪费CPU时间。
  3. 开始 返回,当Bid/Ask变化时,你的开始 将被尽可能快地调用。
  4. 是的,你已经用这些行填满了所有可用的内存,比Windows把它们放到磁盘上的速度快。所有程序都被分页了。所有东西都挂了。
 

你好。

事实证明,我遇到的问题并不是因为将我的EA代码封装在一个带有1ms睡眠的while循环中。这一部分似乎很好(不管我是否打印到屏幕上),因为我现在已经运行了半个小时,没有出现任何问题。


问题是由于我在代码中的另一个偷偷摸摸的while,最终导致EA陷入了一个无限循环。

感谢gooly和Roesder的意见。

问候。

 

大家好。我读了这个主题,我有个问题。我试图做一个代码,删除挂单(只有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;
           }
        }
       }
     }
     }
   }
 

OrdersTotal()不正确...

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

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

以下是我一直在使用的方法...

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

OpenTradecnt++; //--对该符号的每一个真实头寸进行计数。
Print("此符号的未平仓交易数为: ", OpenTradecnt);
}

我注意到在两个不同的经纪商那里,OrdersTotal()的值并不总是与MT4经纪商的'Trade'标签中显示的一致。 最初,我认为是经纪商导致OrdersTotal()不能正常运行。当我在第二个经纪商那里注意到时,我开始怀疑MT4是否有一个内部'问题',或者我的代码是错误的,或者这是否是MT4与服务器同步的一个问题....?

在阅读了这个论坛主题后,我想知道如果我改变for...循环的读取方式,结果是否会有变化。

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

或者,是否有一个标志或一行代码可以确保OrdersTotal()在OnTick()事件中被正确同步?

关于这个问题的任何澄清都将是非常有帮助的,我们将非常感激!

 

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