В данной теме рассказываю, как построен мой торговый робот.
Полагаю, что тема будет интересна не только начинающим писателям роботов,
так как излагаю свои идеи, которые обладают определенной новизной .
----------------------------
Структура робота организована в виде сети роботов типа “звезда”.
Каждый робот – это отдельный поток или процесс ОС Windows.
------------------------------В центре звезды находится главный робот nkbot, который обрабатывает события колбеков и таймера и раздает задания другим роботам.
События организованы в виде очереди. Если событий нет в течении заданного интервала, то робот выполняет задание по таймеру.
---------------------------
Все остальные роботы работают с заданной для каждого робота группой инструментов
и выполняют свои задачи по команде nkbot, либо по истечению заданного интервала времени.
---------------------------
Каждый робот работает в своем потоке OS Windows, либо в процессе терминала QUIK и имеет доступ к библиотеке QLua, либо в изолированном потоке(процессе) OS
Роботы в терминале запускаются как скрипты терминала QUIK.
----------------------------
Связь робота nkbot с каждым роботом сети выполняется через очередь команд в общей памяти.
Список работающих роботов создается в файле инициализации nkbot_ini.lua.
Задачи для роботов создаются в отдельных файлах в виде функций и загружаются в робота во время запуска скрипта по заданному списку задач для каждого робота.
--------------------------
Несколько примеров реализации отдельных элементов данной структуры.
Все роботы сети, кроме nkbot, имеют одинаковую структуру и реализуются одним скриптом.
Имя робота состоит из “nkbot_” и далее идентификатор робота.
Например, nkbot_B.lua, nkbot_C.lua два робота B и C
Файл nk_bot_B.lua
| Код |
|---|
Ts={SBER={int={1,2,5,10,20},q=true},
GAZP={int={2,5},q=true}, LKOH={int={5},q=true}}
--инструменты, которыми торгует робот , интервалы свечей и флаг
получения стакана
list_task="task1,task2" -- задачи, которые
быдет исполнять робот
nkLog=true; -- -включить вывод в лог файл
----------------не трогать---------------
minfo =
debug.getinfo(1, "S").source:sub(2); path =
minfo:match("(.*[/\\])") or "."
dofile(path.."stream.lua")
|
| Код |
|---|
Ts={SiZ5={int={5}}, RIZ5={int={5,10},},SRZ5={int={30}}}
--инструменты и интервалы свечей
list_task="task3,task4" -- список задач
nkLog=true;
----------------не трогать---------------
minfo =
debug.getinfo(1, "S").source:sub(2); path =
minfo:match("(.*[/\\])") or "."
dofile(path.."stream.lua")
|
| Код |
|---|
list_stream="B,C" --список потоков nkLog=true; --включаем лог файл |