Germany | Finland | Saint Petersburg | Drive

Расширенный сервис оповещений QUIK

Опубликовано в Утилиты

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

 

По аналогии с фреймворком для Амиброкера у меня есть аналогичный для lua. Сегодня выдернул из него кусочек и оформил в виде отдельного скрипта.

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

  1. Индикация состояния в экранной таблице с использованием цвета.
  2. Сообщение на экране
  3. Проигрывание звукового файла wav, mp3, midi (настраивается отдельно на каждое событие
  4. Запуск произвольной программы Windows
  5. Отсылка почты на указанный адрес (в полной версии)
  6. Установка метки на графике (отдельно для каждого условия, в полной версии)

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

Количество правил для генерации оповещений неограничено.

Можно использовать как встроенные в терминал индикаторы, так и пользовательские, написанные на qlua.

Все действия и сигналы протоколируются.

 

ПРИМЕРЫ ВОЗМОЖНОСТЕЙ:

  • Цена инструмента превысила (или стала меньше) 100 руб/акция
  • Цена инструмента пробила вверх (вниз) скользящую среднюю
  • Цена инструмента превысила верхнюю линию Боллинджера
  • Три (четыре, пять или даже пятнадцать) скользящих средних выстроились на графике в порядке возрастания (убывания) их периодов
  • Потеряно соединение с сервером брокера
  • Сегодня пятница и через 10 минут закончится торговая сессия
  • Спред между базовым активом и фьючерсом на него (поделённым на 100) превысил (или стал меньше) требуемой величины
  • Разница между минимальным и максимальным значениями цен инструмента за последние 6 (12, 123, 1234) свечей не превышает 10 рублей (или 2%, к примеру)
  • Индекс РТС отклонился на большее, чем задано расстояние от рассчитанного индекса его составляющих
  • Объем текущей свечи превысил 10 000
  • Прибыль клиентского портфеля превысила 10 000 рублей
  • Стоимость клиентского портфеля опустилась ниже 300 000 рублей
  • Цена вошла в облако (вышла из облака) Ишимоку и стохастик меньше (больше, равен) заданного значения 
  • Квадратный корень из цены индекса РТС минус натуральный логарифм лучшей цены предложения фьючерса на Сбербанк превышает суммарное предложение акций Газпрома на величину цены вчерашнего закрытия акции Уралкалия минус остаток от деления индекса ММВБ на 3.1415
  • Любые другие фантазии, в том числе неприличные Крутой

 

 

 

 

Скачать Alerter

Комментарии   
# Евгений1983 18.05.2015 22:15
Super!
Ответить | Ответить с цитатой | Цитировать
# Серей 21.01.2017 21:41
сколько стоит полная версия?
Ответить | Ответить с цитатой | Цитировать
# admin 21.01.2017 22:19
Сергей.

А подскажите, почему этот вопрос мне задают каждый день, если в ссылке на скачивание есть исчерпывающая информация об этом?

По этой ссылке никто не ходит?
Ответить | Ответить с цитатой | Цитировать
# Ko255 15.03.2016 08:23
Вопрос: сколько стоит полная версия? И ещё, может-ли сделать индикатор расчета размера последней свечи в пунктах (open-close) для квик и сколько он будет стоить? Спасибо.
Ответить | Ответить с цитатой | Цитировать
# admin 15.03.2016 09:07
Здравствуйте. Ответил вам почтой
Ответить | Ответить с цитатой | Цитировать
# DigitService 15.03.2016 20:30
Михаил, приветствую, интересует есть ли технически возможность в программе добавить возможность сравнивать рассчитанные при каждом срабатывании условия значения. Мне представляется, что это можно было бы сделать с применением глобальных переменных, но может Вы увидите другую техническую возможность.
.
Например. При соблюдении условия A>B я рассчитываю Ценусрабатывани я1, Таргет1 и Стоплосс1.
.
Эти данные рассчитываются в поле Description, а также рассылаются полями Email и Message. При наступлении следующего срабатывания также будут рассчитаны Ценасрабатывани я2, Таргет2 и Стоплосс2, так вот хотелось бы иметь возможность сравнить и посчитать разницу между этими значениями или между собой но из разных условий срабатывания. Вычесть/сложить ценасрабатывани я1 и цена срабатывания2, вычесть/сложить таргет1 и таргет2, вычесть сложить ценасрабатывани я1 и стоплосс2.
.
Можно ли сделать несколько таких глобальных переменных, чтобы при срабатывании условия после расчета необходимых значений, данные значения записывались/со хранялись бы в этих глобальных переменных ячейках и накапливались бы исключительно до следующего срабатывания, пока новое условие срабатывания не создаст новые значения и не обновит глобальные переменные.
Ответить | Ответить с цитатой | Цитировать
# admin 16.03.2016 05:00
Здравствуйте.

Рассчитанную в момент срабатывания информацию можно сохранять в файл средствами языка луа. Для этого необходимо написать сложное условие, содержащее в себе функцию записи данных в файл.

После чего вы имеете файл с набором таких данных и можете его обрабатывать любым удобным способом
Ответить | Ответить с цитатой | Цитировать
# Evg789 16.03.2016 17:27
Михаил, добрый день.
Пробую настроить ваш Alert на "звездочку".
Логично
CONDITION = {999,1,Open} == {999,1,Close}
либо со скользкими с периодом 1, одна по клоз другая по опен:
CONDITION = {MA_Open,1} == {MA_Close,1}
либо
CONDITION = {MA_Open,1} - {MA_Close,1} == 0

Вариаций таких придумал много, но алерт срабатывает сразу же при запуске, статус пишет ДА и собственно на этом все заканчивается.. . )
В чем я ошибаюсь?
Спасибо.
Ответить | Ответить с цитатой | Цитировать
# admin 16.03.2016 17:30
Я не понял, что такое "звездочка", но ваши условия всегда истинны. Вы сравниваете значение с самим собой.
Ответить | Ответить с цитатой | Цитировать
# Evg789 16.03.2016 17:36
Свечка, закрытие которой равно открытию.
И данное условие не всегда равно...
Ответить | Ответить с цитатой | Цитировать
# Evg789 16.03.2016 17:38
Открытие свечи не всегда совпадает с ее закрытием...
Поэтому Open не всегда равен Close
Ответить | Ответить с цитатой | Цитировать
# admin 16.03.2016 17:42
У скользящей средней все поля OHLC одинаковы
Ответить | Ответить с цитатой | Цитировать
# Evg789 16.03.2016 17:48
А у цены?
Я графику цены задаю идентификатор 999
и предполагаю что данная формула будет верна
CONDITION = {999,1,Open} == {999,1,Close}
Либо два разных графика цены
999 и 777
CONDITION = {999,1,Open} == {777,1,Close}
И опять мимо
Ответить | Ответить с цитатой | Цитировать
# admin 16.03.2016 17:52
Не знаю мимо или нет, но условие

CONDITION = {999,1,Open} == {999,1,Close}

Сработает еслина графике с идентификатором 999 открытие и закрытие предпоследней справа свечи одинаковы.

Если алертер говорит, что условие выполено, значит так и есть )
Ответить | Ответить с цитатой | Цитировать
# Evg789 16.03.2016 18:05
hostingkartinok.com/.../
Вот график цены с этим идентификатором...
И собственно мы не видим чтобы хоть у одной свечки открытие совпадало с закрытием...
Может я в логике постановки формулы расчета ошибаюсь?
Ответить | Ответить с цитатой | Цитировать
# admin 16.03.2016 18:11
Включите в ini файле трассировку и посмотрите в логе, какие значения подставляются вместо {999,1,Open} и {999,1,Close}
Ответить | Ответить с цитатой | Цитировать
# Evg789 16.03.2016 18:16
Хм...
0 = 0 ....
Ответить | Ответить с цитатой | Цитировать
# Evg789 16.03.2016 18:22
Но ведь явно должно сравниваться 82520 каких нибудь с 82570... Ведь это значения открытия и закрытия...
Ответить | Ответить с цитатой | Цитировать
# admin 16.03.2016 18:23
Ищите ошибку. Тому ли графику дали идентификатор 999 и все подобные варианты
Ответить | Ответить с цитатой | Цитировать
# dennis1781 15.07.2016 11:49
Добрый день Михаил!

Подскажите, плиз, а можно ли через робота увидеть когда типовой Quik`овский индикатор Фрактал на графике принял нижнее значение?

Если да, то как?)

Спасибо!!!!

Также хотелось оставить пожелание по развитию: можно ли на график выводить не только графическую метку, но и текстовую
Ответить | Ответить с цитатой | Цитировать
# admin 15.07.2016 13:23
Цитирую dennis1781:
Добрый день Михаил!

Подскажите, плиз, а можно ли через робота увидеть когда типовой Quik`овский индикатор Фрактал на графике принял нижнее значение?

Если да, то как?)


Если сформирован верхний фрактал, то поле High в этой свече (не в текущей!) отлично от 0.

Для нижнего фрактала анализируйте поле Low.
Ответить | Ответить с цитатой | Цитировать
# dennis1781 15.07.2016 13:44
Я правильно вас понял?

{Sber5,1,High} ~=0
Но ведь high в любой свече отличен от 0...
Ответить | Ответить с цитатой | Цитировать
# admin 15.07.2016 14:15
Видимо, неправильно.

Анализировать high/low нужно не по графику инструмента, а по графику индикатора фракталов

Даёте идентификатор FR графику индикатора фракталов и пишете условие типа следующего:

CONDITION = {FR,3,High} ~= nil

Если не получается - что мешает вычислять фракталы самому? Это крайне просто, в ini файле есть готовый пример.
Ответить | Ответить с цитатой | Цитировать
# dennis1781 15.07.2016 15:05
Спасибо!
Ответить | Ответить с цитатой | Цитировать
# dennis1781 15.07.2016 12:43
Подскажите пожалуйста, что я не правильно сформулировал в нижеприведенном условии. Выдает ошибку "Повторение параметра...."

Спасибо.
[Проверка графика]
; CONDITION = (ServerTime() >= 103000 and ServerTime() < 103005) or (ServerTime() >= 110000 and ServerTime() < 110005) or (ServerTime() >= 113000 and ServerTime() = 120000 and ServerTime() < 120005) or (ServerTime() >= 123000 and ServerTime() < 123005) or (ServerTime() >= 130000 and ServerTime() = 133000 and ServerTime() < 133005) or (ServerTime() >= 140000 and ServerTime() < 140005) or (ServerTime() >= 143000 and ServerTime() < 143005) or_
; (ServerTime() >= 150000 and ServerTime() < 150005) or (ServerTime() >= 153000 and ServerTime() < 153005) or (ServerTime() >= 160000 and ServerTime() < 160005) or_
; (ServerTime() >= 163000 and ServerTime() < 163005) or (ServerTime() >= 170000 and ServerTime() < 170005) or (ServerTime() >= 173000 and ServerTime() < 173005) or_
; (ServerTime() >= 180000 and ServerTime() < 180005) or (ServerTime() >= 183000 and ServerTime() < 183005) or (ServerTime() >= 193000 and ServerTime() < 193005) or_
; (ServerTime() >= 200000 and ServerTime() < 200005) or (ServerTime() >= 203000 and ServerTime() < 203005) or (ServerTime() >= 210000 and ServerTime() < 210005) or_
; (ServerTime() >= 213000 and ServerTime() < 213005) or (ServerTime() >= 220000 and ServerTime() < 220005) or (ServerTime() >= 223000 and ServerTime() < 223005) or_
; (ServerTime() >= 230000 and ServerTime() < 230005) or (ServerTime() >= 233000 and ServerTime() < 233005)
Ответить | Ответить с цитатой | Цитировать
# admin 15.07.2016 13:30
Ошибка "Повторение параметра" возникает, когда в одной секции файла настроек вы дважды определяете один и тот же параметр.
Ответить | Ответить с цитатой | Цитировать
# Владимир111 27.01.2017 15:59
сколько стоит полная версия?
Ответить | Ответить с цитатой | Цитировать
# admin 27.01.2017 16:20
Владимир.

Перейдите из этой статьи по ссылке на скачивание - там есть вся необходимая вам информация.
Ответить | Ответить с цитатой | Цитировать
# Коcт 10.02.2017 18:09
Михаил здравствуйте!
Подскажите сервис оповещения в тестовой версии выдает сообщение только один раз?
у меня срабатывает только раз, повторно только если меняю текст сообщения в файле alert.ini и сохраняю.
Ответить | Ответить с цитатой | Цитировать
# admin 10.02.2017 18:28
Добрый день.

