CopyTicksRange () в MQL5 некорректно работает.a

 

Я пытаюсь получить отметки за разное время. Я использовал функцию CopyTicksRange (). Раньше он работал нормально.

Но он внезапно перестал работать. Я очень разочарован таким поведением функции.

Пожалуйста, объясните мне, почему это происходит? Как лучше всего получить тики с помощью Time range с гарантией?

Я пытался вызвать эту функцию несколько раз, потому что думал, что для загрузки данных Ticks требуется время. Но все время, когда я пытался, длина копируемых тиков была равна -1.

Пожалуйста, дайте мне знать, что я могу сделать.

Я установил Инструменты -> Вариант -> Графики -> Максимальное количество столбцов в диаграмме на Неограниченное. Я пробовал следующий код:

 int len = CopyTicksRange(Orig_Symbol_Name, ticks_add, COPY_TICKS_ALL, ulong(CURRENT_TIME)*1000, ulong(TimeCurrent() + 60) * 1000);

   if(len<=0)
     {
      string error;
      if(GetLastError() == 4401)
         error = "ERR_HISTORY_NOT_FOUND";
      else
         error = string(GetLastError());
      Print("------------------------------------------------------------------");
      Print("History Tick Length: ", len, " Error: ", error);
      Print("------------------------------------------------------------------");
      return -1;
     }
 

Вы вызываете этот код где? В каком типе программы? 

Где инициализации переменных?

Где полный MQ5 код в виде файла - чтобы его можно было скомпилировать и запустить?

 

Пример скрипта приведен в справке  CopyTicks

Запуск на холодную:

Журнал

2021.01.18 09:59:17.367 Scripts script Generator Magic Number (GBPUSD,H1) loaded successfully
2021.01.18 09:59:17.380 Scripts script Generator Magic Number (GBPUSD,H1) removed
2021.01.18 11:47:13.249 Scripts script CopyTicks (EURUSD,H1) loaded successfully
2021.01.18 11:49:18.826 Scripts script CopyTicks (EURUSD,H1) removed

Эксперты:

