Помогите с алгоритмом!

 

Здравствтуйте! Помогите с алгоритмом. Нужно чтобы выполнялся цикл в цикле. Внешний цикл это каждый тик, а внутренний цикл это новый бар. Привожу  пример (не рабочий). Сам не могу разобраться, мозгов почему то не хватает))

//+------------------------------------------------------------------+
//|                                                          ddd.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//--- input parameters
input int      Input1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   int limit;
   if(prev_calculated==0)limit=1;
   else
      limit=prev_calculated-1;
    
    for(int i=limit;i<rates_total && !IsStopped();i++)
      {
         
         for(int i=limit;i<rates_total-1 && !IsStopped();i++)
           Print("внутренний цикл - новый бар");
           
         
               Print("внешний цикл - новый тик");  
      }   
  
  //--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Tango_X:

Здравствтуйте! Помогите с алгоритмом. Нужно чтобы выполнялся цикл в цикле. Внешний цикл это каждый тик, а внутренний цикл это новый бар. Привожу  пример (не рабочий). Сам не могу разобраться, мозгов почему то не хватает))

Что-то  в таком духе, но там у вас странные вычисления...
//+------------------------------------------------------------------+
//|                                                          ddd.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//--- input parameters
input int      Input1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

datetime gdt_BarOpenTime = 0;

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[])
  {
//---
   int limit;
   if(prev_calculated==0)limit=1;
   else
      limit=prev_calculated-1;
    
    for(int i=limit;i<rates_total && !IsStopped();i++)
    {
         if (gdt_BarOpenTime != Time[0])
         {
            gdt_BarOpenTime = Time[0]; 
            for(int i=limit;i<rates_total-1 && !IsStopped();i++)
               Print("внутренний цикл - новый бар");
         }  
         
         Print("внешний цикл - новый тик");  
   }   
  
  //--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Denis Sartakov:
Что-то  в таком духе, но там у вас странные вычисления...


Только нужно не 

Time[0]

а

Time[rates_totla-1]

так как по-умолчанию в индикаторе mql5 в массивах в OnCalculate() самый правый бар на графике соответствует индексу rates_total-1.

 
Denis Sartakov:
Что-то  в таком духе, но там у вас странные вычисления...


Спасибо! но немножко не так, это я неправильно задал вопрос, прошу прощения. Попробую обьяснить болле нагляднее. 

Я пишу индикатор в котором отслеживаю два сигнала.

Первый сигнал отслеживаю по закрытию бара - т.е. предпоследний бар

Второй сигнал  отслеживаю на текущем баре - т.е.  текущий бар


И вот теперь как создать условие при появлении нового бара и второе условие при появлении нового тика

В реальном времени у меня получилось, а вот как на истории это сделать..? 

Это я насчет странных вычислений, как Вы сказали...)))


Спасибо большое за помощь!

 
Vladimir Karputov:


Только нужно не 

а

так как по-умолчанию в индикаторе mql5 в массивах в OnCalculate() самый правый бар на графике соответствует индексу rates_total-1.


да, да, так надо time[rates_total-1]...

хотя тут не видно, что это мт5...

 
Denis Sartakov:


..

хотя тут не видно, что это мт5...


Вот же - всё видно:

//+------------------------------------------------------------------+
//|                                                          ddd.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
...
 
Vladimir Karputov:


Вот же - всё видно:


да, да, соколинный глаз, ты прав ! как всегда !
Причина обращения: