Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 369

 

Добрый день. что-то перестал обрабатываться флаг в мт4 через некоторое время. просто мт начинает его игнорировать, могли бы подсказать почему:

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:

Добрый день. что-то перестал обрабатываться флаг в мт4 через некоторое время. просто мт начинает его игнорировать, могли бы подсказать почему:


попробуйте частоту таймера 100-200 мс,
500 мс многовато для ловли 1 секунды

ну и свеча ведь может открыться позже на несколько секунд или даже на минуту

 
Ivan Ivanov:

Попробуйте :

... или вам действительно нужно extern ?


Спасибо. Кажется помогло. 

А в чем разница между input и extern не могу понять? 

 
Taras Slobodyanik:

попробуйте частоту таймера 100-200 мс,
500 мс многовато для ловли 1 секунды

ну и свеча ведь может открыться позже на несколько секунд или даже на минуту


так проблема не в том что он ее не ловит. С этим все отлично.

дело в том, что флаг перестает работать и он начинает слать через каждые 500ms сигнал, игноря условия флага. не пойму что там происходит...

 
RichLux:    А в чем разница между input и extern не могу понять? 


 

Подскажите пожалуйста как обнулить буфер с появлением нового, но чтобы предыдущие данные в буфере не стирались, а отображались на графике. У меня почему-то не получается обнулить буфер, и с появлением нового бара, на старые накопленные данные накладываются новые. Что я не верно описал в коде.

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);
}
 

Добрый день! Подскажите пожалуйста , в индикаторе если прописывать в iДанных , неважно любая программа или ссылка на данные бара, где можно указать таймфрейм графика, почему данные с других таймфреймом не отражаются корректно на текущем отличном по времени графике, а только на графике указанного таймфрейма? Спасибо.   

 

Здравствуйте, может кто-то откликнется, поможет, попробую еще раз. Вот сообщение, на 367 стр. , там все расписано.

 
Novaja:

Здравствуйте, может кто-то откликнется, поможет, попробую еще раз. Вот сообщение, на 367 стр. , там все расписано.


Здесь глянь