Логика такова. Запустили скрипт, проверилось условие. Условие выполнилось - дудим. Далее опять проверяем условие до момента, когда оно перестанет выполняться и молчим. Если после условие снова выполнится - опять продудим в первый же момент и снова будем молча ждать отмены условия.

При модификации инифайле скрипт исполняет полный рестарт - соответственно сообщает о выполненном условии.
Ответить | Ответить с цитатой | Цитировать
# Anton- 14.04.2017 10:49
Здравствуйте, После того как запускаешь скрипт, и условия оповещения срабатывают многократно, то в какой то момент срабатывания оповещения, Квик трапается и вылетает с записью дамп файла квика. Какой то закономерности по вылету квика не увидел: иногда весь день Квик нормально работает, иногда он вылетает через час.
ОС Win XP. Пробовал на квике 6 и 7 - ситуация не меняется.
Так же почему то не всегда срабатывает условие.
Например, я написал простейший скрипт, поставив на объем тикового графика идентификатор RTSVOL_tick и указал вот такие условия:
CONDITION = {RTSVOL_tick,0, Volume} >= 100
DESCRIPTION = Объём сделки RTS больше 100
MESSAGE = Y
SOUND = ringin.wav
COLOR = RGB(124,252,0)

Вот этот скрипт срабатывает иногда и часто сделки объемом больше 100 пропускает, но иногда срабатывает.
В чем причина?
Ответить | Ответить с цитатой | Цитировать
# Anton- 14.04.2017 10:58
Забыл сообщить, что версия Алерта 1.18
Для частоты эксперимента лучше поставить оповещение на >= 10
Ответить | Ответить с цитатой | Цитировать
# admin 14.04.2017 11:04
Сначала о вашем условии.

В описании скрипта в явном виде декларируется, что на тиковых графиках он может не всегда корректно работать.

Посудите сами. Вы смотрите объем последнего тика. Но что мешает между просчетами скрипта прийти не одному тику, а сразу 5 или 50? Конечно будет пропускать.

Чтобы вашу задачку решить с большой надежностью, проверяйте последние 100 тиков, выбирайте из них максимальный объем и сравнивайте с вашим порогом.

CONDITION = max{RTSVOL_tick ,0-100, Volume} >= 100

Касаемо вылетов квика - трудно что-либо сказать. Обычно такие безобразия прекращаются после переустановки терминала. Скрипт развалить терминал не может, даже если у него на то есть злой умысел.
Ответить | Ответить с цитатой | Цитировать
# Anton- 14.04.2017 13:24
Спасибо, но у меня несколько иная задача - мне нужен объем от разовой сделки, а не собирать объемы по нескольким тикам.
Я думал как сделать так чтобы по условию из таблицы всех сделок выдавал алерт по объему в сделке. Надеялся найти решение данного вопроса через тиковый график и присвоение идентификатора к объему. Но данный алерт, как выяснилось, пропускает объемы, ему даже не помогает TIMEOUT = 0.1
Какое есть еще решение? Может быть можно как то брать данные из таблицы всех сделок?
Ответить | Ответить с цитатой | Цитировать
# admin 14.04.2017 13:36
Условие, которое я вам написал делает ровно то, что вам нужно.

Именно следующее: если ХОТЯ БЫ В ОДНОЙ из последних сделок был большой объем - дудим.

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

Порог по объему ставьте сами.
Количество сделок для просмотра регулируйте сами исходя из ликвидности рынка.
Ответить | Ответить с цитатой | Цитировать
# Anton- 14.04.2017 14:20
Спасибо! Я понял. Просто ожидание 100 сделок - на оперативность будет влиять, а мне нужно было сразу чтобы успеть за большой сделкой :)
Ладно, так или иначе вопрос об ошибке ниже остается открытым. В чем причина?
Ответить | Ответить с цитатой | Цитировать
# admin 18.04.2017 09:46
В связи с большим количеством комментариев на этой странице дальнейшее обсуждение переносится на форум www.bot4sale.ru/forum-menu/alerter.html

Добавление комментариев здесь закрыто. Они будут удалены автоматически.

Спасибо за понимание.
Ответить | Ответить с цитатой | Цитировать
Добавить комментарий