Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 514

 
toni_stark:
Здравствуйте! Подскажите пожалуйста код при котором советник будет исполнять какое либо действие в начале нового для т. е. 00.00, или другими словами как отобразить условие "если наступил новый день(00.00)" на языке MQL?

Языков mql аж две штуки.

А алгоритм таков:

Запомнить время предыдущей свечи на ТФ D1 в статической переменной и сравнивать его с временем текущей свечи на том же ТФ. Если время изменилось, то выполнить действие и запомнить время новой свечи в той же самой переменной.

 
Статическая переменная присутствует в MQL4?
 
toni_stark:
Здравствуйте! Подскажите пожалуйста код при котором советник будет исполнять какое либо действие в начале нового для т. е. 00.00, или другими словами как отобразить условие "если наступил новый день(00.00)" на языке MQL?

Как вариант

 

if (StatTime==1)

{ 

 Time=iTime(NULL,1440,0);

 StatTime=0;

 }

       if(Time!=iTime(NULL,1440,0))

           {

  StatTime=1;

           } 

 
-Aleks-:

Как вариант

 

if (StatTime==1)

{ 

 Time=iTime(NULL,1440,0);

 StatTime=0;

 }

       if(Time!=iTime(NULL,1440,0))

           {

  StatTime==1;

           } 

Не до конца понятно с переменной StatTime, какого она типа?
 
toni_stark:
Не до конца понятно с переменной StatTime, какого она типа?

datetime Time

int  StatTime

В коде была описка не StatTime==1; а StatTime=1; 

       if(Time!=iTime(NULL,1440,0))

           {

  StatTime=1;

           }  

 
Karputov Vladimir:

Ваша логика, Вы и должны сами ответить на вопрос.

 

 Опять таки, только Вы сами можете ответить, так как логика Ваша.

 

А вообще повторюсь в очередной раз: в правильно поставленном вопросе содержится 90% ответа. В общем ставьте точки останова перед тем местом в коде где Вы проводите действие с позицией. А дальше пошаговая отладка.

Ага, значит вопрос просто в логике. Меня больше беспокоило, что кроме порядка действий, еще нужно учесть время обновления данных на сервере.

Точки остановки естественно использовала.

Видимо всё заново переписать придется, какой то бред получается.
 
А есть здесь кто с Уфы?
 

     2016.02.15_14:27 GMT+3. Здравствуйте! Вопрос к модераторам. Прилагаю

скриншот. Не могу получить данные индикаторных буферов ZigZag'а. На

скриншоте видно, что на пути к файлу встречается папка "indicators". На самом

деле в терминале существует папка "Indicators". Наверно из-за этого разночтения и

нельзя открыть файл ZigZag.mq4.
     А данные индикаторов Moving Average и Fractals как получить в массивы, а не

только последние значения? Подскажите. Пока всё. Жду ответа. 14:36 GMT+3. 15:25 GMT+3.

Написано в процедурном программировании.

Файлы:
 
-Aleks-:

Как вариант

 

if (StatTime==1)

{ 

 Time=iTime(NULL,1440,0);

 StatTime=0;

 }

       if(Time!=iTime(NULL,1440,0))

           {

  StatTime=1;

           } 

Вот так думаю по интереснее будет

вариант 1 

 

bool NevDay()
  {
   static datetime StatTime;

   if(StatTime!=iTime(NULL,PERIOD_D1,0))
     {
      StatTime=iTime(NULL,PERIOD_D1,0);
      return(true);
     }
   return(false);
  }

вариант 2 

bool NevDay()
  {
   static int den;

   if(den!=Day())
     {
      den=Day();
      return(true);
     }
   return(false);
  }
 

Здравствуйте!

Есть код функций "newt" и "dlt" решающие некий алгоритм. Подскажите пожалуйста, это алгоритм чего? Какую задачу эти функции решают?

int    period=150;
int    shift_1=10;
double shift_2=3.0;
int    history=300;
double hpf[];
double HPF[];
//+------------------------------------------------------------------+
init()
  {
   SetIndexBuffer(0,HPF);
   ArrayResize(hpf,period);
   return(0);
  }
//+------------------------------------------------------------------+
start()
  {
   for(int bar=history; bar>=0; bar--)
     {
      for(int i=period-1;i>=0;i--)
         hpf[i]=Close[i];

      HPF[bar]=newt(hpf,shift_1,shift_2);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double newt(double x[],int pos,double n)
  {
   double r=x[pos],k=1;
   int l=MathCeil(n),i;
   if(pos+l>=ArraySize(x)) l=ArraySize(x)-pos-1;
   if(n==0) return(r);
   if(n<0) return(EMPTY_VALUE);
   for(i=1; i<=l; i++)
     {
      k*=n/i;
      r+=k*dlt(x,pos,i);
     }
   return(r);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double dlt(double x[],int pos,int d)
  {
   double r=0;
   int i, k=1, pod=pos+d, l=d>>1;
   if(pos>=ArraySize(x)) return(EMPTY_VALUE);
   if(pos+d>=ArraySize(x)) return(0);
   if(d%2>0)
      for(i=0; i<=l; i++,pos++,pod--)
        {
         r+=k*(x[pos]-x[pod]);
         k*=i-d;
         k/=i+1;
        }
   else
     {
      for(i=0; i<l; i++,pos++,pod--)
        {
         r+=k*(x[pos]+x[pod]);
         k*=i-d;
         k/=i+1;
        }
      r+=k*x[pos];
     }
   return(r);
  }