При старте скрипт сканирует файл tickers.csv, в котором задается список инструментов, по которым будут выполнятся команды.
Формат файла:
sec_code; strategy; interval; account; client_code; trade_qty; max_loss_profit
Периодически (параметр: FILE_SCAN_PERIOD) сканируется каталог (параметр: FILES_PATH) на предмет новых файлов. Если в каталоге появился новый текстовый файл, скрипт читает его, разбирает команду и в зависимости от результата перемещает файл в каталог обрабоанных файлов (параметр: PROCESSED_FILES_PATH) или необратанных файлов (параметр: NON_PROCESSED_FILES_PATH). Фафлы - это простые текстовые файлы, определенного формата (описано ниже).
Пример автоматизации - подписка на получение почтовых сообщений от сервиса TradingView по настроенным сигналам. Чтение почтового ящика, сохранение содержимого полученных писем в каталог, разбор их скриптом, выполнение команд. Т.о. автоматизируется выполнение торговых команд по сигналам TradingView. Также можно отправлять письма вручную, выполоняя свои команды.
Для чтения почты приложен проект C# почтового клиента. Собранный файл ReciveEmail.exe. Для отправки почты используется проект https://github.com/nick-nh/SendEmail. Собранный файл SendEmail.exe
В архиве email_bin.zip содержится набор собранных файлов:
Файл ReciveEmail.exe - программа чтения почты Файл ReciveEmail.ini - файл настроек получения почты, содержит настройки получения и сохранения почты.
В файле ReciveEmail.ini есть параметр "emails_folder" - путь к каталогу, куда записываются полученные файлы почты. В настройках скрипта необходимо указать тот же пусть к каталогу "FILES_PATH", чтобы скрипт сканировал новые файлы в этом же каталоге. В структуре каталогов скрипта уже сделана папка "inbox". Она по умолчанию назначена для приема писем в скрипте. (Настройки скрипта изменяются в самом файле скрипта signalOrders.async.lua. Его можно открыть любым текстовым редактором)
Файл SendEmail.exe - программа отправки почты Файл SendEmail.ini - файл настроек отправки почты
Архив необходимо распаковать в каталог скрипта (без дополнительных каталогов)
Запустить почтовый клиент - ReciveEmail.exe. Добавить в терминал, в список доступных скриптов файл signalOrders.async.lua и запустить.
--Сдвиг времени относительно времени биржи
TIME_ZONE = 0
--Интервал обновления данных с текущим состоянием c сервера брокера (сек.)
--Задается в настройках терминала в пункте меню «Система» / «Настройки» / «Основные настройки» / «Программа» на вкладке «Получение данных»
--Если время сервера больше времени последнего сообщения чем период опроса, то связь с сервером брокера еще не установлена
-- По умолчанию -1 не контролировать
SERVER_DATA_CYCLE_TIME = -1
--Путь к файлам с данными
FILES_PATH = Path..'\\inbox'
--Путь к архиву файлов с данными
ARCHIVE_FILES_PATH = Path..'\\history'
--Путь к обработанным файлам с данными
PROCESSED_FILES_PATH = Path..'\\processed'
--Путь к не обработанным файлам с данными
NON_PROCESSED_FILES_PATH = Path..'\\non-processed'
--Структура файла разрешенных для торговли инструментов
SEPARATOR = ';'
TICKERS_FILE_NAME = 'tickers.csv'
TICKERS_FILE_STRUCT = 'sec_code;strategy;interval;account;client_code;trade_qty;max_loss_profit'
--Корректный email-adress. Если письмо не от корректного адреса, то оно не обрабатывается
CORRECT_EMAIL_ADRESS = '[email protected]'
-- Отправлять ответный email
-- 1 - да
-- 0 - нет
-- Важно. Для отправки почты необходимо заполнить в файле SendEmail.ini настройки аккаунта и почтового сервера
-- После настройки необходимо убедиться в работоспособности программы SendEmail.exe, выполнив ее. Произойдет попытка отправки почты
-- на указанный сервер. Текст письма берется из файла email_text.txt. В данный файл робот будет записывать очередное сообщение для отправки.
SEND_RESPONSE_EMAIL = 0
EMAIL_TEXT_FILE_PATH = Path..'\\email_text.txt'
SEND_EMAIL_EXE_PATH = Path..'\\SendEmail.exe'
-- Номера команд для старта|остановки|закрытия
STOP_COMMAND_STRATEGY = 5
START_COMMAND_STRATEGY = 6
CLOSE_COMMAND_STRATEGY = 7
--Период сканирования новых файлов в сек. Установливать значение больше 0-5 сек. Т.к. слишком частое сканирование - это мелькание черного окна терминала.
FILE_SCAN_PERIOD = 10
--Код класса инструментов по умолчанию для определения статуса торговой сессии
CLASS_CODE = 'SPBFUT'
-- Классы инструментов для считывания параметров инструментов
TRACK_CLASS_CODES = 'TQBR|QJSIM|SPBFUT'
--Время автоматического включение робота в режим старт торговли по всем инструментам: (0-выключено, либо время в формате "ЧЧ:ММ:CC")
--(Кавычки при указании времени обязательны)
-- При наступлении указанного времени скрипт начинает обрабатывать сигналы
-- Если установлен 0, то запуск производится по команде
AUTO_START_TIME = '10:00:00'
--Время автоматического окончания торговли по всем инструментам: (0-выключено, либо время в формате 'ЧЧ:ММ:CC')
--(Кавычки при указании времени обязательны)
-- При наступлении указанного времени скрипт заканчивает обрабатывать сигналы
-- Если установлен 0, то остановка производится по команде
END_TRADE_TIME = '23:49:30'
--Режим торгов
-- 0 - Т0, 1 - Т1, 2 - Т2
-- Для демо-счета, обычно = 0
-- На реальном счете для Акций - Т2,
-- Для фьючерсов - Т0. Это важно.
-- Если указать некорректное значение робот не сможет получить текущий баланс позиции и доступные денежные средства.
LIMIT_KIND = 0
-- Величина отступа в шагах цены для выставления рыночной заявки, для ее гарантированного исполнения
-- Понижая отступ можно увеличить допустимый размер набираемой позиции, т.к. расчет ГО ведется от цены устанавливаемой заявки
MARKET_PRICE_OFFSET = 100
--При развороте делить вход в позицию на два этапа. Сначала закрывать прошлую позицию, потом входить в новую.
--Это необходимо при торговле на границе по лимитам денежных средств
-- Значения:
-- 1 - делить
-- 0 - не делить, выходить по рынку единой заявкой
SPLIT_REVERSE_ORDER = 1
-- Признак ведения лога.
-- 1 - выводить
-- 0 - нет
LOGGING = 1
- 1 - лонг, страетегия Long_Once_Per_Bar
- 2 - лонг, страетегия Long_Per_Bar_Close
- 3 - шорт, стратеги Short_Once_Per_Bar
- 4 - шорт, стратеги Short_Per_Bar_Close
- 5 - стоп торговли по всем инструментам по всем стратегиям
- 5 - стоп торговли по конкретному инструменту по всем стратегиям
- 6 - старт торговли по всем инструментам по всем стратегиям
- 6 - старт торговли по конкретному инструменту по всем стратегиям
- 7 - закрытие всех позиций по всем инструментам
- 7 - закрытие всех позиции по конкретному инструменту
Если задан параметр AUTO_START_TIME, то по наступлению времени все инструменты переходят в рабочее состояние и готовы отрабатывать команады. Если не задан, то чтобы запустить инструмент(ы) необходимо подать команду 6.
Если задан параметр END_TRADE_TIME, то по наступлению времени все инструменты переходят в остановленное состояние и прекращают отрабатывать команады. Если не задан, то чтобы остановить инструмент(ы) необходимо подать команду 7.
Формат команд:
<номер команды>, <код инструмента | ALL>, <имя стратегии (команды)> [, <разрешенный интервал стратегии>], <корректный email>
Если письмо не от корректного адреса, то она не обрабатывается Если команда не от разрешенного интервала, то она не обрабатывается
<1>, <SiU9>, <Long_Once_Per_Bar>, <Interval_m3>, <[email protected]> = лонг по стратегии 1
<2>, <SiU9>, <Long_Per_Bar_Close>, <Interval_m3>, <[email protected]> = лонг по стратегии 2
<3>, <SiU9>, <Short_Once_Per_Bar>, <Interval_m3>, <[email protected]> = шорт по стратегии 3
<4>, <SiU9>, <Short_Per_Bar_Close>, <Interval_m3>, <[email protected]> = шорт по стратегии 4
<5>, <ALL>, <Stop>, <[email protected]> = стоп торговли по всем инструментам по всем стратегиям
<5>, <SRZ9>, <Stop>, <[email protected]> = стоп торговли по SRZ9 по всем стратегиям
<6>, <ALL>, <Start>, <[email protected]> = старт торговли по всем инструментам по всем стратегиям
<6>, <SRZ9>, <Start>, <[email protected]> = старт торговли SRZ9 по всем стратегиям
<7>, <ALL>, <Close>, <[email protected]> = закрытие всех позиций по всем инструментам
<7>, <SRZ9>, <Close>, <[email protected]> = закрытие всех позиции по SRZ9
Скрипт написан давно для определенного формата команд . Выкладывается как есть. Вы можете изменить формат и обработку команд.