[Завершено][MQL5] Советник не использует OnTick(), но ждёт нового тика?

 

Здравствуйте все!

Пишу советник, в секции OnTick() пусто, все действия в OnChartEvent() и самописных функциях.

Советник трижды просит пользователя совершить действия (клик мышью или кнопкой на клавиатуре) и после каждого вопроса ждёт этих действий.

Я заметил, что обработка каждого действия происходит во время поступления нового тика. Если нового тика нет, то советник замирает.

Во время активного рынка это не заметно, а вот по вечерам, например, очень заметно.

Вопрос: это нормально? Так и должно быть? И я напрасно жду от него "тиконезависимой" работы?

 
kofesutra:

Здравствуйте все!

Пишу советник, в секции OnTick() пусто, все действия в OnChartEvent() и самописных функциях.

Советник трижды просит пользователя совершить действия (клик мышью или кнопкой на клавиатуре) и после каждого вопроса ждёт этих действий.

Я заметил, что обработка каждого действия происходит во время поступления нового тика. Если нового тика нет, то советник замирает.

Во время активного рынка это не заметно, а вот по вечерам, например, очень заметно.

Вопрос: это нормально? Так и должно быть? И я напрасно жду от него "тиконезависимой" работы?


Возможно Вас спасёт OnTimer().

 
kofesutra:

Здравствуйте все!

Пишу советник, в секции OnTick() пусто, все действия в OnChartEvent() и самописных функциях.

Советник трижды просит пользователя совершить действия (клик мышью или кнопкой на клавиатуре) и после каждого вопроса ждёт этих действий.

Я заметил, что обработка каждого действия происходит во время поступления нового тика. Если нового тика нет, то советник замирает.

Во время активного рынка это не заметно, а вот по вечерам, например, очень заметно.

Вопрос: это нормально? Так и должно быть? И я напрасно жду от него "тиконезависимой" работы?

Советник замирает не потому, что "нет нового тика", а потому, что нет нового ChartEvent - совершенно справедливо. Так что ваша работа вполне себе "тиконезависима", по чарт-евентам, которых нет. Когда нет чарт-евентов - разумеется, ваш советник остановится в ожидании.

Правильно вам указали - запускайте таймер, и обрабатывайте события по таймеру.

Хотя, по мне - "тиконезависимость" - это абсурд. Как можно пропускать котировки, или наоборот, производить какие-то действия, когда они еще не пришли ?

 
George Merts:

Хотя, по мне - "тиконезависимость" - это абсурд. Как можно пропускать котировки, или наоборот, производить какие-то действия, когда они еще не пришли ? 


Спасибо за ответ, друзья George Merts, Yury Kirillov!

Вот что делает советник:

1. после запуска говорит "укажите уровень входа" и ждёт клика по графику, после клика запоминает ценовой уровень

2. говорит "укажите уровень стоп-лосса" и снова ждёт клика, получает, запоминает уровень, высчитывает размер СЛ в пунктах и определяет покупка или продажа 

3. говорит "укажите тейк-профит", ждёт клика, получает его и только теперь запрашивает размер депозита, рассчитывает размер лота и устанавливает отложенный ордер.

Мне думается, что на первых двух этапах ему новые котировки не нужны, но он переходит от шага к шагу с поступлением котировки от сервера :(

Над таймером помедитирую :) как его применить и нужно ли.

 

Вот сейчас выходные - значит тиков нет, а OnChartEvent обрабатывается аж бегом :)

OnChartEvent; CHARTEVENT_CLICK
OnChartEvent; CHARTEVENT_CHART_CHANGE
OnChartEvent; CHARTEVENT_CHART_CHANGE
OnChartEvent; CHARTEVENT_CLICK
OnChartEvent; CHARTEVENT_OBJECT_DRAG
OnChartEvent; CHARTEVENT_OBJECT_DRAG
Файлы:
CHARTEVENT.mq5  10 kb
 
kofesutra:
 

Вот что делает советник:

1. после запуска говорит "укажите уровень входа" и ждёт клика по графику, после клика запоминает ценовой уровень

2. говорит "укажите уровень стоп-лосса" и снова ждёт клика, получает, запоминает уровень, высчитывает размер СЛ в пунктах и определяет покупка или продажа 

3. говорит "укажите тейк-профит", ждёт клика, получает его и только теперь запрашивает размер депозита, рассчитывает размер лота и устанавливает отложенный ордер.

Мне думается, что на первых двух этапах ему новые котировки не нужны, но он переходит от шага к шагу с поступлением котировки от сервера :(

Над таймером помедитирую :) как его применить и нужно ли.

Зачем для всего этого городить советник-то ?  Так много проблем для установки отложенного ордера ???  Не проще ли использовать обычный скрипт, которые ничего не будет ждать, а по установленным в настройках параметрах (уровнях ТП_СЛ) - выставляет отложку ?  И таймер не нужен...

Твой же советник ждет кликов по графику - а если их нет ?

 
George Merts:

Зачем для всего этого городить советник-то ?  Так много проблем для установки отложенного ордера ???  Не проще ли использовать обычный скрипт, которые ничего не будет ждать, а по установленным в настройках параметрах (уровнях ТП_СЛ) - выставляет отложку ?  И таймер не нужен...

Твой же советник ждет кликов по графику - а если их нет ?

Либо скрипт, либо кнопку, при нажатии которой эти действия будут выполняться. В своём первом советнике для полуавтоматической торговли все действия делал с помощью скриптов. Теперь с помощью кнопок.
 
kofesutra:

Мне думается, что на первых двух этапах ему новые котировки не нужны, но он переходит от шага к шагу с поступлением котировки от сервера :(

Все должно работать без тиков, ищите проблему в коде (раз не выкладываете его здесь).

 

Друзья-коллеги, спасибо всем за участие и советы!

Я всё понял - пойду искать косяки и ошибки в своём коде ;) - однозначно сам что-то не то наделал.

Причина обращения: