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

 
НАРОД ПРИВЕТСТВУЮ ! ПОМОГИТЕ ПОЖАЛУЙСТА  Есть информер, надо его ПОПРАВИТЬ ... Можно сделать что бы считал чистую прибыль,  без учета свопов,комиссий? еще надо поменять цвет надписи ... Заранее очень признателен
Файлы:
 
ANDREY:

Всем доброго времени суток!
Вопрос по оператору цикла for() в mql4. В заголовке этого оператора производится последовательное уменьшение или увеличение значения какой то переменной

for(int A=14; A>=0;A--) или   for(int A=0; A<14;A++) или   for(int A=0; A<14;A=+2)  При этом размерность увеличения , или уменьшения переменной  A предполагается всегда одинаковой в приведенных примерах 1 или 2.

ВОПРОС. А если переменная А это значение таймфрейма (1(минута),5,15,30,60,240,1440) то очевидно, что размерность увеличения или уменьшения этой переменной не может быть одинаковой. Как оформить в этом случае заголовок  for , что бы переменная А начиналась с 1 и потом увеличивалась на каждой итерации  неравномерно на нужное количество минут.

Пример с переменной А - это частный случай. Как вообще оформляется цикл если изменение переменной в заголовке цикла нужно делать неравномерно с нужными мне интервалами.
Или для этих случаев употребляется какой то другой оператор? Но как мне кажется другие операторы очень громоздкие по сравнению с  for .Помогите пожалуйста мне решить мою задачу именно при помощи оператора  for,  и именно при помощи его заголовка . Потому что решить мою задачу внутри тела оператора  for, конечно можно при помощи операторов if, но это будет очень громоздкая конструкция и оператору   for придется делать 1440 итераций ради того что бы отфильтровать 7 правильных значений.
Спасибо.

Тут ошибка. Должно быть for(int A=0; A<14;A+=2)

Самое простое что приходит в голову, это забить периоды в массив

ENUM_TIMEFRAMES per[] = {PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1};
/********************Script program start function*******************/
void OnStart()
 {
  for(int i = 0; i < ArraySize(per); i++)
   {
    Print(EnumToString(per[i]));
   }
 }/******************************************************************/

/*****************************End program****************************/


 
Alexey Viktorov:

Самое простое что приходит в голову, это забить периоды в массив

Спасибо, мне тоже пригодится)

 
Alexey Viktorov:

Тут ошибка. Должно быть for(int A=0; A<14;A+=2)

Самое простое что приходит в голову, это забить периоды в массив


Спасибо большое за подсказку. Все оказалось намного проще чем я думал.
Не понял только один момент. Название массива per. А ENUM_TIMEFRAMES - это идентификатор типа переменной? В Справочнике mql4 точно такого идентификатора я не нашел. Есть только  

  • перечисления (enum)
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
 
ANDREY:

Спасибо большое за подсказку. Все оказалось намного проще чем я думал.
Не понял только один момент. Название массива per. А ENUM_TIMEFRAMES - это идентификатор типа переменной? В Справочнике mql4 точно такого идентификатора я не нашел. Есть только  

  • перечисления (enum)

здесь

Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
 
MakarFX:

здесь

Правильно  я понял что ты мне скинул информацию касающуюся mql 5 ? Или данная информация одновременно применима и к   mql 4 ?

 
ANDREY:

Правильно  я понял что ты мне скинул информацию касающуюся mql 5 ? Или данная информация одновременно относится и к   mql 4 ?

я исправил
 
MakarFX:
я исправил

Спасибо.

 
ANDREY:

Спасибо.

Небольшая рекомендация: Сразу привыкайте к ENUM_TIMEFRAMES и забудьте о численном представлении в виде количества минут. 

Во первых PERIOD_W1 более информативен чем 10080, более понятно что это неделя.

Во вторых в mql5 период не соответствует количеству минут и не будет лишней проблемы при переходе на mql5, а это неизбежно.

Ну, а если уж так нужно количество минут в периоде, то вам поможет

int  PeriodSeconds( 
   ENUM_TIMEFRAMES  period=PERIOD_CURRENT      // период графика 
   );
Print(PeriodSeconds(PERIOD_W1)/60); // = 10080
 
Ребята. помогите прикрутить алерт к индикатору. 
#property copyright "Subu"
#property link      "http://www.google.com"
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_chart_window

double UpArrow[];
double DownArrow[];
extern int ShiftArrow = -2;
extern bool FilterBullBearCandle = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, UpArrow);
   SetIndexEmptyValue(0,0.0);
   SetIndexShift(0,ShiftArrow);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, DownArrow);
   SetIndexEmptyValue(1,0.0);
   SetIndexShift(1,ShiftArrow);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit, i, counter;
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
//----
    for(i = 0; i <= limit; i++) {
      DownArrow[i] = 0;
      UpArrow[i] = 0;
   if(High[i+2]>High[i+1] && Low[i+2]>Low[i+1] && High[i+2]>High[i+3] && Low[i+2]>Low[i+3])
      if( Open[i+1]>Close[i+1] && Close[i+2] > Close[i+1])
         if(FilterBullBearCandle)
            {
               if( Open[i+2]>Close[i+2])
                  DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
             }
         else
             DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
   if(High[i+2]<High[i+1] && Low[i+2]<Low[i+1] && High[i+2]<High[i+3] && Low[i+2]<Low[i+3])
      if( Open[i+1]<Close[i+1] && Close[i+2] < Close[i+1])
          if(FilterBullBearCandle)
            {
               if( Open[i+2]<Close[i+2] ) 
                  UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
                  
            }
         else
            UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
            
      }
//----
   return(0);
  }
Причина обращения: