программное принудительное обновление графика

 

Всем привет !

У меня есть МТ4 с большим кол-вом одновременно открытых графиков (около 100) , в результате при запуске МТ4 очень многие графики не обновляются автоматически(это или баг терминала, или баг брокера). Никакие ухищрения не помогают обновлять графики, единственный вариант который работает - на каждом не обновленном графике жмакать правую кнопку мыши и кликать на пункт меню - "обновить". Внимание, вопрос - Есть-ли возможность прицепить на график какой-то скрип или советник, который программным образом эмулировал-бы команду "обновить" на графике ? 

Спасибо !

 Александр 

 

Возможность есть. На форуме много такого предлагалось.

Есть библиотека.

 

 //=================================================================================================================================================
 // 4.7. Функции для управления обновлением графика.
 //=================================================================================================================================================
 // 4.7.1. Функция запускает обновление всех графиков с указанным периодом. Если обновление уже запущено, то функция меняет период обновления графиков.
 //        Останавливается обновление функциями "ServiceStopRefreshChart()" или "ServiceStopRefreshAllCharts()" или закрытием графика.
 void ServiceRefreshAllCharts(int nPeriodMilliSec); // Период обновления графика в миллисекундах.
 //=================================================================================================================================================
 // 4.7.2. Функция запускает обновление всех графиков однократно. Вызов функции при работающих других режимах останавливает обновление всех графиков.
 void ServiceRefreshAllOnceCharts();
 //=================================================================================================================================================
 // 4.7.3. Функция запускает обновление указанного графика с указанным периодом. Если обновление уже запущено, то функция меняет только период обновления графика.
 //        Останавливается обновление функциями "ServiceStopRefreshChart()" или "ServiceStopRefreshAllCharts()" или закрытием графика.
 void ServiceRefreshChart(int hwndChart,        // Системный дескриптор обновляемого графика.
                          int nPeriodMilliSec); // Период обновления графика в миллисекундах.
 //=================================================================================================================================================
 // 4.7.4. Функция останавливает обновление указанного графика.
 void ServiceStopRefreshChart(int hwndChart); // Системный дескриптор графика, на котором останавливается обновление.
 //=================================================================================================================================================
 // 4.7.5. Функция корректно останавливает обновление всех графиков при bTerminate = FALSE, иначе функция завершает обновление аварийно.
 void ServiceStopRefreshAllCharts(int bTerminate); // Флаг аварийной остановки потоков обновления графиков.
                                                   // FALSE - потоки останавливаются корректно, TRUE - потоки останавливаются аварийно.
 //=================================================================================================================================================
 // 4.7.6. Функция эммулирует тик для эксперта на указанном графике.
 void ServiceTickExpert(int hwndChart); // Системный дескриптор окна графика, для эмуляции тика для эксперта.
 //=================================================================================================================================================
 // 4.7.7. Функция эммулирует тик для индикаторов на указанном графике.
 void ServiceTickIndicators(int hwndChart); // Системный дескриптор окна графика, для эмуляции тика для индикаторов.
 //=================================================================================================================================================
 

У меня та же проблема. Полегче решения есть?

 
//+------------------------------------------------------------------+
//|                                                       iTicks.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#import "user32.dll"
   int   RegisterWindowMessageA(string lpstring);
   int   PostMessageA(int  hWnd,int  Msg,int  wParam,string lParam);
#import
extern int  delay_MSecond = 500;
 #define  WM_COMMAND                    0x0111
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   while(!IsStopped()){
      PostMessageA (WindowHandle (Symbol(), Period()), WM_COMMAND, 33324, 0);
      PostMessageA (WindowHandle (Symbol(), 0), RegisterWindowMessageA ("MetaTrader4_Internal_Message"), 2, 1);
      Sleep(delay_MSecond);
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
FAQ:

Никто не сказал "Спасибо"... 

Спасибо, Рустам. Как всегда - кратко и безупречно.  

 
Спасибо !!!!
 
tara:

Никто не сказал "Спасибо"... 

Спасибо, Рустам. Как всегда - кратко и безупречно.  

Алексей, это ты Рустама подкалываешь или и искренне веришь, что 4 строки кода лаконичнее одной? :-))

На всякий случай, если кто не понял. Функции из той библиотеки, кроме последних двух, управляют автономным обновления графика. Т.е. не нужны никакие эксперты и скрипты. Один раз запустил  из любой MQL4-программы и это будет работать пока сам не остановишь или до выгрузки терминала.

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

 
tara:

Никто не сказал "Спасибо"... 

Спасибо, Рустам. Как всегда - кратко и безупречно.  


и без лишних понтов
 

А как такие решения прикрутить к 100 графикам (см. 1-ый пост ТС)?

Библиотека у Вадима хорошая! И из всего набора, задействовав только две, получается "обновлятель" (в архиве).

P.S. Всё ИМХО: сколько голов - столько мнений. :)

P.P.S. При большом количестве открытых графиков, я бы не злоупотреблял периодом обновления. ;)

Файлы:
refresh_3.zip  1497 kb
 
У разных людей, при взгяде на одни и те же процессы, возникают разные мысли (и это нормально): одни искренне хотят усовершенствовать реализацию наблюдаемого процесса, у других всё сводится к "рагам"... :)))
 

Кстати, проверьте, это только у меня на новом билде ВСЕ графики обновляет вместо одного, или это новая фича такая ?

ЗЫ. Не надо мне "спасиба", обычно на этом форуме это выливается в меряние письками и свару...  как нибудь обойдусь. 

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