Вопрос по индикаторы на offline графиках

 
Ситация : Метатрейдер в офлайне, т.е не подключен ни к какому серверу котировок. Есть внешняя программа, которая генерит файл истории и посылает метатрейдеровскому окошку сообщение, что надо обновиться ( PostMessageA(mtWin, 0x0111, 33324, 0) ), Все работает хорошо, свечки рисует, но есть один недостаток. Если на offline окошко, наложить любой индикатор, хоть встроеный, хоть пользовательский, то проявляется такой баг: При отрисовке новой свечки, график свечей как и положено сдвигается влево, а индикатор так и остается на месте. Например. Последняя свеча 10:35, кидаем на график индикатор "фрактал", он рисует макс. фрактал в 10:30, пока все хорошо. Но вот появляется новая свеча (10:36), а фрактал уже рисуется не над 10:30, а над 10:31. Може кто сталкивался с такой проблемой и есть пути ее обхода?
 

Не знаю как помочь вам, но несколько подобная ситуация происходила у меня, когда советник на нестандартном тф работал.

На форуме в какой-то ветке такой способ нашел.

int init()
{
      logFileInit();
      if (useNotStandartTF == true) // вычислялся в logFileInit()
      {     // при нестандартном ТФ именно everyTick() будет выполнять на себе функцию start()
            while (!IsStopped())
            {     // пока тебя ничто не остановит, через 1.5 секунды прикидывайся Новым Тиком
                  everyTick();
                  Sleep(1500);
            }
      }
      return(0);
}

int start()
{     
      everyTick();
}
//+------------------------------------------------------------------+
//| Каждый тик :-)                                                   |
//+------------------------------------------------------------------+
int everyTick()
{
      RefreshRates();
      // ну и дальше все что в START() должно было быть
}
 
Cheshirscy >>:
Ситация : Метатрейдер в офлайне, т.е не подключен ни к какому серверу котировок. Есть внешняя программа, которая генерит файл истории и посылает метатрейдеровскому окошку сообщение, что надо обновиться ( PostMessageA(mtWin, 0x0111, 33324, 0) ), Все работает хорошо, свечки рисует, но есть один недостаток. Если на offline окошко, наложить любой индикатор, хоть встроеный, хоть пользовательский, то проявляется такой баг: При отрисовке новой свечки, график свечей как и положено сдвигается влево, а индикатор так и остается на месте. Например. Последняя свеча 10:35, кидаем на график индикатор "фрактал", он рисует макс. фрактал в 10:30, пока все хорошо. Но вот появляется новая свеча (10:36), а фрактал уже рисуется не над 10:30, а над 10:31. Може кто сталкивался с такой проблемой и есть пути ее обхода?

Проблема в том что у нас как обычно зубы рвут через ж автогеном,

вы ведь не генерите серверное время и естевственно что индикаторы у вас не двигаются.

Не проще ли сформировать файл и запускать его через тестер там полная эмуляция.

 
vedroid >>:

Не знаю как помочь вам, но несколько подобная ситуация происходила у меня, когда советник на нестандартном тф работал.

На форуме в какой-то ветке такой способ нашел.

Речь про советник. Индикатор всё тупо повесит.

 
Cheshirscy писал(а) >>
Ситация : Метатрейдер в офлайне, т.е не подключен ни к какому серверу котировок. Есть внешняя программа, которая генерит файл истории и посылает метатрейдеровскому окошку сообщение, что надо обновиться ( PostMessageA(mtWin, 0x0111, 33324, 0) ), Все работает хорошо, свечки рисует, но есть один недостаток. Если на offline окошко, наложить любой индикатор, хоть встроеный, хоть пользовательский, то проявляется такой баг: При отрисовке новой свечки, график свечей как и положено сдвигается влево, а индикатор так и остается на месте. Например. Последняя свеча 10:35, кидаем на график индикатор "фрактал", он рисует макс. фрактал в 10:30, пока все хорошо. Но вот появляется новая свеча (10:36), а фрактал уже рисуется не над 10:30, а над 10:31. Може кто сталкивался с такой проблемой и есть пути ее обхода?

Получается, что терминал распознает новый бар, как добавленный слева (как подгрузку истории). Может быть со временем баров что-то перепутано?

 
Urain писал(а) >>

Проблема в том что у нас как обычно зубы рвут через ж автогеном,

вы ведь не генерите серверное время и естевственно что индикаторы у вас не двигаются.

Не проще ли сформировать файл и запускать его через тестер там полная эмуляция.

Беда у нас в другом, в том что когда не могут конкретно ответить, очень любят порассуждать о вечном, о ж с автогеном.

 
Пока отрыл что после посылки сообщения о том что бары изменились

PostMessageA(mtWin, 0x0111, 33324, 0), надо послать еще ондно сообщение

PostMessageA(mtWin, 0xC1B2, 2, 1);, где 0xC1B2 - уникальный идентификатор сообщения, зарегестрированного с помощью RegisterWindowMessage(" MetaTrader4_Internal_Message " );

но пока енто как-то через раз раюботает

 
Cheshirscy >>:

Беда у нас в другом, в том что когда не могут конкретно ответить, очень любят порассуждать о вечном, о ж с автогеном.

http://termorect.narod.ru/

.

Я видел такой код:

#define WM_COMMAND 0x0111

PostMessageA (HandlWindow, WM_COMMAND, 33324, 0); // Обновляем окно.
  PostMessageA (HandlWindow, WM_COMMAND, 2, 1); // Эммуляция тика для эксперта.

 
jartmailru:

http://termorect.narod.ru/

.

Я видел такой код:

#define WM_COMMAND 0x0111

PostMessageA (HandlWindow, WM_COMMAND, 33324, 0); // Обновляем окно.
PostMessageA (HandlWindow, WM_COMMAND, 2, 1); // Эммуляция тика для эксперта.


Последняя строчка не работает(

PostMessageA (HandlWindow, WM_COMMAND, 2, 1); // Эммуляция тика для эксперта.

Помогите разобраться если у кого получилось. Нужно именно эмулировать тик!

 
FX_EXPERT:

Последняя строчка не работает(

PostMessageA (HandlWindow, WM_COMMAND, 2, 1); // Эммуляция тика для эксперта.

Помогите разобраться если у кого получилось. Нужно именно эмулировать тик!


с кодом не разбирался, но этот https://www.mql5.com/ru/code/7737

работает как часы, эмуляция тика в этом коде:

 

void RefreshWindow()
{
        //---- находим окно, в которое будем "отправлять" свежие котировки
        if ( hwnd == 0 )
        {
                hwnd = WindowHandle( StringConcatenate( "!Eqv", _Symbol ), TicksInBar );
                if ( hwnd != 0 ) { Print( "< - - - График ", "!Eqv", _Symbol, TicksInBar, " найден! - - - >" ); }
        }
        //---- и, если нашли, обновляем его
        if ( hwnd != 0 ) { PostMessageA( hwnd, WM_COMMAND, 33324, 0 ); }
}
 

у меня встречный вопрос:

как посчитать корреляцию между двумя графиками offline, для  https://www.mql5.com/ru/code/7737

пока ничего в голову не приходит кроме как через выгрузку в файл данных  offline графиков и дальнейшей манипуляции с этими данными

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