Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
IgorM М
4801
IgorM М 2010.12.13 21:53 

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

//+------------------------------------------------------------------+
//|                                                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 М
4801
IgorM М 2010.12.14 13:59  
н..да, наверно плохи дела на форуме - программисты закончились, "цветет и пахнет" только флуд, даже по обыкновению послать еще раз в поиск и то поленились ;)
Alexandr Bryzgalov
29395
Alexandr Bryzgalov 2010.12.14 14:09  
IgorM:
н..да, наверно плохи дела на форуме - программисты закончились, "цветет и пахнет" только флуд, даже по обыкновению послать еще раз в поиск и то поленились ;)

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

NIkolay2000
624
NIkolay2000 2010.12.14 14:13  
IgorM:

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

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

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

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

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




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

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

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


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

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

NIkolay2000
624
NIkolay2000 2010.12.14 14:29  
IgorM:




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

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

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



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

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

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

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

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

NIkolay2000
624
NIkolay2000 2010.12.14 15:23  
IgorM:



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


ясно
Vadim Zhunko
5226
Vadim Zhunko 2010.12.14 17:24  

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

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

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



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

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

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

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

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

Vadim Zhunko
5226
Vadim Zhunko 2010.12.14 17:39  

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

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

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

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

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

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

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

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

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

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

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

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий