Добавьте в функцию init() запуск функции start:
int init()
{
...
start();
...
}
Тогда после установки советника на график он сэмулирует первый тик.
Спасибо, но мне не совсем это нужно
Мне нужно сэмулировать тики на offline графике, на котором уже стоит советник, чтобы вызвать функцию Start() именно СОВЕТНИКА, т.к. есть способ вызова функции start() для индикатора, который не подходит для советника
Init(){ ... while (!IsConnected()) { start(); Sleep(1000); } }
А так подойдет?Правда есть еще другой способ..- Тестер или скрипт который эмулирует тики на заданный ТФ
А так подойдет?Правда есть еще другой способ..- Тестер или скрипт который эмулирует тики на заданный ТФ
Нет, не подойдет. Мне нужен не цикл, а единоразовый вызов, т.к. тик я буду эмулировать при совпадении определенных условий.
Т.е. нужен единоразовый вызов, типа кода ниже, но рабочий
SendMessageA(hwndChart, WM_COMMAND, 0x822C, NULL);
Т.е. нужен единоразовый вызов, типа кода ниже, но рабочий
int MT4InternalMsg; int init() { ... MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message"); ... } int start() { ... RefreshWindow(Symbol(),Period()); ... } void RefreshWindow(string symbol,int period) { int hwnd = WindowHandle(symbol,period); if (hwnd>0) { PostMessageA(hwnd, WM_COMMAND, 33324, 0 ); PostMessageA(hwnd,MT4InternalMsg,2,1); } }Естественно, #include <WinUser32.mqh> в начале.
Добавьте в функцию init() запуск функции start:
int init()
{
...
start();
...
}
Тогда после установки советника на график он сэмулирует первый тик.
forte928:
Init(){ ... while (!IsConnected()) { start(); Sleep(1000); } }
А так подойдет?Правда есть еще другой способ..- Тестер или скрипт который эмулирует тики на заданный ТФ
Так тоже нельзя. В справке написано.
int MT4InternalMsg; int init() { ... MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message"); ... } int start() { ... RefreshWindow(Symbol(),Period()); ... } void RefreshWindow(string symbol,int period) { int hwnd = WindowHandle(symbol,period); if (hwnd>0) { PostMessageA(hwnd, WM_COMMAND, 33324, 0 ); PostMessageA(hwnd,MT4InternalMsg,2,1); } }
Естественно, #include <WinUser32.mqh> в начале.
Есть вариант с PostMessage() в цикле в ините накидать большое количество (200-500) сообщений в очередь. Пока они будут исполняться, запустится старт. Это у меня работало, но очень ненадёжно.
===============
Лучше использовать в ините из этой библиотеки функцию ServiceRefreshChart() из раздела 4.7. После запуска старта завершить обновление функцией ServiceStopRefreshChart().
void init() { ServiceRefreshChart(WindowHandle(Symbol(), 0), 100); } void start() { ServiceStopRefreshChart(WindowHandle(Symbol(), 0)); while(!IsStopped()) { ... Sleep(1000); } }
Такая конструкция всегда будет запускать эксперт без тиков.
Это работать не будет. Эммуляция тика для эксперта в ините или старте заканчивается раньше, чем запустится старт
Писал навскидку, воткнул Symbol и Period не подумав.
На самом деле Это (заменив символ и период на нужные для данного оффлайн графика) кладется в отдельный скрипт/советник, который вешается на отдельный чарт. Тогда работает (проверил).
Здравствуйте
Подскажите, пожалуйста, как сэмулировать тик на offline графике, который запустить функцию start() в советнике на этом графике?
Этот код у меня НЕ работает:
Гоняйте в тестере на "Все тики" и на минутках, используя генетический алгоритм
Писал навскидку, воткнул Symbol и Period не подумав.
На самом деле Это (заменив символ и период на нужные для данного оффлайн графика) кладется в отдельный скрипт/советник, который вешается на отдельный чарт. Тогда работает (проверил).

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте
Подскажите, пожалуйста, как сэмулировать тик на offline графике, который запустить функцию start() в советнике на этом графике?
Этот код у меня НЕ работает: