Amibroker+NKqami = реальная торговля

5 февраля, 2014

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

Кто пробовал строить роботов на Амиброкере или читал об этом в интернете, то знает о различных программных кульбитах, чтобы передать сигналы в торговый терминал QUIK.

Предположим, что мы хотим запрограммировать  хорошо известный алгоритм торговли по пересечению ценой закрытия свечи скользящей средней с периодом 100.

В Амиброкере  это будет не просто, а очень просто.

Вот так:
Buy=IIf(C>MA(L,100),1,0);  
Sell=IIf(MA(C,100)>C,1,0);  
Всего два оператора.
и ВСЕ!!

Попробуйте написать тоже самое на C# в WLD.    Будет просто ужас какой-то.
——————————————-

Ну , хорошо, написали , протестировали на истории. Теперь вопрос.
А как послать транзакцию в торговый терминал  QUIK?

В Амиброкере+NKqami  это будет не просто, а очень просто  (один из вариантов):

ACCOUNT=«AAAAA»                //торговый счет
CLIENT_CODE=»ИВАНОВ»  //код клиента в КВИК
PositionSize=100000;    //сумма на которую робот может торговать
Buy=IIf(C>MA(L,100),1,0);  
Sell=IIf(MA(C,100)>C,1,0);  
————————-
Те же два оператора и параметры торгового счета и кода клиента.
И все!!!  

NKqami =Amibroker + QUIK — мощь вычислений и легкость общения

4 февраля, 2014

Amibroker,
хотя и является сравнительно дешевой программой,
но тем не менее обладает высоким быстродействием,
мощной системой оптимизации, включая генетический алгоритм,
большой библиотекой индикаторов и хорошими графическими возможностями.
Кроме того, наличие API обеспечивает возможность выполнение сложных расчетов с максимальной скоростью.

Единственное ограничение для применения в реальных торгах — это необходимость делать многовариантные программные кульбиты для обмена информацией с QUIK.
Конечно,  есть APIQUIK для передачи транзакций на заявки и получения информации о сделках, но нет возможности работать со стоп заявками.
Конечно, есть еще возможность передавать транзакции через файлы,
но это не очень быстро и не всегда надежно.
Конечно, биржевую информацию можно еще получать по DDE.

Ну и так далее….

Когда Вы все это подключите и  подгрузите, то, не знаю как Вам, а мне как-то неудобно с такой многокостыльной программной каракатицей

————————————-

Мое решение до смешного простое:

В скрипте Амиброкера Вы пишите:

nkqami(s,timeout)

, где s — содержит запрос к QUIK,
timeout — максимальное время ожидания ответа.
Что можно записать в качестве запроса? 
Ответ : все, что угодно — можно,  например,  написать программу на языке QLUA и получить результаты вычислений.
Можно таким образом обратиться к любой таблице QUIK и получить из нее биржевую информацию.
—————————————

А что делает при этом QUIK?
 Если запроса нет, то QUIK работает и не обращает внимание на Amibroker.
Когда Amibroker формирует запрос,

то в QUIK скрипте на LUA вызывается колбек функция:
function onAmibroker(s)
assert(loadstring(s))();  — это исполнение запроса на языке LUA
return Z;  — Z — это ответ QUIK на запрос Amibroker
end

Вот и все.

Все просто очень просто.
Таким образом, торговый робот строится по следующей схеме (я ее уже освещал) но повторение — …
На Амиброкере строим генераторы торговых сигналов.

Всю биржевую информацию, кроме истории сделок, которую получаем существующим экспортом в программы технического анализа, получаем через запросы к QUIK.

Через запросы передаем сигналы для исполнения в терминал QUIK В терминале QUIK реализуется на языке QLUA подсистема управления рисками и коммуникацией.

И все!!!

Таким образом может быть реализован робот  любой сложности, так как Amibroker и Quik работаю в многопотоковом режиме, т е чем больше процессоров, тем быстрее расчеты.
Но можно пойти еще дальше и подключить компьютеры по сети для исполнения вычислений.
Данный подход позволяет аналогичным способом подключить к QUIK другие программы технического анализа, например, metatrader или WLD или  Qmega.