Символ на основе тиков не обновляется

 

Привет, разработчики!

Я пытаюсь сделать тиковую диаграмму, используя код:

 // + ----------------------------------------------- ------------------- + 
// | Ticks wise candles.mq5 | 
// | Copyright 2019, MetaQuotes Software Corp. | 
// | https://www.mql5.com | 
// + ----------------------------------------------- ------------------- + 
#property  copyright  "Copyright 2019, MetaQuotes Software Corp." 
#property  link         "https://www.mql5.com" 
#property  version     "1.00" 
#property  indicator_chart_window 
#  property script_show_inputs 
input  int  candles =  50  ;
 #include  "Symbol.mqh"  // https://www.mql5.com/en/code/18855 
long  id; 
 const  SYMBOL SYMB (  _Symbol  +  "24"  ); 
 // + ----------------------------------------------- ------------------- + 
// | Custom indicator initialization function | 
// + ----------------------------------------------- ------------------- + 
int  OnInit  ()   
  {  
// --- indicator buffers mapping  

   if  (SYMB.IsExist ())  // If Created  
      {   
      SYMB.CloneProperties ( );  // copied properties
                               //SYMB.CloneHistory (__Symbol); 
       int  rates_total = candles;  // (int) SeriesInfoInteger (_Symbol, PERIOD_M1, SERIES_BARS_COUNT); 
       Print  (rates_total); 
        MqlRates  Rates [], Replace [];  

       // Displaced the time of the bars 
       for  (  int  i =  CopyRates  (  _Symbol  ,  PERIOD_M1  ,  0  , rates_total, Rates) -  1  ; i> =  0  ; i--)   
        {  
         MqlTick  Ticks []; 
          int  vv =  CopyTicksRange  (  _Symbol  , Ticks,  COPY_TICKS_INFO  ,  ulong  (Rates [i] .time) *  1000  ,  ulong  (Rates [i] .time +  60  ) *  1000  ); 
          ArrayResize  (Replace, vv-  1  ); 
          for  (  int  ii =  0  ; ii <vv-  1  ; ii ++)   
           {   
            Replace [ii] .time = Ticks [ii] .time;   
            Replace [ii] .open = Ticks [ii] .bid;   
            Replace [ii] .close = Ticks [ii +  1  ] .bid; 
              if  (Ticks [ii] .bid> Ticks [ii +  1  ] .bid) {Replace [ii] .high = Ticks [ii] .bid; Replace [ii] .low = Ticks [ii +  1  ] .bid;} 
              else  { Replace [ii] .high = Ticks [ii +  1  ] .bid; Replace [ii] .low = Ticks [ii] .bid;}   
            Replace [ii] .tick_volume =  long  (Ticks [ii] .volume);   
            Replace [ii] .real_volume =  0  ;   
            Replace [ii] .spread =  int  (  fabs  (Ticks [ii] .bid-Ticks [ii +  1  ] .bid) *  100000  );  
 
           }  

         if  (SYMB.CloneRates (Replace)>  0  && SYMB.On ())  // Print ("opened");   
           {   
            id =  ChartOpen  (SYMB.Name,  PERIOD_CURRENT  );  // Opened the chart of the SYMBol 
             ChartSetInteger  (id,  CHART_AUTOSCROLL  ,  1  ); 
              Print  (  ChartSetInteger  (id,  CHART_SHIFT  ,  0  ,  ChartGetInteger  (  ChartID  (),  CHART_SHIFT  )));   
           }   
        }   
     }  
// --- 
   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 [] )   
  {  
   return  (rates_total);  
 
  }  
// + ---------------------------------------------- -------------------- +

Я не могу загрузить больше одного тика дня. Вы можете посоветовать?

Я также не получаю уведомления от этого форума. пожалуйста, дайте мне знать

Файлы:
 
Я не люблю напоминать еще раз, потому что модераторы могут забанить меня на форуме. Но у меня есть вопрос, и я хотел бы помочь с этим. Пожалуйста, помогите мне, что я могу сделать?
 
jaffer wilson:
Я не люблю напоминать еще раз, потому что модераторы могут забанить меня на форуме. Но у меня есть вопрос, и я хотел бы помочь с этим. Пожалуйста, помогите мне, что я могу сделать?
         MqlTick  Ticks []; 
          int  vv =  CopyTicksRange  (  _Symbol  , Ticks,  COPY_TICKS_INFO  ,  ulong  (Rates [i] .time) *  1000  ,  ulong  (Rates [i] .time +  60  ) *  1000  ); 

Не утверждаю, но мне кажется проблема может быть в том, что максимальный размер буфера тиков не может превышать 2000, это относиться к функции CopyTicks. 

 
       for  (  int  i =  CopyRates  (  _Symbol  ,  PERIOD_M1  ,  0  , rates_total, Rates) -  1  ; i> =  0  ; i--)   
        {  
         MqlTick  Ticks []; 
          int  vv =  CopyTicksRange  (  _Symbol  , Ticks,  COPY_TICKS_INFO  ,  ulong  (Rates [i] .time) *  1000  ,  ulong  (Rates [i] .time +  60  ) *  1000  ); 

Так же в этом блоке отсутствует проверка на ошибки, поверти при работе с функциями CopyTicks, CopyTicksRange, CopyRates, это очень важно и нужно делать. 

 
Farkhat guzairov :

In the this block Also there is the no error checking, check the when working with IT  CopyTicks,  CopyTicksRange, functions The CopyRates, the this is very by important and done The Should the BE. 

Хорошо, я сделаю необходимые проверки. Но вы получили выход? Можете ли вы показать мне, если это сработало на вашей стороне? График тиков.

 
jaffer wilson:

Хорошо, я сделаю необходимые проверки. Но вы получили выход? Можете ли вы показать мне, если это сработало на вашей стороне? График тиков.

Эта ссылка не работает :

Symbol.mqh  7 kb
 
Farkhat guzairov :

This link does not work  :

Symbol.mqh  7 kb

Я предполагаю, что это не было загружено должным образом. Здесь я сделаю это снова

Файлы:
Symbol.mqh  7 kb
 
Farkhat Guzairov:

Не утверждаю, но мне кажется проблема может быть в том, что максимальный размер буфера тиков не может превышать 2000, это относиться к функции CopyTicks. 

Можете дать ссылку на источник информации о ограничении?

Или это ваши личные наблюдения?

 
Mikhail Dovbakh:

Можете дать ссылку на источник информации о ограничении?

Или это ваши личные наблюдения?

Справочник MQL5  / Доступ к таймсериям и индикаторам / CopyTicks 

int  CopyTicks(
   string           symbol_name,           // имя символа
   MqlTick&         ticks_array[],         // массив для приёма тиков
   uint             flags=COPY_TICKS_ALL,  // флаг, определяющий тип получаемых тиков
   ulong            from=0,                // дата, начиная с которой запрашиваются тики
   uint             count=0                // количество тиков, которые необходимо получить
   );

count

[in]  Количество запрашиваемых тиков. Если параметры from и count не указаны, то в массив ticks_array[] будут записаны все доступные последние тики, но не более 2000.


Предполагаю, что на CopyTicksRange это так же распространяется.

Ну я по крайней мере в своих алгоритмах исхожу из этого.

 

Спасибо, что ответили.

Это не ограничение, а значение по умолчанию, если вы не указали параметры...

А то я уже не на шутку испугался.)

 
Лучше и спасибо за ответы. Но что в моем случае мне делать? Вы можете посмотреть?