История котировок. Увы, опять ! - страница 3

 
Скрипт здесь https://www.mql5.com/ru/forum


Потерли ветку. Господа, будьте любезны, вышлите этот скриптик мне на deepspace-(dog)mail.ru
или положите в этой ветке. Спасибо.


Вот в эту строку нужно внести все инструменты, которыми Вы пользуетесь:
string list[]={"EURUSD","USDJPY"};
Я просто только на EURUSD играю, а USDJPY - просто так возможно для будущих применений.

#property copyright "mandorr@gmail.com"
#include <WinUser32.mqh>
 
void start()
   {
   if (MessageBox("Закачать все котировки?    ","Скрипт",MB_YESNO|MB_ICONQUESTION)!=IDYES) return;
   double x;
   string list[]={"EURUSD","USDJPY"};
   for (int i=0; i<ArraySize(list); i++)
      {
      Print("Закачивание котировок инструмента "+list[i]);
      x=iClose(list[i],PERIOD_M1 ,0);
      x=iClose(list[i],PERIOD_M5 ,0);
      x=iClose(list[i],PERIOD_M15 ,0);
      x=iClose(list[i],PERIOD_M30,0);
      x=iClose(list[i],PERIOD_H1 ,0);
      x=iClose(list[i],PERIOD_H4 ,0);
      x=iClose(list[i],PERIOD_D1 ,0);
      x=iClose(list[i],PERIOD_W1 ,0);
      }
   }



Также наверное этот код (разумеется без окошка с вопросом - оно здесь лишнее) можно внести в функцию init() советника. Я так и сделаю пожалуй. Время от времени имею обычай перезагружать терминал с советником. И это сэкономит лишнюю операцию на запуск скрипта закачки вручную.

 

Также наверное этот код (разумеется без окошка с вопросом - оно здесь лишнее) можно внести в функцию init() советника. Я так и сделаю пожалуй. Время от времени имею обычай перезагружать терминал с советником. И это сэкономит лишнюю операцию на запуск скрипта закачки вручную.


Благодарю, solandr.
 
Также наверное этот код (разумеется без окошка с вопросом - оно здесь лишнее) можно внести в функцию init() советника. Я так и сделаю пожалуй. Время от времени имею обычай перезагружать терминал с советником. И это сэкономит лишнюю операцию на запуск скрипта закачки вручную.

Поэкспериментировал с внесением кода закачки в функцию init() советника.
На одном компе, который P4 2,4ГГц он работает прекрасно, а на другом где проц VIA 800МГц при большом количестве баров истории (М1 >0,5млн) почему-то происходит мёртвое зависание терминала на стадии инициализации эксперта (билд 191, пока что 192 билд брокер не предоставляет для обновления). Поскольку объяснить такое странное поведение я не смог, то просто перенёс данный код в функцию start(), ограничив при этом частоту скачек котировок например периодичностью раз в час (хотя очевидно, что достаточно это делать гораздо реже - но это уже дело вкуса). Вот пример кода, который я поместил в функцию start():
if(min==55 && zakachka)
{
    zakachka=false;
    //Закачка котировок
   double x;
   string list[]={"EURUSD","USDJPY"};
   for (i=0; i<ArraySize(list); i++)
      {
      Print("Закачивание котировок инструмента "+list[i]);
      x=iClose(list[i],PERIOD_M1 ,0);
      x=iClose(list[i],PERIOD_M5 ,0);
      x=iClose(list[i],PERIOD_M15 ,0);
      x=iClose(list[i],PERIOD_M30,0);
      x=iClose(list[i],PERIOD_H1 ,0);
      x=iClose(list[i],PERIOD_H4 ,0);
      x=iClose(list[i],PERIOD_D1 ,0);
      x=iClose(list[i],PERIOD_W1 ,0);
      }//Конец закачки котировок
}
if(min!=55) zakachka=true;


В глобальные переменные нужно внести bool zakachka=true;
Код нормально уже на протяжении дня работает и на слабенькой машинке тоже.

 

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


Я сразу поместил код в start(), добавил ограничение - подкачка происходит только в среду и в субботу.
Заметил особенность - если интернет или связь с сервером на момент запуска скрипта отсутствует, то скрипт отрабатывает,но ошибку не выдает(хотя я поставил проверку) - iClose просто возвращает значение последнего, закачанного ранее бара. Наверное, нужно поставить какую-то проверку на наличие соединения с сервером.
 
Наверное, нужно поставить какую-то проверку на наличие соединения с сервером.

Посмотрите пример, представленный в словаре MetaEditor в описании функции ArrayCopySeries. Идея заключается в контроле даты нулевого бара подкачиваемых данных.