Мы создаем торговый робот за счет связки программ 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 – название секции, оно может менятся, смотрите в спецификации инструмента.
*Замечание. Код приведен для управляющих активами, когда вы по одной стратегии торгуете несколькими счетами. Перед торговлей создайте группу и занесите туда те счета по которым вы собираетесь торговать.







