Мы создаем торговый робот за счет связки программ Omega TradeStation и торговых терминалов QUIK и TRANSAQ.
Автоматическая торговля достигается путем передачи приказов из системы технического анализа Omega TradeStation в торговые терминалы через запись в ТХТ файле. Сначала создается данный файл а потов программаж прописываются пути к нему.
QUIK
Для обмена информацией между QUIK и внешней программой используются текстовые файлы фиксированной структуры:
● *.tri — файл с параметрами транзакций,
● *.tro — файл с результатами посылки транзакций в торговую систему,
● *.trr — файл, содержащий журнал обработки транзакций.
Схема взаимодействия между программами выглядит следующим образом:
1. Внешняя программа формирует транзакцию с заданными параметрами и записывает ее в виде новой строки в .tri-файл.
2. Система QUIK опрашивает с определенной периодичностью .tri-файл с параметрами транзакций и передает в торговую систему ранее не обработанные транзакции.
3. Результат действий записывается в .tro-файл.
* ЗАМЕЧАНИЕ: Перед первым чтением .tri-файла QUIK обращается к .tro-файлу и считывает обработанные заявки. Заявки, содержащиеся в .tro-файле считаются обработанными, и строки в .tri-файле с тем же параметром TRANS_ID игнорируются. Если внешняя программа при каждом запуске начинает нумеровать заявки сначала, то перед ее запуском необходимо удалить .tro-файл из рабочей директории или после запуска очистить .tri-файл.
Настройка
1. Из пункта меню Торговля / Импорт транзакций из файла… откройте окно настройки импорта транзакций.
2. В поле «Файл с исходными данными о транзакциях» введите полный путь к .tri-файлу c транзакциями, например, «C:\quikdata\input.tri». Если такого файла нет, то создайте его: на диске С создайте папку quikdata, в этой папке кликните правой кнопкой мыши и выберите из контекстного меню Создать/Текстовый документ. Назовите этот файл input.tхt. Потом наведите на него мышь и кликните правой кнопкой и выберите «Переименовать». После этого поменяйте разширение .txt на .tri. Программа спросит подтверждения — жмети «Ок» и все готово. Так же создаются и последующие файлы.
3. В поле «Обрабатывать через .. секунд» укажите периодичность чтения файла. Рекомендуемый интервал — 5 секунд.
4. Если установлен флажок «Оповещать об обработке файла звуковым сигналом», то при каждом обращении к файлу программа будет подавать звуковой сигнал. Используйте его при необходимости для контроля над функционированием процесса импорта транзакций.
5. В поле «Файл с данными об успешно отправленных транзакциях» введите полный путь к .tro-файлу, например, «C:\quikdata\output.tro».
6. В поле «Файл с журналом отправляемых транзакциях» введите полный путь к .trr-файлу, например, «C:\quikdata\log.trr».
7. Если установлен флажок «Вести журнал отправляемых транзакций», то в .trr-файл будет записываться информация об обработанных транзакциях.
8. Следующие параметры («Число обращений сделанных к файлу» и т.д.) используются как статистика процесса импорта транзакций.
9. Нажатие кнопки «Начать обработку» приводит к старту процесса импорта транзакций. Нажатием кнопки «Прекратить обработку» процесс импорта останавливается.
10. Нажмите кнопку «Закрыть» для закрытия окна настройки с сохранением выполненных настроек. Если процесс импорта начат, он будет осуществляться автоматически в фоновом режиме.
Для записи приказа в файл в код стратегии нужно внести дополнительные строки.
Пишется на в конце кода написанного на языке Easy Language. Как писать стратегии на языке Easy Language можно прочитать на нашем сайте.
Пример: ФОРТС для КВИКА. Возьмем простую стратегию и добавим к ней код для записи в файл. Код сам расчитывает объем позиции изходя из риска в 2%.
Inputs:M(5),K(9),Slipage_Percent(100),BSize(100000),Percent(2),Dollar(26.1);
Variables: Up(0), Dn(0),count(100),Risk(0),Contrakts(0);
Up = Highest(High,M)[1];
Dn = Lowest(Low,K)[1];
Risk=IFF(close-Dn<>0,Percent*close/(close-Dn),1);
Contrakts=BSize*Risk/100/(c*0.02*Dollar);
{LONG}
if MarketPosition=0 and C crosses above Up then begin Buy Contrakts shares at c;
count=count+1;
if lastbaronchart then
FileAppend(«C:\quikdata\input.tri»,»TRANS_ID=»+NumToStr(count,0)+»; ACCOUNT=НомерСчета;»+» CLIENT_CODE=;»+» TYPE=L;»+
» CLASSCODE=SPBFUT;»+» SECCODE=RIM7;»+» ACTION=NEW_ORDER;»+» OPERATION=B;»+» PRICE=»+NumToStr(c+Slipage_Percent,0)
+»; QUANTITY=»+NumToStr(Contrakts,0)+NewLine);
end;
{EXITLONG}
if MarketPosition=1 and C crosses below Dn then begin ExitLong(«Stop») at C;
count=count+1;
if lastbaronchart then
FileAppend(«C:\quikdata\input.tri»,»TRANS_ID=»+NumToStr(count,0)+»; ACCOUNT=НомерСчета;»+» CLIENT_CODE=;»+» TYPE=L;»+
» CLASSCODE=SPBFUT;»+» SECCODE=RIM7;»+» ACTION=NEW_ORDER;»+» OPERATION=S;»+» PRICE=»+NumToStr(c-Slipage_Percent,0)
+»; QUANTITY=»+NumToStr(CurrentContracts,0)+NewLine);
end;
где: НомерСчета — это ваш счет на фортсе, к примеру: SPBFUT00111
SPBFUT — название секции, оно может менятся, смотрите в спецификации инструмента.
RIM7 — название торгуемого контракта, оно может менятся, смотрите в спецификации инструмента.
Transaq
Настройка производится с помощью закладки «Автоматический импорт
транзакций» диалога «Параметры АРМ трейдера».
Необходимо задать имена трех текстовых файлов:
«Файл транзакций». Файл, куда внешняя программа будет помещать
параметры выставляемых и снимаемых заявок.
Результаты обработки транзакций сохраняются в следующих файлах:
«Журнал результатов анализа транзакций» — описание принятых
транзакций или ошибок в их параметрах;
«Журнал результатов исполнения транзакций» — информация о том
выполнена транзакция или нет.
При запуске процедуры импорта Торговый терминал анализирует «Журнал
результатов исполнения транзакций» и находит номер последней
обработанной транзакции. Транзакции, номера которых меньше, либо равны
номеру последней обработанной, считаются обработанными и игнорируются.
При выборе варианта «Импорт из файла транзакций»
Чтобы отправить новую транзакцию внешняя система добавляет строку с ее
описанием в файл транзакций, присваивая ей индивидуальный номер, который в дальнейшем используется для анализа результатов исполнения данного распоряжения.
Торговый терминал периодически анализирует файл транзакций и передает
распоряжения Трейдера серверу TRANSAQ для их проверки и трансляции на
Биржу.
Для записи приказа в файл в код стратегии нужно внести дополнительные строки.
Пример для ММВБ: Возьмем простую стратегию и добавим к ней код для записи в файл. Код сам расчитывает объем позиции изходя из риска в 2%.
Inputs:M(5),K(9),Slipage_Percent(0.5),BSize(100000),Percent(2),Dollar(26.1);
Variables: Up(0), Dn(0),count(100),Risk(0),Contrakts(0);
Up = Highest(High,M)[1];
Dn = Lowest(Low,K)[1];
Risk=IFF(close-Dn<>0,Percent*close/(close-Dn),1);
Contrakts=BSize*Risk/100/(c*0.02*Dollar);
{LONG}
if MarketPosition=0 and C crosses above Up then begin Buy Contrakts shares at c;
count=count+1;
if lastbaronchart then FileAppend(«C:\New Folder\1.txt», NumToStr(count,0)+»,»+»NEW_POSITION,»+»CLIENT_GROUP,»+
«POS_PERCENT,»+»,»+»LKOH,»+»MICEX,»+»EQBR,»+»LKOH,»+»Z»+», «+»B,»+»NNNNZ,»+NumToStr(c+c/100*Slipage_Percent,2)+»,»+
NumToStr(Per,0)+»,»+»,»+»,»+»0,»+»,»+»,»+»,»+NewLine);
end;
{EXITLONG}
if MarketPosition=1 and C crosses below Dn then begin ExitLong(«Stop») at C;
count=count+1;
if lastbaronchart then FileAppend(«C:\New Folder\1.txt», NumToStr(count,0)+»,»+»CLOSE_POSITION,»+»CLIENT_GROUP,»+
«POS_PERCENT,»+»,»+»LKOH,»+»MICEX,»+»EQBR,»+»LKOH,»+»Z»+», «+»B,»+»NNNNZ,»+NumToStr(c-c/100*Slipage_Percent,2)+»,»+
NumToStr(100,0)+»,»+»,»+»,»+»0,»+»,»+»,»+»,»+NewLine);
end;
где: LKOH — это название инструмента как в Омеги так и на бирже.
MICEX — название биржы.
EQBR — название секции, оно может менятся, смотрите в спецификации инструмента.
*Замечание. Код приведен для управляющих активами, когда вы по одной стратегии торгуете несколькими счетами. Перед торговлей создайте группу и занесите туда те счета по которым вы собираетесь торговать.