Скачать MetaTrader 5

Нужна функция наподобие RefreshRates(), которая выполняла бы обновление независимо от каких-либо условий

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
markos
141
markos  
RefreshRates() - "Данные могут не обновиться только по той причине, что они соответствуют текущему состоянию клиентского терминала". Для моих целей необходимо обновлять данные в предопределенных переменных и массивах-таймсериях независимо от каких-либо условий.
Подскажите, знатоки mql4, какую-то подобную функцию или может можно с RefreshRates() снять ограничение ?????
Slava
Модератор
6918
Slava  

Ещё раз перечитайте.

Если данные в актуальном состоянии (то есть после последнего раза не пришло ни одного тика) то зачем их обновлять? Что Вы хотите получить после принудительного обновления? Данные же те же самые останутся.

markos
141
markos  
В ходе работы эксперт создает исторические данные разных таймфреймов несуществующей валюты, назовем ее, "UnrealCur". После создания эксперт должен анализировать график созданной истории: (!) получать значения индикаторов для только что созданного графика.

Проблема. Данные истории за время работы эксперта изменяются несколько раз для всех баров, а данные индикаторов обновляются только для 0-го и 1-го баров и в итоге для текущего момента значение индикатора рассчитывается неверно.

Алгоритм создания истории я позаимствовал из PeriodConverter. Оттуда же функцию обновления графика PostMessageA(hwnd,WM_COMMAND,33324,0); из библиотеки WinUser32.mqh. Нужна какая-то функция, которая бы обновляла значения индикаторов для всех баров.

P.S. Пожалуйста, не спрашивайте по какому принципу создается график "валюты" UnrealCur. Это типа ноу-хау, как мне кажется, и об этом я не хочу говорить. Тем более еще не проверено в работе.
Slava
Модератор
6918
Slava  

Если Вы обновляете данные через PostMessage, то и индикаторы должны считаться заново, для всех баров, без каких-либо дополнительных действий.

Dmitry Fedoseev
43509
Dmitry Fedoseev  
markos31181:
RefreshRates() - "Данные могут не обновиться только по той причине, что они соответствуют текущему состоянию клиентского терминала". Для моих целей необходимо обновлять данные в предопределенных переменных и массивах-таймсериях независимо от каких-либо условий.
Подскажите, знатоки mql4, какую-то подобную функцию или может можно с RefreshRates() снять ограничение ?????

Здесь не  RefreshRates() надо, а RefreshHistory(), но такой нету.
Slava
Модератор
6918
Slava  
Integer писал (а):
markos31181:
RefreshRates() - "Данные могут не обновиться только по той причине, что они соответствуют текущему состоянию клиентского терминала". Для моих целей необходимо обновлять данные в предопределенных переменных и массивах-таймсериях независимо от каких-либо условий.
Подскажите, знатоки mql4, какую-то подобную функцию или может можно с RefreshRates() снять ограничение ?????

Здесь не RefreshRates() надо, а RefreshHistory(), но такой нету.

Так через PostMessage и можно отрефрешиться - это и есть RefreshHistory.
markos
141
markos  
График действительно обновляется, а вот RSI, например, обновляет только 0-й и 1-ый бары. Я думаю, что это происходит из-за самого алгоритма работы индикаторов - при поступлении нового тика индикаторы пересчитывают только текущий и предыдущий бары.  Можно, конечно, исправить RSI, поместить его в Пользовательские индикаторы и вызывать функцией iCustom.  Но хотелось бы 
отделаться "малой кровью". Хотелось бы с помощью какой-нибудь функции "перезапускать" индикаторы,  чтобы они пересчитывали все бары. Кроме того не все встроенные в MT4 индикаторы представлены в samples.
markos
141
markos  
markos31181:
 Можно, конечно, исправить RSI, поместить его в Пользовательские индикаторы и вызывать функцией iCustom.  
Сейчас попробовал так сделать. Получилось.
Но вопрос все еще в силе. Хотелось бы отделаться "малой кровью".
Sceptic Philozoff
Модератор
17844
Sceptic Philozoff  

markos31181 писал (а):
График действительно обновляется, а вот RSI, например, обновляет только 0-й и 1-ый бары. Я думаю, что это происходит из-за самого алгоритма работы индикаторов - при поступлении нового тика индикаторы пересчитывают только текущий и предыдущий


Тут, похоже, дело в алгоритме работы IndicatorCounted(), предназначенного для оптимизации вычислений. Наверно, Вам нужно, чтобы он проверял новизну истории везде - но какая тут тогда оптимизация вычислений? Значит, при RefreshHistory() он должен "забывать" все обсчитанное и обнуляться.
Alexandr Bryzgalov
29666
Alexandr Bryzgalov  

у меня то же вот время в оффлан_графике остановилось. )

как решил проблему?

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