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

 

下午好。一段时间后,mt4中的旗帜不再处理,mt开始忽略它,你能告诉我为什么吗?

void OnTimer()
  {
//---
   //-----------------
   int tmeLeftC = PeriodSeconds() - (TimeCurrent()-Time[0]);
   int tmeLeftL = PeriodSeconds() - (TimeLocal()-Time[0]);
   
   
//флаг на вкл отправки   
   if ((sendflag==0) && (tmeLeftC >= 10)) 
      {
         sendflag=1;
      }
      

//Условия на отправку 
///------BAY 
   if ((sendflag==1) && (fNewBar()) && (TimeHour(Time[0]) >= StartH) && (TimeHour(Time[0]) <= EndH) && ((tmeLeftC <= SecondsPrevToServer) || (tmeLeftL <= SecondsPrevToServer)))
      {
         Print("Predict data");
         sendSig();
         Print("Send data");
         sendflag=0;
      }
附加的文件:
 
itslek:

下午好。一段时间后,mt4中的旗帜停止了处理,只是mt开始忽略它,你能告诉我为什么吗?


试试100-200ms的定时器频率。
500毫秒太多,赶不上1秒

而蜡烛可能会在几秒钟甚至一分钟后打开。

 
Ivan Ivanov:

试试吧。

...还是你真的需要extern?


谢谢你。这似乎有帮助。

输入和外部的区别是什么?

 
Taras Slobodyanik:

试试100-200ms的定时器频率。
500毫秒太长了,赶不上1秒

而蜡烛可以在几秒钟甚至一分钟后打开


所以问题不在于它没有抓到它。这没有什么错。

问题是,标志停止工作,它开始每500ms发送一个信号,无视标志条件。 我不明白那里发生了什么...

 
RichLux: 输入和外部的区别是什么?


 

请告诉我如何在出现新条形图时重置缓冲区,但要使缓冲区内以前的数据不被抹去,而是显示在图表上。由于某些原因,我无法将缓冲区重置为零,当新的条形图 出现时,新的数据会叠加在旧的累积数据上。我在代码中没有正确地描述什么。

void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
  
   
}
 
 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }
   
      
   if(Bid > Bid1) 
   {
   V1 = iVolume(NULL, 0, 0);
   V2 = V1 + V2;
   Buf_1[0]= V2;
   }                             
   else 
   {
   V3 = iVolume(NULL, 0, 0);
   V4 = V3 + V4;
   Buf_2[0]= (V4*-1);
   }
   Bid1=Bid;
   
   
  return(rates_total);
}
 
itslek:

所以问题不在于他没有抓到它。这没有什么不对。

问题是,标志停止工作,它开始每500ms发送一个信号,忽略了标志的条件。


你的时间是混乱的,同时是本地和服务器。
我会像这样粗略地抓住第二个。

//+------------------------------------------------------------------+
bool NewBar()
{
static bool flag=false;
static int bar=Bars;
static datetime lasttime=0;

if (!flag && Bars!=bar)
   {
   bar=Bars;
   lasttime=TimeLocal();
   flag=true;
   }
if (flag && TimeLocal()-lasttime>=pause) //pause - пауза после начала бара, например 59 сек
   {
   flag=false;
   return(true);
   }
return(false);
}
 

你好,请你告诉我,如果你需要为这个指标输入iData,不管是任何程序还是对条形数据的引用,在你可以指定时间段 的地方,为什么其他时间段的数据不能正确反映在当前不同时间段的图表上,而只能反映在指定时间段的图表上?谢谢你。

 

你好,也许有人会回应和帮助,我再试一下。这里是第367页的一个帖子 ,那里都有规定。

 
Novaja:

你好,也许有人会回应和帮助,我再试一下。这里有一个帖子,第367页,,都在那里。


看看吧。

原因: