Структура любого робота состоит из набора скриптов (модулей),

каждый из которых реализует определенные функции.

Каждый модуль — это отдельный поток ОС.

Таким образом, все модули робота могут работать параллельно.

Каждый модуль представляет собой функционально законченный скрипт на луа и С+

В настоящее время реализованы следующие модули:

Условно модули можно разделить на две группы:

Первая группа — системные модули

Вторая группа — пользовательские модули

Модули первой группы имеют  имя.  Имена системных модулей и файлы их скриптов описаны в специальном файле nk_ScriptList.lua:

[«robot»]=»nk_robot»,
[«quote»]=»nk_quote»,
[«order»]=»nk_order»,
[«stop»]=»nk_stop_order»,
[«reply»]=»nk_trans_reply»,
[«alltrades»]=»nk_all_trades»,
[«trade»]=»nk_Trade»,
[«client_holding»]=»nk_futures_client_holding»,
[«client_limits»]=»nk_futures_client_limits»,
[«money»]=»nk_depo_limits»,
[«depo»]=»nk_money_limits»,
[«param»]=»nk_param»,

 Функции модулей.

robot — обеспечивает формирование списков инструментов и  счетов.

Подключает источники истории сделок и источники очередей стаканов для торгуемых инструментов.

Принимает истории сделок (свечи) и сохраняет

quote — принимает  очереди заявок и сохраняет их в локальной базе данных

order —  управляет выставлением и снятием заявок.

stop  — управляет стоп заявками

reply  — контролирует исполнение транзакций

alltrades — приминает тиковые данных торгуемых инструментов и сохраняет их в локальной базе данных

trade — принимает информацию о своих сделках и сохраняет из в локальной базе данных

client_holding — принимает информаицю о позициях по инструментам срочного рынка

client_limits  —принимает информацию о лимитах срочного рынка

money  — принимает информацию о величине денежных средств на торговых счетах

depo  —принимает информацию о существующих позициях акций

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

Пользовательские модули — это  любые модули обработки информации

полученной системными модулями

и формирующие любые сигналы управления.

—————————————————————————

Любой модуль имеет стандартную структуру следующего вида:

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

—стандартный заголовок модуля     для всех модулей одинаковый
pf={}; for w in string.gmatch(debug.getinfo(1).short_src,»([^\\]+)») do  pf[#pf+1]=w;  end
fname=pf[#pf]; pf[#pf]=nil; PathScript=table.concat(pf,»/»)..»/»;
dofile(PathScript..»nk_begin.lua»)
——————— конец заголовка ——————

 function work(t) 
…  программа на языке луа  (торговый алгоритм)
end

 —стандартное окончание модуля   для всех модулей одинаковый
dofile(PathScript..»nk_main.lua»)
——————— конец модуля ——————

Как видим , структура программы простая.

Не надо ничего знать ни о колбеках, ни о потоках, ни о других особенностях КВИК.

Нужно лишь написать на языке LUA свой торговый алгоритмы и установить сигнал на продажу или покупку нужного количества акций или фьючерсов.

Свой алгоритм размещаем внутри   функции work()

И ВСЕ!!!

Ну или почти ВСЕ… или почти, почти…

продолжение следует …

статьи по теме:

https://www.kamynin.ru/archives/5672

https://www.kamynin.ru/archives/5667

This entry was posted on Четверг, 4 декабря, 2014 at 16:01 and is filed under торговые роботы (МТС). You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

4 comments so far

hurgadan
 1 

Николай, а как вы передаете данные из QLUA в программу на С+ и обратно?

9 апреля, 2015 at 19:43
Kamynin
 2 

используем API С для LUA
———————————
Если кратко, то в СИ все функции имеют один и тот же заголовок и тип
в виде:
—————————
static int set_RTS(lua_State *L)
далее получаем параметры:
если число то либо
long j=lua_tointeger(L,1); //цифра 1 указывает номер по порядку параметра в вызове функции на луа
либо
double x=lua_tonumber(L,2); //цифра 2 указывает номер по порядку параметра в вызове функции на луа
если строка
char *ps=(char *)lua_tostring(L,3); //цифра 3 указывает номер по порядку параметра в вызове функции на луа
если таблицы, то через псевдоиндексы
———————
возвращаем через стек так:
если целое
lua_pushinteger(L,x);
return 1; //указываем число возвращаемых параметров
——————————————
В интернете много статей и книг с примерами по вопросу
http://www.lua.ru/doc/3.html — ктраткий перевод документации http://www.lua.org/manual/

11 апреля, 2015 at 09:13
hurgadan
 3 

Спасибо.
Это вы говорите о, как я понимаю DLL, которая подключается в LUA скрипте и о передаче данных в эту DLL. А данные из DLL как передаются в/из вашей МТС?

14 апреля, 2015 at 17:06
Kamynin
 4 

Как и любые другие данные из модуля
Вот пример:
require(«nklib») — это моя библиотека
local y=nklib.COMWrite(x[1],x[2],x[3]); — это обращение к функции записи в COM порт и прием результата

17 апреля, 2015 at 10:23