任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 13

 
Krokus:

也许是这样。

其他的想法不会出现...




你在阅读字里行间。总之,看看你一开始在循环中放了什么。循环的行动区...
 
你好,在平板电脑的MT4安卓系统中,需要分别下载每个服务器的终端吗? 通过文件登录,像在电脑上一样登录是不可能的?另外,你是否知道autoclick可以安装在安卓平板电脑上进行mt4交易?
 

下午好!我不能让这个条件起作用。

OrderCloseTime()!=hour()

我希望一小时内开出的订单不超过一个!

所有相同的订单都被打开了!

 
lowech:

下午好!我无法让这个条件发挥作用。

OrderCloseTime()!=hour()

我希望一小时内开出的订单不超过一个!

但所有相同的订单都被打开了!这可能是什么呢?

首先:OrderCloseTime() - 这是订单关闭的时间。如果该订单没有关闭,则等于零。你需要看一下开放的时间。

其次。Hour() - 这是EA开始的时间,这个时间在程序执行 期间不会改变。你需要将其与最后一次报价到达的时间进行比较 - TimeCurrent()

该函数返回当前符号的最后位置被打开后的秒数。

//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+

也就是说,要用Magic检查最后一个买入头寸开仓后的秒数,你需要

if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
   // Можно открывать следующий
   }
 
你好,当你再次打开终端时,在周末之后,所有的图表,包括带有EA的工作图表,在美分账户上消失了。虽然底部保存了未结头寸、余额和资金,但却没有图表,而是一个灰色的区域。我不得不重新下载终端,并重新安装带有专家顾问的工作图表。 之后,一切正常。请告诉我这是怎么回事,我怎样才能在今后以最无痛的方式消除这个问题?
 

第一:OrderCloseTime()是关闭订单的时间。如果该订单没有关闭,则等于零。你需要注意开放时间。

第二。Hour() - 这是专家顾问开始工作的时间,这个时间在程序执行 期间不会改变。你需要将其与最后一次报价到达的时间进行比较 - TimeCurrent()

该函数返回当前符号的最后位置被打开后的秒数。

//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+

也就是说,要用Magic检查最后一个买入头寸开仓后的秒数,你需要

if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
   // Можно открывать следующий
   }
谢谢你的功能!你难道没有另一个功能吗? 这样,每个酒吧只能开一个订单?
 
lowech:
谢谢你的功能!你没有另一个功能吗? 这样每个酒吧只能打开一个订单?
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+

同样的事情,只检查条数,不检查秒数

 
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+

同样的事情,只检查条数,不检查秒数


它是有效的!但当我用TP关闭一个订单时,一个新的订单马上就会打开。
 
为什么平台上不显示交易层,为什么EA不工作?
 
lowech:

同样的事情,只检查条数,不检查秒数


它是有效的!但当一个订单在TP上关闭时,一个新的订单立即打开!我们如何才能解决它?

所以我们需要做另一个检查:检查最后一个订单关闭后的条数

//+----------------------------------------------------------------------------+
int BarsAfterCloseLastPos (int fi_MG, int fi_Type = -1)
{
    datetime ldt_Time = 0;
    int      li_Total = OrdersTotal();
//----
    for (int li_pos = 0; li_pos < li_Total; li_pos++)
    {
        if (!OrderSelect (li_pos, SELECT_BY_POS, MODE_HISTORY)) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (fi_Type >= 0) if (OrderType() != fi_Type) continue;
        if (OrderMagicNumber() != fi_MG) continue;
        if (ldt_Time >= OrderCloseTime()) continue;
        ldt_Time = OrderCloseTime();
    }
    //---- Обрабатываем событие - отсутствие своих ордеров
    if (ldt_Time == 0) return (-1);
//----
    return (iBarShift (NULL, 0, ldt_Time));
}
//+----------------------------------------------------------------------------+