Расширенный сервис оповещений QUIK
На форуме поддержки quik пачками идут просьбы о расширении возможностей встроенного механизма сообщений. Надо признать, что оповещения в терминале действительно крайне куцые. Судя по тому, что просьбы остаются без ответа уже многие годы, ждать улучшений в этом вопросе особого смысла нет.
По аналогии с фреймворком для Амиброкера у меня есть аналогичный для lua. Сегодня выдернул из него кусочек и оформил в виде отдельного скрипта.
Сприпт позволяет заменить встроенный сервис оповещений терминала quik. Полностью покрывает все его возможности плюс дает возможность генерировать сообщения на основании любых графиков и индикаторов, применяя широкий набор математических и логических функций. Позволяет генерировать 6 видов сообщений:
- Индикация состояния в экранной таблице с использованием цвета.
- Сообщение на экране
- Проигрывание звукового файла wav, mp3, midi (настраивается отдельно на каждое событие)
- Запуск произвольной программы Windows
- Отсылка почты на указанный адрес
- Установка метки на графике (отдельно для каждого условия)
Можно использовать для расчета событий любое количество графиков или индикаторов. Использовать для расчета условий событий можно значения как последней (правой) свечи, так и любую предыдущую.
Количество правил для генерации оповещений неограниченно.
Можно использовать как встроенные в терминал индикаторы, так и пользовательские, написанные на qlua.
Все действия и сигналы протоколируются.
ПРИМЕРЫ ВОЗМОЖНОСТЕЙ:
- Цена инструмента превысила (или стала меньше) 100 руб/акция
- Цена инструмента пробила вверх (вниз) скользящую среднюю
- Цена инструмента превысила верхнюю линию канала Боллинджера
- Три (четыре, пять или даже пятнадцать) скользящих средних выстроились на графике в порядке возрастания (убывания) их периодов
- Потеряно соединение с сервером брокера
- Сегодня пятница и через 10 минут закончится торговая сессия
- Спред между базовым активом и фьючерсом на него (поделённым на 100) превысил (или стал меньше) требуемой величины
- Разница между минимальным и максимальным значениями цен инструмента за последние 6 (12, 123, 1234) свечей не превышает 10 рублей (или 2%, к примеру)
- Индекс РТС отклонился на большее, чем задано расстояние от рассчитанного индекса его составляющих
- Объем текущей свечи превысил 10 000
- Прибыль клиентского портфеля превысила 10 000 рублей
- Стоимость клиентского портфеля опустилась ниже 300 000 рублей
- Цена вошла в облако (вышла из облака) Ишимоку и стохастик меньше (больше, равен) заданного значения
- Квадратный корень из цены индекса РТС минус натуральный логарифм лучшей цены предложения фьючерса на Сбербанк превышает суммарное предложение акций Газпрома на величину цены вчерашнего закрытия акции Уралкалия минус остаток от деления индекса ММВБ на 3.1415
- Любые другие фантазии, в том числе неприличные
А подскажите, почему этот вопрос мне задают каждый день, если в ссылке на скачивание есть исчерпывающая информация об этом?
По этой ссылке никто не ходит?
.
Например. При соблюдении условия A>B я рассчитываю Ценусрабатывани я1, Таргет1 и Стоплосс1.
.
Эти данные рассчитываются в поле Description, а также рассылаются полями Email и Message. При наступлении следующего срабатывания также будут рассчитаны Ценасрабатывани я2, Таргет2 и Стоплосс2, так вот хотелось бы иметь возможность сравнить и посчитать разницу между этими значениями или между собой но из разных условий срабатывания. Вычесть/сложить ценасрабатывани я1 и цена срабатывания2, вычесть/сложить таргет1 и таргет2, вычесть сложить ценасрабатывани я1 и стоплосс2.
.
Можно ли сделать несколько таких глобальных переменных, чтобы при срабатывании условия после расчета необходимых значений, данные значения записывались/со хранялись бы в этих глобальных переменных ячейках и накапливались бы исключительно до следующего срабатывания, пока новое условие срабатывания не создаст новые значения и не обновит глобальные переменные.
Рассчитанную в момент срабатывания информацию можно сохранять в файл средствами языка луа. Для этого необходимо написать сложное условие, содержащее в себе функцию записи данных в файл.
После чего вы имеете файл с набором таких данных и можете его обрабатывать любым удобным способом
Пробую настроить ваш Alert на "звездочку".
Логично
CONDITION = {999,1,Open} == {999,1,Close}
либо со скользкими с периодом 1, одна по клоз другая по опен:
CONDITION = {MA_Open,1} == {MA_Close,1}
либо
CONDITION = {MA_Open,1} - {MA_Close,1} == 0
Вариаций таких придумал много, но алерт срабатывает сразу же при запуске, статус пишет ДА и собственно на этом все заканчивается.. . )
В чем я ошибаюсь?
Спасибо.
И данное условие не всегда равно...
Поэтому Open не всегда равен Close
Я графику цены задаю идентификатор 999
и предполагаю что данная формула будет верна
CONDITION = {999,1,Open} == {999,1,Close}
Либо два разных графика цены
999 и 777
CONDITION = {999,1,Open} == {777,1,Close}
И опять мимо
CONDITION = {999,1,Open} == {999,1,Close}
Сработает еслина графике с идентификатором 999 открытие и закрытие предпоследней справа свечи одинаковы.
Если алертер говорит, что условие выполено, значит так и есть )
Вот график цены с этим идентификатором...
И собственно мы не видим чтобы хоть у одной свечки открытие совпадало с закрытием...
Может я в логике постановки формулы расчета ошибаюсь?
0 = 0 ....
Подскажите, плиз, а можно ли через робота увидеть когда типовой Quik`овский индикатор Фрактал на графике принял нижнее значение?
Если да, то как?)
Спасибо!!!!
Также хотелось оставить пожелание по развитию: можно ли на график выводить не только графическую метку, но и текстовую
Если сформирован верхний фрактал, то поле High в этой свече (не в текущей!) отлично от 0.
Для нижнего фрактала анализируйте поле Low.
{Sber5,1,High} ~=0
Но ведь high в любой свече отличен от 0...
Анализировать high/low нужно не по графику инструмента, а по графику индикатора фракталов
Даёте идентификатор FR графику индикатора фракталов и пишете условие типа следующего:
CONDITION = {FR,3,High} ~= nil
Если не получается - что мешает вычислять фракталы самому? Это крайне просто, в ini файле есть готовый пример.
Спасибо.
[Проверка графика]
; 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)
Перейдите из этой статьи по ссылке на скачивание - там есть вся необходимая вам информация.
Подскажите сервис оповещения в тестовой версии выдает сообщение только один раз?
у меня срабатывает только раз, повторно только если меняю текст сообщения в файле alert.ini и сохраняю.
Логика такова. Запустили скрипт, проверилось условие. Условие выполнилось - дудим. Далее опять проверяем условие до момента, когда оно перестанет выполняться и молчим. Если после условие снова выполнится - опять продудим в первый же момент и снова будем молча ждать отмены условия.
При модификации инифайле скрипт исполняет полный рестарт - соответственно сообщает о выполненном условии.
ОС 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 пропускает, но иногда срабатывает.
В чем причина?
Для частоты эксперимента лучше поставить оповещение на >= 10
В описании скрипта в явном виде декларируется, что на тиковых графиках он может не всегда корректно работать.
Посудите сами. Вы смотрите объем последнего тика. Но что мешает между просчетами скрипта прийти не одному тику, а сразу 5 или 50? Конечно будет пропускать.
Чтобы вашу задачку решить с большой надежностью, проверяйте последние 100 тиков, выбирайте из них максимальный объем и сравнивайте с вашим порогом.
CONDITION = max{RTSVOL_tick ,0-100, Volume} >= 100
Касаемо вылетов квика - трудно что-либо сказать. Обычно такие безобразия прекращаются после переустановки терминала. Скрипт развалить терминал не может, даже если у него на то есть злой умысел.
Я думал как сделать так чтобы по условию из таблицы всех сделок выдавал алерт по объему в сделке. Надеялся найти решение данного вопроса через тиковый график и присвоение идентификатора к объему. Но данный алерт, как выяснилось, пропускает объемы, ему даже не помогает TIMEOUT = 0.1
Какое есть еще решение? Может быть можно как то брать данные из таблицы всех сделок?
Именно следующее: если ХОТЯ БЫ В ОДНОЙ из последних сделок был большой объем - дудим.
Проверять одну последнюю сделку нельзя в принципе. Обезличенные сделки приходят пачкам, поэтому в каждой пачке вы протестируете только последнюю сделку. Поэтому проверять нужно не одну последнюю сделку, а какое-то количество последних сделок.
Порог по объему ставьте сами.
Количество сделок для просмотра регулируйте сами исходя из ликвидности рынка.
Ладно, так или иначе вопрос об ошибке ниже остается открытым. В чем причина?
Добавление комментариев здесь закрыто. Они будут удалены автоматически.
Спасибо за понимание.
RSS лента комментариев этой записи