新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1534

 
Eugen8519:

这就是订单的结束方式

按我上面写的做...

或者发布OnTick()代码

 
Eugen8519:

这就是订单的结束方式

这个结构应该是

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(UseTimeLimit)
     {
       YesStop=true;
       MqlDateTime str1;
       TimeToStruct(TimeCurrent() , str1);
       if(str1.hour > startHour && str1.hour < stopHour)
          YesStop=false;
     }
   if(YesStop==false)
     {
      if(EMA0...)
        {
         .....
         OPENORDER("Sell");
        }
   
      if(EMA0...)
        {
         .....
         OPENORDER("Buy");
        }
     }
//---
   if(EMA0...)
     {
      .....
      CLOSEORDER("Sell");
     }

   if(EMA0...) 
     {
      .....
      CLOSEORDER("Buy");
     }
  }
//+------------------------------------------------------------------+
void CLOSEORDER(string ord)
  {
   .....
  }
//---
void OPENORDER(string ord)
  {
   .....
  }
 
谢谢你的提示,我今晚会去看看,以后再向你报告。
 
MakarFX:

这个结构应该是

如果我没有弄错的话,可以写成以下的样子

   if(UseTimeLimit)
     {
       YesStop=true;
       MqlDateTime str1;
       TimeCurrent(str1);
       if(str1.hour > startHour && str1.hour < stopHour)
          YesStop=false;
     }
 
Eugen8519:
好吧,谢谢你的建议,我今晚就去看看,以后再报告。

如果启动猫头鹰时在设置中设置了UseTimeLimit,那么

这个函数最好放在OnInit()而不是 OnTick()中。

 
Vitaly Muzichenko:

如果我没有弄错,你可以这样写

实际上我是这样写的。

if(TimeHour(time[i])>=Time_Start&&TimeHour(time[i])<TimeFinish)

或更简单

if(Hour()>=Time_Start&&Hour()<TimeFinish)
 

下午好,请您告诉我如何正确地平均化指标线?周期为Per_1的基本曲线被正常绘制(Buffer_1[]),直到我用Buffer_2[] 添加一个简单的平均化块,平均化周期 Per_2

int OnCalculate(默认参数)

{

int i, j, limit;

如果( rates_total <= Per_1)

return(0);

//最后计算的条形图将被重新计算

limit = rates_total - prev_calculated - Per_1;

如果(prev_calculated > 0)

限制++。

//计算并填入指标缓冲区

for(i=0; i < limit; i++)

{

//计算指标的主线

Buffer_1[i] = 曲线的公式

double Sum = 0;

for(j = i; j < Per_2 + i; j++)

{

//计算平均线

Sum += Buffer_1[j];

Buffer_2[i] = Sum / Per_2。

}

}

return(rate_total)。

}

 
Oleksandr Nozemtsev:

下午好!

插入代码

这里似乎是你问题的答案
 
Eugen8519:
这就是问题所在,它只打开和关闭了starthour->stophour订单
而未平仓的订单在停盘后不会被平仓。

因为你不能在停止时间后进行交易

我已经写了很久的先开后关、拖网和其他位置维护的逻辑。大多数情况下是这样的,在你打开其他东西之前,你必须检查已经打开的东西。

你的逻辑是正确的,你只需要调换区块。

MqlDateTime str;
void OnTick()
 {
 // Close Positions
 TrailingStop();

 if(условие_закрытия)
  {
   ClosePos();
  }

 // Open Positions
 if(UseTimeLimit)
  {
    TimeCurrent(str);
    if(str.hour > startHour && str.hour < stopHour)
     {
      OpesPos(...);
      ...
     }
  }
// end
}
 

酷!它的作用,谢谢你

原因: