User History File - страница 3

 
Еще раз повторю: пока файл не закрыт - нет никаких гарантий корректного использования файла.
Соответственно, пока эксперт не завершен(не закрыт файл) - будут проблемы.

Интересно, а со Slawo'й вы понимаете друг друга ?
В этой же теме он поставил пост, где рекомендует мне посмотреть ваш script
period_converter. Там и история в файл пишется и график с этой историей тут же обновляется. Я попробовал. Действительно, можно экспертом с одного графика
писать историю и тут же на другом графике ее отображать. И закрывать файл для
этого не нужно. Поначалу я думал - ошибка и даже задал об этом вопрос #3.
Оказывается - все так и предусмотрено. Классное решение, мне понравилось.

Но мои проблемы возникали не в этой ситуации. Я как раз ЗАКРЫВАЛ график с экспертом (или отключал эксперта), а потом уже загружал другой профиль и там
открывал автономно график с записанным файлом. И он читался только частично.
Об этом и были первые 2 вопроса. Так что о закрытии файла давайте больше не
будем. Если других вариантов нет, то попытаюсь разобраться сам.
 
Интересно, а со Slawo'й вы понимаете друг друга ?

Да, промашка вышла. Извиняюсь. Пример Славы правильный.
 
Yurixx посмотрите наш пример period_converter - там идёт запись в файл и даётся команда графику на обновление этих данных.


Slawa, поясните все-таки по поводу команды на обновление данных и закроем тему.
Правильно ли я понял, что команда на обновление данных на графике это
PostMessageA(hwnd,WM_COMMAND,33324,0);


Если да, то дайте ее описание. Я его нигде не нашел.
Если нет, то скажите какая и где описана.

 
Если да, то дайте ее описание. Я его нигде не нашел.
Если нет, то скажите какая и где описана.

Она нигде не описана и не будет описана - просто одиночная недокументированная возможность.
 
Если да, то дайте ее описание. Я его нигде не нашел.
Если нет, то скажите какая и где описана.


Эта функция виндусовая и к МТ непосредственно отношения не имеет.
Описания в Win32 API (там еще несколько сот подобных функций :)).

Она ставит в очередь сообщений для окна hwnd команду WM_COMMAND с параметром 33324, что видимо соответствует выбору пункта меню Refresh в этом окне.
(у каждого пункта меню свой код)

Вообще через эту функцию можно полностью управлять любым приложением/окном (сделать то же, что может сделать юзер с клавы и мыши), если знать его hwnd и список кодов.

В часности вот такой код индикатора:

#include <WinUser32.mqh>
..............
int start()
{
   ........
   for ( int i = limit; i >= 0; i -- )
   {
      ...........
      Idle();
   }
}

int hwnd = 0;
int Idle()
{
   if (hwnd == 0) hwnd = WindowHandle(Symbol(),Period());
   if (hwnd != 0) SendMessageA(hwnd,0,0,0);
}


как будто позволяет устранить зависания терминала при пуске и смене таймфрейма
(если они не связаны с подкачкой данных)

Здесь в очередь для окна hwnd посылается пустое сообщение,
и разрешается отработать те сообщения (от мыши и клавы) которые уже есть в очереди.
В результате продолжая обсчитывать индикатор МТ не виснет и реагирует на действия пользователя.

 
Кстати, этой функцией (SendMessageA или PostMessageA) можно сделать почти все, о чем мы просим разработчиков самим :))

Правда это довольно сложно и наверное работать будеть не так быстро как на С, но сделать можно.
 
Кстати, этой функцией (SendMessageA или PostMessageA) можно сделать почти все, о чем мы просим разработчиков самим :))

Правда это довольно сложно и наверное работать будеть не так быстро как на С, но сделать можно.


Спасибо, Mak, кое-что прояснилось.
Причина обращения: