Скрипт transactionPocket

[ карман_транзакций  скрипт  робот  lua  qlua  квик  quik  ]


В терминале Квик есть такой инструмент как “Карман транзакций”. Он позволяет сохранить транзакции “на будущее”. Одна проблема - ручное управление списком и необходимость отслеживать уже исполненные транзакции. Мне был необходим инструмент, с помощью которого можно было бы формировать список транзакций, а также чтобы он автоматически отслеживал все действия с заявками. В конечном итоге, постоянно следить за ходом торгов не всегда удается, да и нет особого желания постоянно смотреть за графиками.

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

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

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

Также необходима возможность устанавливать заявки на закрытие позиции, купленной по уровню. Допустим, по ранее установленной заявке, был куплен инструмент по цене 100. Можно отследить это событие и установить заявку на продажу, чтобы она ждала своего исполнения. Или можно уже при формировании заявки на открытие позиции сразу определить, что мы хотим закрыть позицию по цене, допустим 120. Т.е. необходимо иметь возможность указывать ценовой отступ, по которому определится уровень куда будет установлена заявка сразу после исполнения первичной заявки. Т.к. значение отступа сохраняется при формировании встречной заявки, то после ее исполнения снова будет установлена заявка (которая будет уже встречной для нее) на тот же уровень, где была первоначальная заявка. Т.о. будут автоматически устанавливаться заявки по заранее определенным уровням.

В результате этих требований был написан скрипт, реализующий данную функциональность.

По вопросам приобретения данного скрипта обращайтесь.

Небольшое видео работы скрипта

Установка скрипта


Скрипт поставляется в виде архива. Который можно распаковать по любому местоположению.

Папка transactionPocket содержит:

Основной файл для запуска в Квике - это transactionPocket.lua

Запуск скрипта


В торговом терминале Quik необходимо в меню “Сервисы“ выбрать команду “Lua скрипты”.
В результате появится окно управления всеми скриптами

В данном окне необходимо выполнить команду “Добавить” и выбрать запускаемый файл transactionPocket.lua, сохраненный по месту установки скрипта.
В результате в окне появится дополнительная строка с описанием добавленного файла:

Запуск скрипта осуществляется с помощью команды “Запустить”. При этом запущенный скрипт в окне “Доступные скрипты” будет выделен зеленым треугольником. Остановленный - красным квадратом.
Остановка скрипта осуществляется с помощью команды “Остановить”.

Главное окно скрипта


После запуска скрипта будет выведено главное окно скрипта:

Главное окно содержит колонки вывода и управления информацией:

  1. Sec - код инструмента
  2. Clаss - класс инструмента
  3. Type - “Вход” | “Выход” - это служебное поле, необходимое для определения типа сделки. Если позиция положительная и Dir - продажа, то это выход. Или, если заявка в “Шорт” и необходимо обеспечить автоматическое выставление заявки на выход, то надо установить значение “Вход”. По умолчанию для “Лонга” - “Вход”. Меняется двойным кликом по полю.
  4. Dir - “Покупка” “Продажа”. - Меняется двойным кликом по полю.
  5. Price - цена выставления заявки.
  6. Qty - Количество (сумма, процент от счета) в заявке.
  7. qType - тип количества. Меняется двойным кликом по полю. Возможные значения:
    • «количество лотов» (по умолчанию)
    • «сумма (в рублях)»
    • «% от счета».

    Последние два пункта - это для выставления заявки на сумму, для примера 10000 руб или 2% от счета. Т.е. на этой цене будет взято столько лотов, чтобы не выйти за эту сумму.

  8. OrdQty - если заявка по сумме, то здесь будет записано сколько лотов вышло в заявке. Тогда для автоматической заявки, установленной по сетке, будет выставлено именно это количество.
  9. Auto - Меняется двойным кликом по полю. Признак автоматического выставления заявки в начале торгового дня. Если нет, то такие заявки ставятся руками через команды.
  10. Cond - условие выставления заявки в формате «price >= 100.2». Можно использовать как признак пробоя для входа. Можно как стоп. Скажем, заявка на продажу при цене ниже 100 («price <= 100»), по цене 97 (чтобы исполнилась).
  11. sType - тип шага выставления встречной заявки. Меняется двойным кликом по полю. Возможные значения:
    • «пт» - пункты (по умолчанию). Пункт - это последняя значащая цифра в цене. Т.е. цены 100.02 и 100.03 различаются на 1 пункт.
    • «% от цены.
  12. NetStep - шаг выставления встречной заявки (в указанном типе цены) при исполнении основной.
  13. AlertPrice - цена вывода сообщения и отправки сообщения на почту|Телеграм при достижении цены.
  14. Client - Код клиента. Меняется двойным кликом по полю.
  15. Acc - Номер счета. Меняется двойным кликом по полю.
  16. Message - Сообщения для данной строки.

Правила редактирования полей


Все редактируемые (числовые, строковые) поля окрашиваются в желтый цвет. Чтобы начать редактировать поле необходимо выделить необходимое поле. Далее можно привычными командами с клавиатуры ввести необходимое значение показателя. При этом, если это необходимо, удалить старое значение. Также числовые поля можно изменять с помощью клавиш “стрелка влево” - уменьшить значение, “стрелка вправо” - увеличить значение. Тем самым можно быстро изменить значение, не вводя его с клавиатуры.

Работа скрипта


После запуска скрипт просканирует установленные заявки и уже совершенные сделки до запуска. Они будут выведены в окно скрипта. Исполненные заявки подсвечиваются розовым цветом. Активные заявки зеленым цветом.

Скрипт поддерживает горячие клавиши:

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

Также можно вызвать контекстное меню с данным списком команд, воспользовавшись правой клавишей указателя в строке или заголовке окна.



Чтобы ввести заявку можно просто ввести ее, воспользовавшись возможностями терминала. Заявка будет автоматически добавлена в список и помечена признаком Auto для автоматической установки. Если необходимо ввести заявку вне доступного ценового диапазона, необходимо воспользоваться командой Добавить заявку - Shift+I. После ввода команды появится окно выбора инструмента.

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

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

Далее необходимо указать параметры добавляемой заявки и установить признак Auto для ее автоматической установки.

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

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

Если необходимо удалить заявку, то, как отмечалось выше, можно удалить ее используя возможности терминала или воспользоваться командой Удалить заявку - Shift+R’. Если необходимо ввести заявку по инструменту, по которому уже есть строка, можно воспользоваться командой Дублировать заявку - Shift+B. Это приведет к появлению новой неактивной строки. Отредактировав которую и установив признак Auto данная заявка будет установлена.

Ведение журнала сделок


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



Отправка сообщений


Скрипт позволяет отправлять оповещения на почту и в Телеграм. Для этого используется решение telegramQuik.

Важно: для корректной работы в Windows 7 необходимо:

В папке transactionPocket\libs расположен подкаталог telegramServer. В нем размещены файлы запуска и настройки сервера отправки сообщений. Скрипт при старте проверяет наличие папки с сервером отправки сообщений и если он найдена, то происходит его запуск, посредством вызова файла startTeleServer.bat, расположенного в каталоге transactionPocket\libs\telegramServer. После запуска сервера отправки сообщений появится консольное окно, сигнализирующее о его готовности. Одновременный запуск нескольких экземпляров сервера отправки сообщений MessagesQServer.exe нежелателен, т.к. они будут конфликтовать друг с другом. Поэтому ручной страт сервера желательно производить через файл startTeleServer.bat (скрипт при запуске делает это автоматически).

Перед запуском необходимо провести настройку сервера отправки сообщений. Это производится через редактирование файла settings.ini в каталоге сервера отправки.

Содержимое данного файла:
[TELEGRAM]
START_TELEGRAM = ON
TELEGRAM_PIPENAME = telegram_pipe
TOKEN = Your TOKEN
USE_ENCODING = windows-1251
[EMAIL]
START_EMAIL = ON
EMAIL_PIPENAME = email_pipe
SENDER = sender
RECIPIENT = recipient
COPY =
EMAIL_SUBJECT = Message from Quik
SMTPSERVER = smtp
SERVERPORT = 587
LOGIN = login
PASSWORD = pass

Раздел [TELEGRAM] - раздел настройки отправки сообщений в Телеграм. Если необходима отправка сообщений в Телеграм, то необходимо установить настройку START_TELEGRAM = ON, иначе OFF. Сообщения в Телеграм отправляются в зарегистрированный бот. О регистрации ботов в Телеграм можно найти подробную инструкцию на сайте сервиса Телеграм или воспользоваться поиском.

Раздел [EMAIL] - раздел настройки отправки сообщений на электронную почту. Если необходима отправка почтовых сообщений, то необходимо установить START_EMAIL = ON, иначе OFF.

Служебные настройки скрипта


Технические параметры задаются в файле transactionPocket_params.ini. Данный файл содержит следующие настройки: