Есть ли система прерываний при обработки событий MT4. Если при обработке события NewTick обработчиком OnTick, происходит событие Timer, то какой сценарий выполняется: - страница 6

 
Сергей:
т.е. Вы можете предложить вариант протокола, прерывающего или управляемо игнорирующего событие онтик в советнике без использования цикла? Вопрос автора был в этом

Нет. Такого я не предлагал. А вопрос автора был пояснен им самим так:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Есть ли система прерываний при обработки событий MT4. Если при обработке события NewTick обработчиком OnTick, происходит событие Timer, то какой сценарий выполняется:

Yury Kirillov, 2017.01.22 15:10

В моём советнике критичные к скорости выполнения расчеты должны выполняться по приходу нового тика. Прочие расчеты и различного рода отображения информации должны выполняться во время простоя советника между завершением обработки прошлого тика и приходом будущего. Я использую миллисекундный таймер для инициирования попыток обработки некритичных расчетов. Поэтому мне важно, чтобы расчеты по таймеру не мешали расчетам по приходу тиков. Отсюда и интерес к системе обработчиков и порядку их взаимодействия.
Вы какой-то другой топик видимо читаете и для него же комменты пишете ;-).
 
Stanislav Korotky:

Нет. Такого я не предлагал. А вопрос автора был пояснен им самим так:

Вы какой-то другой топик видимо читаете и для него же комменты пишете ;-).
именно этот и читаю ;-). Все важные события должны выполняться по приходу тика. Остальные по таймеру. По жизни это будет означать, что если работа таймера задержалась, то его надо прервать в пользу тика ....

по другому не получится. Остальное как раз слова ...
 
Сергей:
именно этот и читаю ;-). Все важные события должны выполняться по приходу тика. Остальные по таймеру. По жизни это будет означать, что если работа таймера задержалась, то его надо прервать в пользу тика ....

по другому не получится. Остальное как раз слова ...

Уже говорили, но попробую с другой стороны..

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

И для обмена информацией не обязательно тормозить "главный" OnTick. Отправлять информацию можно событиями (ChartEvent) или через гл. переменные, а ответ получать (если он нужен) тоже через гл. переменные из того же ОнТик.
И никто никого ждать не будет.

 
Andrey Khatimlianskii:

Уже говорили, но попробую с другой стороны..

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

И для обмена информацией не обязательно тормозить "главный" OnTick. Отправлять информацию можно событиями (ChartEvent) или через гл. переменные, а ответ получать (если он нужен) тоже через гл. переменные из того же ОнТик.
И никто никого ждать не будет.

Это то я понял. Вы меня понять не хотите. Если процессы не связаны между собой, то хоть три потока. А вот если логически связаны, то один должен приостанавливаться на время выполнения другого. А как этого достичь разбивая на независимые потоки я не представляю себе.

Если поток на Таймере зависит от того, что происходит в тике, тем более если от этого зависят результаты торговли, то второй поток должен ждать завершения главного. Т.е. Должен быть зависим .... Кому что надо.

Если операции не емкие, то ни Ваш, ни мой подходы не нужны вообще .... Только огород городить ...
 
Сергей:
Это то я понял. Вы меня понять не хотите. Если процессы не связаны между собой, то хоть три потока. А вот если логически связаны, то один должен приостанавливаться на время выполнения другого. А как этого достичь разбивая на независимые потоки я не представляю себе.

Если поток на Таймере зависит от того, что происходит в тике, тем более если от этого зависят результаты торговли, то второй поток должен ждать завершения главного. Т.е. Должен быть зависим .... Кому что надо.

Если операции не емкие, то ни Ваш, ни мой подходы не нужны вообще .... Только огород городить ...
Если честно, то смысла в миллисекундном таймере вообще не вижу. Вызывать функцию дольше будете. Проще цикл со слипом.

Я так работаю и меня все устраивает. И по надежности и по скорости работы.

 
Сергей:
Это то я понял. Вы меня понять не хотите. Если процессы не связаны между собой, то хоть три потока. А вот если логически связаны, то один должен приостанавливаться на время выполнения другого. А как этого достичь разбивая на независимые потоки я не представляю себе.

Придумали себе задачу, решили ее, и порадовались. Только к вопросу топик-стартера она отношения не имеет )

 

Сергей:
Если операции не емкие, то ни Ваш, ни мой подходы не нужны вообще .... Только огород городить ...

Отрисовка рюшечек через отдельный индикатор — очень логичное решение. Просто чтобы торговый советник не занимался тем, чем не должен.

 

Сергей:
Если честно, то смысла в миллисекундном таймере вообще не вижу. Вызывать функцию дольше будете. Проще цикл со слипом.

Цикл со слипом — это и есть миллисекундный таймер.

С оговорками, что первый может "отвлекаться" на более важные задачи контролируемо, а второй умеет работать с очередью. У каждого варианта свои плюсы есть.

 
Andrey Khatimlianskii:

Придумали себе задачу, решили ее, и порадовались. Только к вопросу топик-стартера она отношения не имеет )

 

Отрисовка рюшечек через отдельный индикатор — очень логичное решение. Просто чтобы торговый советник не занимался тем, чем не должен.

 

Цикл со слипом — это и есть миллисекундный таймер.

С оговорками, что первый может "отвлекаться" на более важные задачи контролируемо, а второй умеет работать с очередью. У каждого варианта свои плюсы есть.

прямой вопрос был:

Есть ли система прерываний при обработке событий мт4.

Именно на него я и ответил. Есть, при помощи взятия управления на себя при помощи цикла. Какой вопрос, такой ответ. А уж как в конкретном случае поступать, это на усмотрение программиста.

 
Сергей:
прямой вопрос был: Есть ли система прерываний при обработке событий мт4. На него я ответил. Есть, но рукотворная ) Общий вопрос, общий ответ. А уж как там в конкретном случае поступать, это на усмотрение программиста. )))
Свое видение я обозначил. Приятно было пообщаться.

Всем успехов
 
Сергей:
прямой вопрос был:
Есть ли система прерываний при обработке событий мт4.

Именно на него я и ответил. Есть, при помощи взятия управления на себя при помощи цикла. Какой вопрос, такой ответ. А уж как в конкретном случае поступать, это на усмотрение программиста.

Согласен, задача была изначально поставлена не корректно. Только вот тут стало понятно, что, собственно, нужно сделать:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Есть ли система прерываний при обработки событий MT4. Если при обработке события NewTick обработчиком OnTick, происходит событие Timer, то какой сценарий выполняется:

Yury Kirillov, 2017.01.22 15:10

В моём советнике критичные к скорости выполнения расчеты должны выполняться по приходу нового тика. Прочие расчеты и различного рода отображения информации должны выполняться во время простоя советника между завершением обработки прошлого тика и приходом будущего. Я использую миллисекундный таймер для инициирования попыток обработки некритичных расчетов. Поэтому мне важно, чтобы расчеты по таймеру не мешали расчетам по приходу тиков. Отсюда и интерес к системе обработчиков и порядку их взаимодействия.
И вам успехов.
 
Сергей:
прямой вопрос был:
Есть ли система прерываний при обработке событий мт4.

Прямой ответ - нет. И не нужна (как неэффективная) на софтовом уровне. Это пережиток железячного подхода к программированию.

Сергей:
Если процессы не связаны между собой, то хоть три потока. А вот если логически связаны, то один должен приостанавливаться на время выполнения другого. А как этого достичь разбивая на независимые потоки я не представляю себе.
Красным выделено ложное утверждение. Синим - реальный источник проблемы. Можно либо попытаться почитать про параллельное/многопоточное программирование, либо обратиться в секцию фриланс ;-) - там сделают.
Причина обращения: