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

 
IgorM:


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

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

PostMessageA (HandlWindow, WM_COMMAND, 33324, 0)

Эта команда обновляет окно, но не эмулирует тик. Задача состоит именно в эмуляции тика на офлайн графике для того, чтобы запускался эксперт стоящий на нем, т.е. переходил на метку start()

 
IgorM:

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

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

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

Зачем вам выгружать в файл данные. Если я вас правильно понял, вам можно с советника, запущенного на другом (третьем) графике считывать и анализировать информацию на двух других.
 
FX_EXPERT:

PostMessageA (HandlWindow, WM_COMMAND, 33324, 0)

Эта команда обновляет окно, но не эмулирует тик. Задача состоит именно в эмуляции тика на офлайн графике для того, чтобы запускался эксперт стоящий на нем, т.е. переходил на метку start()


да, действительно - советник не запустился, проверил, индикаторы работают

этот - https://www.mql5.com/ru/code/9358  точно обновляет правильно - с эмуляцией тика, я месяца три назад на него советника бросал и торговал на оффлайн графике по Ренко

FX_EXPERT:
Зачем вам выгружать в файл данные. Если я вас правильно понял, вам можно с советника, запущенного на другом (третьем) графике считывать и анализировать информацию на двух других.
да, только проблема в том, что графики оффлайн с нестандартными именами и как к ним добраться из другого окна пока не придумал
 

нашел, добавьте себе в код:

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 ); }
        int MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message");
        if (MT4InternalMsg != 0) PostMessageA(hwnd, MT4InternalMsg, 2, 1);
}

так работает и обновление и эмуляция тиков, вот такой код: int start(){Alert("START IS RUN!!!"); return(0); }

http://imglink.ru/pictures/13-10-10/402bde4440d402520e44774a09a5fff1.jpg 

теперь работает на  https://www.mql5.com/ru/code/7737

 
IgorM:


да, действительно - советник не запустился, проверил, индикаторы работают

этот - https://www.mql5.com/ru/code/9358 точно обновляет правильно - с эмуляцией тика, я месяца три назад на него советника бросал и торговал на оффлайн графике по Ренко

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

Точно также как и к стандартным символам из списка инструментов, я так делаю. Только надо учитывать, что MarketInfo() будет выдавать нули, а все что касается графиков, индикаторов на них - все будет считываться и корректно! Например Digits будет выдавать верное значение, а MarketInfo(Symbol(), MODE_DIGITS) будет выдавать ноль. Т.е. лучше вам сделать скрипт, еоторый будет просто выводить на экран оффлайн-графика разные предустановленные переменные, а там посмотреть уже, какие работают, а какие нет, чтобы потом не искать в основной программе ошибки, как это делал я )))
 
IgorM:

нашел, добавьте себе в код:

так работает и обновление и эмуляция тиков, вот такой код: int start(){Alert("START IS RUN!!!"); return(0); }

http://imglink.ru/pictures/13-10-10/402bde4440d402520e44774a09a5fff1.jpg

теперь работает на https://www.mql5.com/ru/code/7737

Спасибо за скрипт, щас попробую.

Да, действительно то, что нужно, спасибо!

 

А можно программно открыть окно offline графика, которого нет в списке "Обзор рынка"?

 
FX_EXPERT:

А можно программно открыть окно offline графика, которого нет в списке "Обзор рынка"?


наверно нет, открыть окно из "обзор рынка" умеет, к примеру, этот скрипт https://www.mql5.com/ru/code/9099

он имитирует нажатие клавиатуры, т.е. сам нажимает "горячие клавишу", а на "Файл - Открыть автономно" я горячих клавиш не видел

ЗЫ: неохота возиться, но возможно, что с помощью редактора ресурсов приложений для Windows можно терминалу переприсвоить/присвоить новую "горячую клавишу"

 

Сначала открываете список Offline-графиков:

#import "user32.dll"
  int PostMessageA(int hWnd,int Msg,int wParam,int lParam);
  int GetAncestor(int hWnd, int gaFlags);
  int GetLastActivePopup(int hWnd);
#import

#define WM_COMMAND 0x0111
#define GA_ROOT 2

#define PAUSE 100

// Открывает список Offline-графиков. Возвращает хэндл окна списка.
int OpenOfflineList()
{
 int hwnd = WindowHandle(Symbol(), Period());
 
 hwnd = GetAncestor(hwnd, GA_ROOT);
 
 PostMessageA(hwnd, WM_COMMAND, 33053, 0);
 Sleep(PAUSE);
 
 hwnd = GetLastActivePopup(hwnd);
 
 return(hwnd);
}

Затем тоже автоматом выбираете нужный символ и жмете на кнопку "Open".

 
Спасибо!!!