- Цикл for
- Программное удаление советников и скриптов: ExpertRemove
- CustomTicksAdd
Зациклить скрипт или эксперт внутри start().
И забирать котировки самому через функцию, ок! А не получится там переполнения какого-нибудь в стеке или очереди много потоковости процессов? Ведь функция Старт() отрабатывается на каждом тике, и получается что зациклившись в "тике" мы не будем возвращать значение возврата (return) функции, а вызов функции будет происходить каждый тик, отсюда возможное переполнение указателей стека и зависание препроцессора!? Ну по аналогии с ассемблером, пуш и поп команды, сами знаете что там шутки плохи!
И забирать котировки самому через функцию, ок! А не получится там переполнения какого-нибудь в стеке или очереди много потоковости процессов? Ведь функция Старт() отрабатывается на каждом тике, и получается что зациклившись в "тике" мы не будем возвращать значение возврата (return) функции, а вызов функции будет происходить каждый тик, отсюда возможное переполнение указателей стека и зависание препроцессора!? Ну по аналогии с ассемблером, пуш и поп команды, сами знаете что там шутки плохи!
В экспертах специальная функция start() вызывается (и исполняется) сразу после прихода очередного тика. Если новый тик поступил в период выполнения специальной функции start(), то этот тик будет проигнорирован, т.е. вызов на исполнение специальной функции start() в момент прихода такого тика осуществляться не будет. Все котировки, пришедшие в период выполнения специальной функции start(), будут проигнорированы. Запуск специальной функции start() на исполнение производится клиентским терминалом только при условии, что предыдущий сеанс работы полностью завершён, управление передано клиентскому терминалу и специальная функция start() находится в ожидании нового тика.
Ну по аналогии с ассемблером, пуш и поп команды, сами знаете что там шутки плохи!
Ага. Точно. Все знают про это! :)))))
Для работы с графическими элементами требуется делать обращения к функциям с периодичностью несколько раз в сек. Тиковые "прерывания" не устраивают. Что делать?, зацикливаться внутри тика не есть хорошо наверное, так-как возможна потеря/пропуск тиковой котировки. Какие-то есть решения в MQL4!
время запоминать и проверять сколько секунд прошло - не подходит?
Учебник:
В экспертах специальная функция start() вызывается (и исполняется) сразу после прихода очередного тика. Если новый тик поступил в период выполнения специальной функции start(), то этот тик будет проигнорирован, т.е. вызов на исполнение специальной функции start() в момент прихода такого тика осуществляться не будет. Все котировки, пришедшие в период выполнения специальной функции start(), будут проигнорированы. Запуск специальной функции start() на исполнение производится клиентским терминалом только при условии, что предыдущий сеанс работы полностью завершён, управление передано клиентскому терминалу и специальная функция start() находится в ожидании нового тика.
Используйте : RefreshRates();
И забирать котировки самому через функцию, ок! А не получится там переполнения какого-нибудь в стеке или очереди много потоковости процессов? Ведь функция Старт() отрабатывается на каждом тике, и получается что зациклившись в "тике" мы не будем возвращать значение возврата (return) функции, а вызов функции будет происходить каждый тик, отсюда возможное переполнение указателей стека и зависание препроцессора!? Ну по аналогии с ассемблером, пуш и поп команды, сами знаете что там шутки плохи!
циклить init()
Для работы с графическими элементами управления - посмотрите сюда https://www.mql5.com/ru/code/10344
/* Ключевые слова: Эмуляция тиков для ускоренной проверки индикаторов Как имитировать поступление тика Линки: Визуальная проверка индикатора, Рош, http://simple-testing.blogspot.com/2009/04/blog-post.html Как имитировать постоупление тика, http://metatrader4.com/ru/forum/13299 */ #import "user32.dll" int PostMessageA(int hWnd, int Msg, int wParam, int lParam); int RegisterWindowMessageA(string lpString); #import #define WM_COMMAND 0x0111 //#include <WinUser32.mqh> // Заголовочный файл библиотеки "user32.dll" функций API Windows XP. int HandlWindow = -1; int MT4InternalMsg = -1; void Вентилировать() { if(HandlWindow == -1) { HandlWindow = WindowHandle(Symbol(),Period()); } if(MT4InternalMsg == -1) { MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message"); //incoming tick for EAs } for(;;) { if(IsStopped()) {return;} PostMessageA(HandlWindow, WM_COMMAND, 33324, 0); //PostMessageA (HandlWindow, MT4InternalMsg, 8, 0); // Обновляем окно. //PostMessageA(HandlWindow,MT4InternalMsg, 2, 1); //incoming tick for EAs //PostMessageA (HandlWindow, WM_COMMAND, 2, 1); // Эммуляция тика для эксперта. WindowRedraw(); } } void start() { Вентилировать(); }
циклить init()
Для работы с графическими элементами управления - посмотрите сюда https://www.mql5.com/ru/code/10344
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования