- Ошибка функции IsStopped() при первом переключении периода или смены символа
- Как транслировать в реальном времени значение пары переменных при работе советника на окно графика ?
- Помогите люди добрые. Дайте совет где я ошибаюсь.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2017.11.30 09:48
Памятка
Действие/тип программы | Смена ТФ или символа | Смена счета |
---|---|---|
Индикатор | Запуск OnDeinit и OnInit, объект глобального класса меняется (полная перезагрузка). | Ничего не происходит, кроме обнуления prev_calculated. |
Советник | Запуск OnDeinit и OnInit, объект глобального класса не меняется. | Запуск OnDeinit и OnInit, объект глобального класса меняется (полная перезагрузка). |
В OnTick() организован бесконечный цикл. Есть ли возможность программно установить факт смены графика, осуществляемой вручную (например, перетаскиванием мышью)? Установлено, что изменений значений переменных _Symbol и _UninitReason при смене графика не происходит, поэтому их использовать как условие замены графика невозможно. Спасибо.
Вместо бесконечного цикла используйте OnTimer. Тогда по Reason в OnDeinit сможете определить, что Вам надо.
Спасибо за ответ. И все же, теоретически, если оставаться с бесконечным циклом, есть решение? И почему GetWindowTextW(...) "портит" МТ5?
Спасибо за ответ. И все же, теоретически, если оставаться с бесконечным циклом, есть решение? И почему GetWindowTextW(...) "портит" МТ5?
Можно проверить
if(ChartSymbol(0) != _Symbol) break;
Спасибо за ответ. И все же, теоретически, если оставаться с бесконечным циклом, есть решение? И почему GetWindowTextW(...) "портит" МТ5?
void OnTick() { const long Chart = ChartID(); string PrevSymbol = _Symbol; ENUM_TIMEFRAMES PrevTF = _Period; while (!IsStopped()) { if ((PrevSymbol != ChartSymbol(Chart)) || (PrevTF != ChartPeriod(Chart))) // ноль указывать НЕЛЬЗЯ! { PrevSymbol = ChartSymbol(Chart); PrevTF = ChartPeriod(Chart); Alert(PrevSymbol + " " + EnumToString(PrevTF)); } Sleep(0); } }
И еще. Можно с помощью функции GetWindowTextW(...) прочитать заголовок окна с именем валютной пары. Это получается. Но проблема в том, что при работе этой функции в бесконечном цикле не закрывается МТ5 при попытке его закрыть (например, щелчком по на крестику окна МТ5). Почему?
Надо в условие бесконечного цикла ставить
bool IsStopped();
Можно проверить
Проверил - не работает. Спасибо.
Надо в условие бесконечного цикла ставить
Имеется. Спасибо за участие.
Это решило проблему. Большое спасибо. Казалось бы всего-то ChartSymbol(ChartID()). Но это знание дорогого стоит, экономит уйму времени при самостоятельном поиске. Дай бог Вам здоровья!

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования