Как грамотно настроить уведомления на почту?

 

Коллеги, добрый день!

Всех с наступившим Новым годом.

Я уже давно пользуюсь элементарным самописным советником, который представляет собой простую уведомлялку, которая отсылает мне электронное письмо при наступлении определенного события. Если индикатор А достиг значения а, отправить письмо. Но так, как исполнительный код зашит в секцию OnTick(), и исполняется при каждом тике, то получается, что при наступлении события, я могу начать получать по нескольку писем в секунду. Пока я ограничился тем, что при наступлении события отправляется письмо, а советник деактивируется. Спустя какое-то время я вешаю советника опять.

Вопрос к знатокам алгоритмов MQL5. Как можно написать уведомлялку так, чтобы она слала только одно письмо, но при этом ее не приходилось каждые раз вешать обратно? Как решаются такие задачи?

Спасибо.

 
canonier:
 

Вопрос к знатокам алгоритмов MQL5. Как можно написать уведомлялку так, чтобы она слала только одно письмо, но при этом ее не приходилось каждые раз вешать обратно? Как решаются такие задачи?

Спасибо.

Да ты ж все верно сделал ! 

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

Только зачем же снимать его с торгов-то ???

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

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

Таким образом - ты будешь получать письма не чаще, чем установленный период. Эксперт же будет все время работать, просто после каждой отсылки он сам будет переходить на некоторое время в "нечувствительное" неактивное состояние.

 
George Merts:

Да ты ж все верно сделал ! 

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

Только зачем же снимать его с торгов-то ???

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

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

Таким образом - ты будешь получать письма не чаще, чем установленный период. Эксперт же будет все время работать, просто после каждой отсылки он сам будет переходить на некоторое время в "нечувствительное" неактивное состояние.

Я думаю правильнее сделать не на заданное время, а до наступления следующего бара по таймфрейму индикатора. И сообщение отправлять только если предыдущее значение индикатора было меньше сигнального значения. В противном случае Вы будете получать письма с заданной периодичностью пока значение индикатора выше или равно сигнальному значению.
 
Dmitriy Gizlyk:
Я думаю правильнее сделать не на заданное время, а до наступления следующего бара по таймфрейму индикатора. И сообщение отправлять только если предыдущее значение индикатора было меньше сигнального значения. В противном случае Вы будете получать письма с заданной периодичностью пока значение индикатора выше или равно сигнальному значению.

Да, все верно.

Это - больше от ТС зависит. Просто сейчас все хватились за тики - соответственно, я предложил запоминать время тика. 

Но если ТС работает побарно - то запоминать необходимо именно время бара, и промежуток между письмами - должен быть не менее продолжительности бара.

 

1. Письма в топку. Есть ПУШ-сообщения. Мгновенно на смартфон. И не надо ходить на почту.
2. Что касается вопроса в топике - надо запоминать текст последнего сообщения, а не время отправки или время бара. И отправлять сообщение только если текст обновился. Не будет повторяющихся сообщений.

 
canonier:

Коллеги, добрый день!

Всех с наступившим Новым годом.

Я уже давно пользуюсь элементарным самописным советником, который представляет собой простую уведомлялку, которая отсылает мне электронное письмо при наступлении определенного события. Если индикатор А достиг значения а, отправить письмо. Но так, как исполнительный код зашит в секцию OnTick(), и исполняется при каждом тике, то получается, что при наступлении события, я могу начать получать по нескольку писем в секунду. Пока я ограничился тем, что при наступлении события отправляется письмо, а советник деактивируется. Спустя какое-то время я вешаю советника опять.

Вопрос к знатокам алгоритмов MQL5. Как можно написать уведомлялку так, чтобы она слала только одно письмо, но при этом ее не приходилось каждые раз вешать обратно? Как решаются такие задачи?

Спасибо.

Не совсем понятен один момент. Письмо отправляется когда значение индикатора достигает нужного значения и все последующие его значения тоже нужные? Т.е. проверка условия типа "больше или равно"? Может быть, надо сделать условие, что письмо отправляется только при строгом равенстве? Тогда при изменении значения индикатора отправки писем не будет.
 
Andrei Fandeev:

1. Письма в топку. Есть ПУШ-сообщения. Мгновенно на смартфон. И не надо ходить на почту.
2. Что касается вопроса в топике - надо запоминать текст последнего сообщения, а не время отправки или время бара. И отправлять сообщение только если текст обновился. Не будет повторяющихся сообщений.

С пушами мысль здравая. На мой взгляд наиболее эффективно отправлять их + если нужно данные на почту или FTP (тут все зависит от фантазии и реализации).

Отслеживать сообщения по тексту вряд ли целесообразно, а вот по времени и типу сигнала вполне стоит.

Тут наверное наиболее подходит структура в которую пишем тип сигнала (если хотите тип сообщения), время сигнала, признак успешности отправки письма + признак успешности отправки пуша (если хотите).

Если отсылка сигнала/сообщения становится не актуальной то прекращаем высылать сообщение.


Актуальность сигнала/сообщения определяется следующим путем:

1. Поступил новый сигнал (нужно высылать сообщение других типов)

2. Пользователь совершил какое-то действие и торговый робот расценил его как реакцию на высылку сигнала ( к примеру закрылась/открылась позиция)

3. После отправки сигнала наступило определенное событие (к примеру появился новый бар)

4. После отправки сигнала прошло определенное время.


PS

Контролировать и отправлять сообщения на каждом тике не стоит. Большинство сообщений даже раз в секунду это перебор. Тут лучше использовать таймер, скажем на 10 секунд или на 1 минуту. 

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