Обсуждение статьи "Графические интерфейсы X: Расширенное управление списками и таблицами. Оптимизация кода (build 7)" - страница 3
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Толь, понимаю, что не в эту тему, но раз уж последнее обновление...
В общем: заметил давно, но ждал когда выйдет это обновление (вдруг пофиксено будет, ан нет...).
Если есть окно с графиком (CStandartChart), и есть окно, расположенное поверх субграфика, то, если пропала связь с сервером, а потом восстановилась, то объект-график становится выше остальных окон.
Надо бы как-то перерисовывать самое верхнее окно. Понятно, что сиё можно в своём CProgram отследить, но мне кажется, что библиотека должна такие вещи делать.
(Тормозит сильно, но это скорее всего из-за реалтайм-записи)
...
Если есть окно с графиком (CStandartChart), и есть окно, расположенное поверх субграфика, то, если пропала связь с сервером, а потом восстановилась, то объект-график становится выше остальных окон.
Надо бы как-то перерисовывать самое верхнее окно. Понятно, что сиё можно в своём CProgram отследить, но мне кажется, что библиотека должна такие вещи делать.
(Тормозит сильно, но это скорее всего из-за реалтайм-записи)
Хорошо, спасибо за сообщение. Не тестировал ещё с отключением/возобновлением связи. Посмотрю, что можно сделать.
А чего такие тормоза сильные? С помощью какой программы запись ведётся? Уж очень сильно тормозит. Выглядит так, что как будто процессор на все 100% загружен? Попробовал записывать через Fast Stone Capture и активно пользоваться графическим интерфейсом в MQL-приложении. Всё нормально, ничего так не тормозит.
Хорошо, спасибо за сообщение. Не тестировал ещё с отключением/возобновлением связи. Посмотрю, что можно сделать.
А чего такие тормоза сильные? С помощью какой программы запись ведётся? Уж очень сильно тормозит. Выглядит так, что как будто процессор на все 100% загружен? Попробовал записывать через Fast Stone Capture и активно пользоваться графическим интерфейсом в MQL-приложении. Всё нормально, ничего так не тормозит.
Artyom Trishkin:
...
Но у меня, кстати, и без реалтайм записи тоже подтормаживает.
Объектов-то очень много.
И в таймере приходится сканировать много символов на предмет пересечения ценой уровней, которые для каждого символа - свой соответственно, да и список символов динамический, и его тоже нужно контролировать на предмет изменения.
...И с какой частотой эти проверки делаются?
Таймер:
//| Таймер |
//+------------------------------------------------------------------+
void CProgram::OnTimerEvent(void)
{
CWndEvents::OnTimerEvent();
//---
static int count=0;
if(count<500)
{
count+=TIMER_STEP_MSC;
return;
}
//--- Обнулить счётчик
count=0;
//--- Отлавливаем изменение в Обзоре рынка
if(IsChangeSymbolListInMW()) {
UpdateAllDataAndTables();
}
//--- Ловим появление новых баров
bool need_update=false;
for(int i=0; i<ArraySize(m_array_new_bar); i++) {
if(m_array_new_bar[i].isNewBar()>0) {
string sy=m_array_new_bar[i].GetSymbol();
ENUM_TIMEFRAMES timeframe=m_array_new_bar[i].GetPeriod();
Print("Новый бар ",sy," на ",GetNameTF(timeframe));
if(timeframe==PERIOD_D1) {
for(int j=0; j<ArraySize(m_array_symbols_new_sig_d1); j++) delete m_array_symbols_new_sig_d1[j].symbol_tick;
ZeroMemory(m_array_symbols_new_sig_d1);
}
if(timeframe==PERIOD_W1) {
for(int j=0; j<ArraySize(m_array_symbols_new_sig_w1); j++) delete m_array_symbols_new_sig_w1[j].symbol_tick;
ZeroMemory(m_array_symbols_new_sig_w1);
}
if(timeframe==PERIOD_MN1) {
for(int j=0; j<ArraySize(m_array_symbols_new_sig_mn); j++) delete m_array_symbols_new_sig_mn[j].symbol_tick;
ZeroMemory(m_array_symbols_new_sig_mn);
}
need_update=true;
}
}
if(need_update) {
UpdateAllDataAndTables();
}
//--- Изменение текстов значений в главном окне
short row=(short)m_table_base_symbol_list.SelectedItem();
ChangeTextData(row);
//--- Ищем критерии уведомлений D1, W1, MN1
GetNotify(m_sorted_struct_symbols_d1,m_array_symbols_new_sig_d1,PERIOD_D1);
GetNotify(m_sorted_struct_symbols_w1,m_array_symbols_new_sig_w1,PERIOD_W1);
GetNotify(m_sorted_struct_symbols_mn,m_array_symbols_new_sig_mn,PERIOD_MN1);
//--- Перерисовать график
m_chart.Redraw();
}
//+------------------------------------------------------------------+
Таймер:
Обязательно ли проверку условий такого рода делать именно в таймере?
Если в таймере, то зачем так часто?
Можно попробовать уменьшить шаг, а также для каждой группы условий установить свой интервал. Для этого добавил класс CTimeCounter. Прочитай ещё раз статью, чтобы понять, как это использовать. Раздел: Приложение для теста элемента
Обязательно ли проверку условий такого рода делать именно в таймере?
Если в таймере, то зачем так часто?
Можно попробовать уменьшить шаг, а также для каждой группы условий установить свой интервал. Для этого добавил класс CTimeCounter. Прочитай ещё раз статью, чтобы понять, как это использовать. Раздел: Приложение для теста элемента
Да, я уже думаю над этим.
Проверку на новый бар можно конечно и реже сделать - не критично. А вот проверку на пересечение ценами уровней на некоторых символах (их список меняется динамически, соответственно, и динамически добавляются/удаляются экземпляры класса работы с тиками) нужно делать достаточно часто чтобы успевать вовремя определять факты пересечений.
Когда прочитал о том, что для разных событий теперь можно иметь свой интервал, так сразу и задумался о такой необходимости.
... А вот проверку на пересечение ценами уровней на некоторых символах (их список меняется динамически, соответственно, и динамически добавляются/удаляются экземпляры класса работы с тиками) нужно делать достаточно часто чтобы успевать вовремя определять факты пересечений.
Ну так, если с тиками работаешь, то в OnTick() тогда лучше эти проверки делать. Зачем в таймер долбиться каждые 16 мс ?
Так мультивалютный же. Какой OnTick() ?
Через события тогда. Но никак не через таймер с такой частотой. В общем, тормоза с твоей стороны, а не со стороны библиотеки или записи видео. У меня больше вопросов нет.