2021.01.18 11:49:18.580 CopyTicks (EURUSD,H1)   EURUSD: received 100000000 ticks in 27297 ms
2021.01.18 11:49:18.580 CopyTicks (EURUSD,H1)   Last tick time = 2016.02.29 09:54:41.000
2021.01.18 11:49:18.580 CopyTicks (EURUSD,H1)   First tick time = 2011.12.19 00:00:08.000
2021.01.18 11:49:18.580 CopyTicks (EURUSD,H1)   current_time=2021.01.18 11:49
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   1. 2021.01.18 00:02.617 Ask=1.20879 Bid=1.20879 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   2. 2021.01.18 00:02.635 Bid=1.20879 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   3. 2021.01.18 00:02.472 Ask=1.20884 Bid=1.20884 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   4. 2021.01.18 00:03.121 Ask=1.20859 Bid=1.20859 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   5. 2021.01.18 00:03.218 Bid=1.20859 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   6. 2021.01.18 00:03.878 Ask=1.20865 Bid=1.20865 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   7. 2021.01.18 00:03.628 Ask=1.20859 Bid=1.20859 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   8. 2021.01.18 00:03.565 Bid=1.20859 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   9. 2021.01.18 00:03.630 Ask=1.20866 Bid=1.20866 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   10. 2021.01.18 00:03.819 Bid=1.20866 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   11. 2021.01.18 00:03.313 Ask=1.20859 Bid=1.20859 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   12. 2021.01.18 00:03.488 Ask=1.2086 Bid=1.2086 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   13. 2021.01.18 00:03.355 Ask=1.20865 Bid=1.20865 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   14. 2021.01.18 00:03.105 Ask=1.20859 Bid=1.20859 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   15. 2021.01.18 00:04.061 Ask=1.20856 Bid=1.20856 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   16. 2021.01.18 00:04.058 Ask=1.20853 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   17. 2021.01.18 00:04.062 Ask=1.20852 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   18. 2021.01.18 00:04.056 Bid=1.20852 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   19. 2021.01.18 00:04.056 Ask=1.20853 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   20. 2021.01.18 00:04.064 Bid=1.20853 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   21. 2021.01.18 00:04.058 Bid=1.20853 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   22. 2021.01.18 00:04.715 Ask=1.20844 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   23. 2021.01.18 00:04.063 Bid=1.20844 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   24. 2021.01.18 00:04.878 Ask=1.20849 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   25. 2021.01.18 00:04.034 Ask=1.20844 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   26. 2021.01.18 00:04.455 Ask=1.20838 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   27. 2021.01.18 00:05.296 Ask=1.20837 Bid=1.20837 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   28. 2021.01.18 00:05.354 Ask=1.20809 Bid=1.20809 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   29. 2021.01.18 00:05.464 Ask=1.20875 Bid=1.20875 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   30. 2021.01.18 00:05.471 Ask=1.20822 Bid=1.20822 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   31. 2021.01.18 00:05.383 Ask=1.20818 Bid=1.20818 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   32. 2021.01.18 00:05.207 Ask=1.2082 Bid=1.2082 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   33. 2021.01.18 00:05.913 Ask=1.20818 Bid=1.20818 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   34. 2021.01.18 00:05.446 Ask=1.20816 Bid=1.20816 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   35. 2021.01.18 00:05.450 Ask=1.20818 Bid=1.20818 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   36. 2021.01.18 00:05.583 Ask=1.20816 Bid=1.20816 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   37. 2021.01.18 00:05.478 Ask=1.20818 Bid=1.20818 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   38. 2021.01.18 00:06.473 Ask=1.2082 Bid=1.2082 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   39. 2021.01.18 00:06.024 Ask=1.20819 Bid=1.20819 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   40. 2021.01.18 00:06.752 Ask=1.20816 Bid=1.20816 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   41. 2021.01.18 00:06.752 Ask=1.20815 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   42. 2021.01.18 00:06.752 Ask=1.20816 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   43. 2021.01.18 00:06.752 Ask=1.20815 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   44. 2021.01.18 00:06.420 Ask=1.2083 Bid=1.2083 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   45. 2021.01.18 00:06.527 Ask=1.20829 Bid=1.20829 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   46. 2021.01.18 00:06.085 Ask=1.20823 Bid=1.20823 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   47. 2021.01.18 00:06.485 Ask=1.20824 Bid=1.20824 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   48. 2021.01.18 00:06.520 Ask=1.20823 Bid=1.20823 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   49. 2021.01.18 00:06.099 Ask=1.20824 Bid=1.20824 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   50. 2021.01.18 00:06.407 Ask=1.20825 Bid=1.20825 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   51. 2021.01.18 00:06.506 Ask=1.20824 Bid=1.20824 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   52. 2021.01.18 00:06.840 Ask=1.20825 Bid=1.20825 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   53. 2021.01.18 00:06.799 Ask=1.20824 Bid=1.20824 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   54. 2021.01.18 00:06.123 Ask=1.20825 Bid=1.20825 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   55. 2021.01.18 00:06.572 Ask=1.20824 Bid=1.20824 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   56. 2021.01.18 00:06.657 Ask=1.20823 Bid=1.20823 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   57. 2021.01.18 00:06.144 Ask=1.20824 Bid=1.20824 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   58. 2021.01.18 00:06.589 Ask=1.20823 Bid=1.20823 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   59. 2021.01.18 00:06.096 Ask=1.20822 Bid=1.20822 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   60. 2021.01.18 00:06.126 Ask=1.20823 Bid=1.20823 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   61. 2021.01.18 00:07.266 Ask=1.20817 Bid=1.20817 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   62. 2021.01.18 00:07.390 Ask=1.20816 Bid=1.20816 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   63. 2021.01.18 00:07.666 Ask=1.20817 Bid=1.20817 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   64. 2021.01.18 00:07.816 Ask=1.20824 Bid=1.20824 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   65. 2021.01.18 00:07.124 Ask=1.20828 Bid=1.20828 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   66. 2021.01.18 00:07.100 Bid=1.20828 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   67. 2021.01.18 00:07.163 Ask=1.20827 Bid=1.20827 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   68. 2021.01.18 00:07.719 Ask=1.20822 Bid=1.20822 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   69. 2021.01.18 00:07.342 Ask=1.2082 Bid=1.2082 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   70. 2021.01.18 00:07.464 Ask=1.20823 Bid=1.20823 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   71. 2021.01.18 00:08.728 Ask=1.2082 Bid=1.2082 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   72. 2021.01.18 00:08.826 Ask=1.20818 Bid=1.20818 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   73. 2021.01.18 00:08.510 Ask=1.2082 Bid=1.2082 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   74. 2021.01.18 00:08.172 Ask=1.20813 Bid=1.20813 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   75. 2021.01.18 00:08.918 Ask=1.20817 Bid=1.20817 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   76. 2021.01.18 00:08.051 Ask=1.20814 Bid=1.20814 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   77. 2021.01.18 00:08.527 Ask=1.20808 Bid=1.20808 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   78. 2021.01.18 00:08.970 Ask=1.20811 Bid=1.20811 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   79. 2021.01.18 00:08.594 Ask=1.20814 Bid=1.20814 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   80. 2021.01.18 00:09.525 Bid=1.20814 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   81. 2021.01.18 00:09.118 Ask=1.20817 Bid=1.20817 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   82. 2021.01.18 00:09.405 Ask=1.20803 Bid=1.20803 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   83. 2021.01.18 00:09.745 Bid=1.20803 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   84. 2021.01.18 00:09.491 Ask=1.20813 Bid=1.20813 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   85. 2021.01.18 00:09.582 Ask=1.20812 Bid=1.20812 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   86. 2021.01.18 00:10.826 Bid=1.20812 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   87. 2021.01.18 00:10.328 Ask=1.20797 Bid=1.20797 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   88. 2021.01.18 00:10.451 Bid=1.20797 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   89. 2021.01.18 00:10.559 Ask=1.208 Bid=1.208 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   90. 2021.01.18 00:10.684 Ask=1.20801 Bid=1.20801 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   91. 2021.01.18 00:10.412 Ask=1.208 Bid=1.208 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   92. 2021.01.18 00:10.964 Ask=1.2081 Bid=1.2081 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   93. 2021.01.18 00:10.228 Ask=1.20805 Bid=1.20805 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   94. 2021.01.18 00:10.668 Ask=1.20803 Bid=1.20803 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   95. 2021.01.18 00:10.668 Bid=1.20803 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   96. 2021.01.18 00:10.675 Bid=1.20803 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   97. 2021.01.18 00:10.675 Bid=1.20803 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   98. 2021.01.18 00:11.068 Ask=1.20805 Bid=1.20805 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   99. 2021.01.18 00:11.068 Ask=1.20804 (Info tick)
2021.01.18 11:49:18.581 CopyTicks (EURUSD,H1)   100. 2021.01.18 00:11.497 Ask=1.20801 (Info tick)

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

Я пытаюсь получить отметки за разное время. Я использовал функцию CopyTicksRange (). Раньше он работал нормально.

Но он внезапно перестал работать. Я очень разочарован таким поведением функции.

Пожалуйста, объясните мне, почему это происходит? Как лучше всего получить тики с помощью Time range с гарантией?

Я пытался вызвать эту функцию несколько раз, потому что думал, что для загрузки данных Ticks требуется время. Но все время, когда я пытался, длина копируемых тиков была равна -1.

Пожалуйста, дайте мне знать, что я могу сделать.

Я установил Инструменты -> Вариант -> Графики -> Максимальное количество столбцов в диаграмме на Неограниченное. Я пробовал следующий код:

ulong(TimeCurrent() + 60) * 1000 это время в будущее. Там тиков ещё нет. А от какого времени пытаетесь получить тики неизвестно. Попробуйте поставить так

int len = CopyTicksRange(Orig_Symbol_Name, ticks_add, COPY_TICKS_ALL, ulong(TimeCurrent() - 60)*1000, ulong(TimeCurrent()) * 1000);

Это будут тики за последние 60 секунд

 
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 0
bool terminal_connected, Filled_Complete;
input int GO_BACK_HISTORY_LOAD = 30;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   string name = MQLInfoString(MQL_PROGRAM_NAME);
   IndicatorSetString(INDICATOR_SHORTNAME, name);
   terminal_connected = (bool)TerminalInfoInteger(TERMINAL_CONNECTED);
   ResetLastError();
   Filled_Complete = true;

   if(Fill_Ticks_Symbol(Symbol()) < 0)
     {
      Filled_Complete = false;
     }
   EventSetMillisecondTimer(100);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   if(terminal_connected == false || Filled_Complete == false)
     {
      if(Fill_Ticks_Symbol(Symbol()) > 0)
        {
         Filled_Complete = true;
        }
      if(TerminalInfoInteger(TERMINAL_CONNECTED) == true)
         terminal_connected = true;
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(TerminalInfoInteger(TERMINAL_CONNECTED) == false)
      terminal_connected = false;
  }

//+------------------------------------------------------------------+
int Fill_Ticks_Symbol(string Orig_Symbol_Name)
  {
   MqlDateTime str;
   TimeToStruct(iTime(Orig_Symbol_Name, 0, 0) - GO_BACK_HISTORY_LOAD * 86400, str);
   Comment("");
   datetime start_date = datetime(StringFormat("%d.%d.01 00:00:00",str.year,str.mon));
   MqlTick ticks_add[];

   ulong time_start = GetMicrosecondCount();
//int len = CopyTicksRange(Orig_Symbol_Name, ticks_add, COPY_TICKS_ALL, ulong(start_date)*1000, ulong(TimeCurrent())*1000);

   Print("Gathering Ticks from : ", iTime(Orig_Symbol_Name, 0, 0) - GO_BACK_HISTORY_LOAD * 86400, " To: ", TimeCurrent());

   int len = CopyTicksRange(Orig_Symbol_Name, ticks_add, COPY_TICKS_ALL, ulong(start_date)*1000, ulong(TimeCurrent() + 60) * 1000);
   int count = 0;
   while(len<=0 && count<5 && !IsStopped())
     {
      Sleep(100);
      len = CopyTicksRange(Orig_Symbol_Name, ticks_add, COPY_TICKS_ALL, ulong(start_date)*1000, ulong(TimeCurrent() + 60) * 1000);
      count++;
     }
   if(len<=0)
     {
      Print("The History Len was found to be : ", len);
      return -1;
     }
   Print("Started : ",ticks_add[0].time,"  Ended : ",ticks_add[len-1].time);
   return len;
  }
//+------------------------------------------------------------------+

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

 
Не могли бы вы предложить мне сейчас? Я пробовал приведенный выше пример. Иногда это срабатывает. Но не всегда.
 
jaffer wilson:
Не могли бы вы предложить мне сейчас? Я пробовал приведенный выше пример. Иногда это срабатывает. Но не всегда.

Попробуйте такой вариант

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   if(rates_total == 0)
     {
      if(Fill_Ticks_Symbol(Symbol()) <= 0)
        return 0;
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
Таким образом индикатор будет ждать загрузки тиков.
 
Alexey Viktorov :

Попробуйте такой вариант

Таким образом индикатор будет ждать загрузки тиков.

Думаю, никакой разницы не будет. Потому что проблема связана с функцией MQL5, а не с той, которую я создал.

 
jaffer wilson:

Думаю, никакой разницы не будет. Потому что проблема связана с функцией MQL5, а не с той, которую я создал.

Вы уже не первый раз высказываете не проверенное мнение. Что вам мешает проверить?

Попробуйте посчитать сколько программистов mql5 работают с функцией CopyTicksRange() и ни у кого нет проблем. Вы единственный, только у вас такое поведение функции.

 
Alexey Viktorov #:

Вы уже не первый раз высказываете не проверенное мнение. Что вам мешает проверить?

Попробуйте посчитать сколько программистов mql5 работают с функцией CopyTicksRange() и ни у кого нет проблем. Вы единственный, только у вас такое поведение функции.


Очень смелое утверждение, Алексей.


Я работаю с функцией CopyTicksRange() и она постоянно работает неправильно. Чтобы заставить ее работать правильно, приходится подбирать входные параметры так, чтобы она давала вразумительный результат. Два года я вынуждено пользуюсь этой функцией и нахожу все новые глюки. Поддержка постоянно игнорирует все вопросы касаемо этой функции.  Скорее всего им лень этим заниматься, т.к. там косяк на косяке. 

Для примера, что может неожиданного делать эта функция:


1) вернуть тики не входящие в запрашиваемый диапазон

2) вернуть все тики текущего бара вместо запрашиваемой части этого бара

3) вернуть мусор, т.е. вообще непонятно что за тики

4) пропустить часть тиков


А самое гениальное это был совет кого то из поддержки делать костыли - т.е. если я знаю, в каких ситуациях функция глючит, то надо перефразировать запрос, чтобы не глючила. С тех пор я так и делаю :) 


Вот вчерашний пример, против которого я сейчас ищу костыль:


MqlTick Ticks[1000000];

int AddTicks(ulong tFrom_msc,ulong tTo_msc,ulong &lt)
{

   int  received=CopyTicksRange("@BR",Ticks,COPY_TICKS_ALL,tFrom_msc,tTo_msc);
   
   PrintFormat("CopyTicksRange:  %s:%d - %s:%d  received %d",TimeToString(tFrom_msc/1000),tFrom_msc%1000,TimeToString(tTo_msc/1000),tTo_msc%1000,received);
   
   if(received>0)
   {
       PrintFormat("%s:%d - first tick, %s:%d - last tick", 
                              TimeToString(Ticks[0].time_msc/1000),           Ticks[0].time_msc%1000, 
                              TimeToString(Ticks[received-1].time_msc/1000),  Ticks[received-1].time_msc%1000
                              );
                              
       lt= Ticks[received-1].time_msc ;                   
   }
   return received;
}

А вот косяк:

2021.09.18 18:10:26.541 TesterEx ($BR,H1)       CopyTicksRange:  2021.01.29 23:56:864 - 2021.01.31 23:59:999  received 109425
2021.09.18 18:10:26.541 TesterEx ($BR,H1)       2021.01.29 00:02:782 - first tick, 2021.01.29 23:56:863 - last tick

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

 
RusPro #:


Очень смелое утверждение, Алексей.


Я работаю с функцией CopyTicksRange() и она постоянно работает неправильно. Чтобы заставить ее работать правильно, приходится подбирать входные параметры так, чтобы она давала вразумительный результат. Два года я вынуждено пользуюсь этой функцией и нахожу все новые глюки. Поддержка постоянно игнорирует все вопросы касаемо этой функции.  Скорее всего им лень этим заниматься, т.к. там косяк на косяке. 

Для примера, что может неожиданного делать эта функция:


1) вернуть тики не входящие в запрашиваемый диапазон

2) вернуть все тики текущего бара вместо запрашиваемой части этого бара

3) вернуть мусор, т.е. вообще непонятно что за тики

4) пропустить часть тиков


А самое гениальное это был совет когото из поддержки делать костыли - т.е. если я знаю, в каких ситуациях функция глючит, то надо перефразировать запрос, чтобы не глючила. С тех пор я так и делаю :) 

Я выделил ключевые слова.

НЕ запрашивайте тики которых ещё нет по определению. Если запросить тики хоть на одну миллисекунду дальше текущего времени в миллисекундах, то получите тот самый г………й в виде вами перечисленных проблем.

Причина обращения: