Автоматическое обновление истории по всем ТФ

 

Поискал поиском по форуму коды и топики про загрузку истории, но вот про обновление истории по всем ТФ, не нашел, набросал такой скрипт:

//+------------------------------------------------------------------+
//|                                                UpdateHistory.mq4 |
//|                                                            IgorM |
//|                               https://www.mql5.com/ru/users/IgorM |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/IgorM"
#property show_inputs

extern int Pause_LoadHistory_sec = 30;

int period[9];

int start(){
   datetime time_server,time_serverold;
   int tmp;
   string s;
   time_serverold = 0;
   s = "";
   period[0] = PERIOD_M1;
   period[1] = PERIOD_M5;
   period[2] = PERIOD_M15;
   period[3] = PERIOD_M30;
   period[4] = PERIOD_H1;
   period[5] = PERIOD_H4;
   period[6] = PERIOD_D1;
   period[7] = PERIOD_W1;
   period[8] = PERIOD_MN1;
   while(!IsStopped()){
         time_server = TimeCurrent();
         tmp = time_server - time_serverold;
         if (tmp >Pause_LoadHistory_sec){
               s = "Downloading history on all timeframe....";
               time_serverold = time_server;
               loadhistory();
         }else s = StringConcatenate("Download history in ",Pause_LoadHistory_sec-tmp," sec");
         Comment(s);
   Sleep(1000);
   }
   Comment("");

return(0);
}
//_____________________________________________________________________
void loadhistory(){
   double high[];
   for(int i=0;i<9;i++){
         ArrayCopySeries(high,MODE_HIGH,NULL,period[i]);
         Sleep(100);
   }
}
//_____________________________________________________________________

 

Этот код написал, т.к. столкнулся с проблемой, что если советник у меня находится на Н1 и по закрытию бара на Н1 есть необходимость анализировать младшие ТФ, то часто бывает, что текущая история на младших ТФ не подгруженна и соответственно имею неправильные данные.

Код, кажется, работает корректно, хотелось бы обсудить насколько правильно я этим кодом буду подгружать историю по всем ТФ каждые 30 сек, или где могут быть "подводные камни", интересно глянуть на другие реализации такой задачи. Как будет вести себя подгрузка истории по разным инструментам(мультивалютная загрузка/обновление истории) если немного изменить этот код?

Файлы:
 
н..да, наверно плохи дела на форуме - программисты закончились, "цветет и пахнет" только флуд, даже по обыкновению послать еще раз в поиск и то поленились ;)
 
IgorM:
н..да, наверно плохи дела на форуме - программисты закончились, "цветет и пахнет" только флуд, даже по обыкновению послать еще раз в поиск и то поленились ;)

))), так все знали что ты сам себя ещё раз в поиск пошлёшь.

 
IgorM:

Поискал поиском по форуму коды и топики про загрузку истории, но вот про обновление истории по всем ТФ, не нашел, набросал такой скрипт:

Этот код написал, т.к. столкнулся с проблемой, что если советник у меня находится на Н1 и по закрытию бара на Н1 есть необходимость анализировать младшие ТФ, то часто бывает, что текущая история на младших ТФ не подгруженна и соответственно имею неправильные данные.

Код, кажется, работает корректно, хотелось бы обсудить насколько правильно я этим кодом буду подгружать историю по всем ТФ каждые 30 сек, или где могут быть "подводные камни", интересно глянуть на другие реализации такой задачи. Как будет вести себя подгрузка истории по разным инструментам(мультивалютная загрузка/обновление истории) если немного изменить этот код?

мне самому эта тема интересна. Сейчас есть скрипт который качает историю на 5 разных тайм фреймах. Но у меня минимальный тайм 15 минут. Рельно мне проще кажые 15 минут делать запрос по истории а потом внешним приложением читать это все дело по таймеру. Если хочеш глянуть мой скрипт могу выложить.
 
sanyooooook:

))), так все знали что ты сам себя ещё раз в поиск пошлёшь.




спс, искал ужо 2 раза, конкретно не нашел - хочу просто обновлять историю, а не закачать всю историю, глубина в 25 000  баров меня устроит

ЗЫ: я, кстати, "на поиск не посылаю", максимум уже "поисканые ссылки" даю ))) 

NIkolay2000:
мне самому эта тема интересна. Сейчас есть скрипт который качает историю на 5 разных тайм фреймах. Но у меня минимальный тайм 15 минут. Рельно мне проще кажые 15 минут делать запрос по истории а потом внешним приложением читать это все дело по таймеру. Если хочеш глянуть мой скрипт могу выложить.


О! живой человек! ;)

конечно выложите свой скрипт

 
IgorM:




О! живой человек! ;)

конечно выложите свой скрипт

Скрипт написан не сильно изысканно, ибо конкертно под мои нужды, тут валюта, и пять таймов, качает OHCL и дата/время. ГЛубину скачивания можно регулировать, там я еще в масивы заагнял котировки ММВБ. Сам сейчас в поисках терминалов где много всяких инструментов, бо нужно котировки и текущие и глубина истории в Х тысяч бар. Броко это круто но там с нефтянкой малая глубина истории. Поставил манирейн, дам фондовых рынков очень много, прикольно. Сегодня проверю глубину истории. А нефтняки нет. Сейчас ищу терминал где есть нефть, мазут, газ и все из этой оперы.
Файлы:
 
NIkolay2000:
   



спс, но увы, это не то, вернее у Вас та же проблема, что у меня  -Вы ведете запись данных в файл, но есть ли у Вас эти данные Вы не проверяете, а сразу пишите в файл

у меня, наоборот  - идет  подгрузка данных, с помощью ArrayCopySeries(high,MODE_HIGH,NULL,period[i]); 

а как бы проверить, что реально я сумел подгрузить эти данные, "голову уже сломал", есть "волшебная ошибка" ))

ERR_HISTORY_WILL_UPDATED 4066 Запрошенные исторические данные в состоянии обновления

 она даст мне сигнал, что нет данных, но нужно не зацикливаться и не мешать работать терминалу - нужен некий компромис, чтобы через 5 минут работы скрипта гарантированно иметь всегда свежую историю

 
IgorM:



спс, но увы, это не то, вернее у Вас та же проблема, что у меня -Вы ведете запись данных в файл, но есть ли у Вас эти данные Вы не проверяете, а сразу пишите в файл


ясно
 

По моему, совершеннее этого ещё ничего не придумано.

Там в библиотеке есть функция для закачки котировок. Она отличается от скрипта тем, что у неё нет интерфейса.

 
Zhunko:
По моему, совершеннее этого ещё ничего не придумано.



спс, видел этот скрипт и использовал, может быть я задачу не совсем ясно сформулировал, попробую еще так:

- включаю терминал, с помощью меню "Сервис - Архив котировок" закачиваю всю доступную историю по символу

- перезагружаю терминал и вешаю свой советник на Н1

- по закрытию бара на Н1,  мне необходимо анализировать младшие ТФ

как гарантированно обратиться к данным на М1, М15, М30 (возможно понадобится Н4, D1)? Т.е. с первого раза на одном тике?

 

Раньше использовал такой же код, как в первом посте. После недолгих тестов понял, что он не гарантирует закачку истории по выбраным таймсериям. Было много дыр в истории.

По этому остановился на обновлении графика.

Сейчас делаю консольное приложение, которое в паре с отдельной копией МТ4 в фоновом режиме будет подкачивать историю и сразу записывать в файлы истории средствами МТ4.

1. Консольное приложение запускается в ручную или индикатором или экспертом или скриптом.

2. Создаём папку с жёсткими и мягкими ссылками необходимых папок и файлов для работы копии МТ4.

3. Запускаем МТ4.

4. Запускаем скрипт для обновления всех инструментов и всех ТФ.

5. Выгружаем МТ4.

6. Ждём его полной выгрузки.

7. Собщаем всем об успешном завершении.

8. Таймер сработал - всё по новой... 

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