3-5 секундный таймфрейм mt5

 

Уважаемые форумчане!

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

Буду очень благодарен))

Да и не только я, наверное...

 
void TickTimeSeries::tick_proceeed(MqlTick &tick) //count bars = actual array index
  {
   last_tick=tick;
   if(tick.last==0)
     {
      return;
     }
   last=tick.last;
   if(disable_ticks)
     {return;}

   if(enable_min) //min always by last
     {
      minutes[count_min]=tick.last;
      ArrayRefresh(minutes,count_min);
      if(TimeLocal()-minute_datetime>=60)
        {
         minute_datetime=TimeLocal();
         count_min++;
        }
     }
   lasts[count_bars]=last;
   ArrayRefresh(lasts,count_bars);
   if((TimeLocal()-init_time)<period_sec)
     {
      if(last>current_high)
        {
         current_high=last;
        }
      if(last<current_low)
        {
         current_low=last;
        }
      count_ticks++;
     }
   else
      if((TimeLocal()-init_time)>=period_sec) //nastupil novii interval = formiruem sve4ku proshlogo intervala
        {
         ticks_mrate[count_bars].open=current_open;
         ticks_mrate[count_bars].close=         last;
         ticks_mrate[count_bars].high=          current_high;
         ticks_mrate[count_bars].low =          current_low;
         ticks_mrate[count_bars].time=          init_time;
         ticks_mrate[count_bars].tick_volume=count_ticks;
         if(bars_include_volume)
           {
            MqlRates mqlrate[];
            CopyRates(symbol,PERIOD_M1,0,2,mqlrate);
            ArraySetAsSeries(mqlrate,true);

            if(last_tick_datetime==mqlrate[0].time)
              {
               ticks_mrate[count_bars].real_volume=mqlrate[0].real_volume-last_tick_vol;
              }
            else
              {
               ticks_mrate[count_bars].real_volume=(mqlrate[1].real_volume-last_tick_vol)+mqlrate[0].real_volume;
              }

            last_tick_vol=mqlrate[0].real_volume;
            last_tick_datetime=mqlrate[0].time;
           }
         init_time                              =TimeLocal();
         count_ticks                            =0;
         count_bars++;
         current_open                           =last;
         current_high                           =last;
         current_low                            =last;
         lasts[count_bars]                      =last;

         //init fill rate on new interval

         ticks_mrate[count_bars].open=          last;
         ticks_mrate[count_bars].close=         last;
         ticks_mrate[count_bars].high=          last;
         ticks_mrate[count_bars].low =          last;
         ticks_mrate[count_bars].time=          TimeLocal();

         refresh_tick_bars_count(ticks_mrate,count_bars);
        }

  }


Выкладываю основную часть кода, чтобы была понятна логика

писал года 4 назад, код неоч, но вроде работает. Заполняет в реальном времени массив  MqlRAtes ticks_mrate охлс барами секундного интервала, периодичность которого заданна в period_sec, дополнительно в массив Lasts сохраняет только клоузы

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Структура исторических данных - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5