Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А для этого достаточно добавить вариант OnCalculate(void), без параметров и передачи массивов.
А для этого достаточно добавить вариант OnCalculate(void), без параметров и передачи массивов.
Скорее, это в компетенции разработчиков метатрейдера.
Прошу прощения за дурацкий вопрос, но что случится, если сделать вот такую функцию и запустить ее:
В данном случае она должна вычислять индюк "с нуля", без оптимизации вычислений.
Чтобы она сделала что-то осмысленное, нужно заполнить значениями ее параметры?
P.S. Я хочу вставить эту функцию в обработчик OnChartEvent(), вот такой я упрямый...
Прошу прощения за дурацкий вопрос, но что случится, если сделать вот такую функцию и запустить ее:
В данном случае она должна вычислять индюк "с нуля", без оптимизации вычислений.
Чтобы она сделала что-то осмысленное, нужно заполнить значениями ее параметры?
P.S. Я хочу вставить эту функцию в обработчик OnChartEvent(), вот такой я упрямый...
OnCalculate из обработчика событий вызывать не имеет смысла, так как нет входных (исходные массивы данных) и выходных (результат) данных.
Если конечно речь не идет о расчете собственного куска данных.
Спасибо, Renat. Будем искать обходные пути.
Маленький секрет: дописываю статью об изменении параметров мува на лету (период, тип, сдвиг) программно назначенными клавишами. Обработчик в индикаторе - OnChartEvent().
Все нормально работает, можно в принципе и публиковать. Но не очень красиво: мув перерисовывается не раньше, чем придет тик. Когда он придет ночью, никто не знает, можно и несколько минут ждать.
Хочется, чтобы перерисовывался сразу (наверно, и не только мне так хочется). Для этого, с учетом Вашего ответа, пока вижу только один простой путь немедленной передачи управления от OnChartEvent() к OnCalculate() - через искусственный тик, генерируемый перед выходом из OnChartEvent().
P.S. Renat, эта команда:
PostMessageA( hwnd, WM_COMMAND, 33324, 0 );
- все еще актуальна для "пятерки"? В "четверке" она вроде бы генерировала искусственный тик.
не очень красиво: мув перерисовывается не раньше, чем придет тик. Когда он придет ночью, никто не знает, можно и несколько минут ждать.
Хочется, чтобы перерисовывался сразу (наверно, и не только мне так хочется).
Алексей, а нельзя ли здесь как-то задействовать пользовательское событие?
Поищи, где-то Рашид выкладывал код, как это программировать. Или в Справке, или в code base.
Алексей, а нельзя ли здесь как-то задействовать пользовательское событие?
Спасибо, Евгений. Вот что есть в справке:
EventChartCustom
Генерирует пользовательское событие для указанного графика.
[...]
ПримечаниеЭксперт или индикатор, прикрепленный к указанному графику, обрабатывает данное событие при помощи функции OnChartEvent(int event_id, long& lparam, double& dparam, string& sparam);
Там же, в справке, и пример приведен, простой и понятный.
Специфическая проблема передачи управления на OnCalculate() с его помощью не решается. Ну разве что вставить вовнутрь искусственный тик :) ...
Есть другой вариант. Расчет индикатора вести в пользовательском событии, не используя OnCalculate. Всю расчетную часть посместить в обработчик события. Единственный серьезный момент - необходимо аккуратно делать обработку. Обрабатывать только непросчитанную часть, а не всю историю.
Есть другой вариант. Расчет индикатора вести в пользовательском событии, не используя OnCalculate. Всю расчетную часть посместить в обработчик события. Единственный серьезный момент - необходимо аккуратно делать обработку. Обрабатывать только непросчитанную часть, а не всю историю.
Да, конечно, но рассматриваю как крайний вариант. Это:
- либо расчет в том же виде, как раньше в "четверке" (и это безусловный шаг назад),
- либо все же вызов OnCalculate() внутри OnChartEvent() с предварительным расчетом всех параметров OnCalculate() (это уже явно получше, но попахивает искусственностью).
Фишка в том, что у меня обработка события OnChartEvent() всегда предусматривает последующий пересчет индикатора "с нуля" (изменение периода мува с 13 до 14 требует пересчета его на всей истории). Но это даже не беда, т.к. уже дальше будет оптимизация расчетов.
Все-таки было бы очень неплохо, если бы Метаквоты сделали функцию а ля
void GenerateArtificialTick( string symbol, int period, double& tickval, datetime& ticktime )
- вместо того, чтобы каждый раз, когда тик нужен, обращаться напрямую к WinAPI32, да еще и вычисляя хэндл окна (а где у нас аналог старой доброй функции WindowHandle(), кстати?).
Для чего этот тик нужен?
- для очень простого решения проблемы мгновенной передачи управления из обработчика в OnCalculate();
- для эмуляции работы индикаторов и экспертов в выходные;
- для программного обновления ТФ
- и т.п.
Число 33324 при поиске на сайте mql4.com не зря выдает 45 ссылок.
P.S. Оконные функции нашлись :), да и вообще проблему решил. Всем большое спасибо за внимание.