Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
alex76
73
alex76 2013.04.14 17:47 

Всем привет !

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

Спасибо !

 Александр 

Vadim Zhunko
5227
Vadim Zhunko 2013.04.14 18:04  

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

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

 

 //=================================================================================================================================================
 // 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); // Системный дескриптор окна графика, для эмуляции тика для индикаторов.
 //=================================================================================================================================================
Mislaid
621
Mislaid 2013.04.14 19:01  

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

Рустам
3597
Рустам 2013.04.14 19:06  
//+------------------------------------------------------------------+
//|                                                       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);
  }
//+------------------------------------------------------------------+
Алексей Тарабанов
7275
Алексей Тарабанов 2013.04.14 21:14  
FAQ:

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

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

alex76
73
alex76 2013.04.15 04:33  
Спасибо !!!!
Vadim Zhunko
5227
Vadim Zhunko 2013.04.15 11:09  
tara:

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

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

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

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

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

Dmitry Fedoseev
43474
Dmitry Fedoseev 2013.04.15 12:20  
tara:

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

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


и без лишних понтов
TarasBY
1744
TarasBY 2013.04.15 12:59  

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

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

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

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

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

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

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

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