-- Настройки SEC_CODE = "SBER" -- Код инструмента CLASS_CODE = "TQBR" -- Код класса инструмента SHORT_MA_PERIOD = 10 -- Период короткой скользящей средней LONG_MA_PERIOD = 50 -- Период длинной скользящей средней QTY = 1 -- Количество лотов -- Переменные short_ma = {} long_ma = {} prices = {} position = 0 -- Текущая позиция: 0 - нет позиции, 1 - лонг, -1 - шорт -- Функция для расчета скользящей средней function calculate_ma(prices, period) local sum = 0 for i = #prices-period+1, #prices do sum = sum + prices[i] end return sum / period end -- Функция для обработки новых тиков function OnAllTrade(alltrade) if alltrade.sec_code == SEC_CODE and alltrade.class_code == CLASS_CODE then table.insert(prices, alltrade.price) if #prices >= LONG_MA_PERIOD then table.
local Titles, Entries, Desk = {}, {}, {} local Wn1_Hndl local Wn1_Field1, Wn1_Field2, Wn1_Field3, Wn1_Field4, Wn1_Field5 = "Код CALL", "Страйк", "Дельта CALL", "Дельта расч", "Теор. расч" function OnInit (scriptPath) qu = require ("QuikUtil(qu)") -- qc, lu, tu blk = require ("BlackScholes(blk)") glb_ScriptDir, glb_ScriptName = lu.SplitPath (scriptPath) message (glb_ScriptName .." started") server = require ("OptionDesk") end -- OnInit() function OnStop (signal) if Wn1_Hndl then DestroyTable (Wn1_Hndl) end StopFlag = true return 1000 -- 1 sec end local function ShowWin (cols) for k = 1, #Desk do local calCode = Desk[k][Entries[Wn1_Field1]] if calCode:sub (3,3) == "0" then calCode = calCode:sub (1,2) .
Функция OnTrade
Сохранение параметров сделки в файл.
Работа с таблицей сделок.
Сохранение всех сделок дня.
Скрипт автосохранения всех заявок и сделок под завершение торгового дня.
Для отслеживания прошедших сделок мы можем задействовать функцию обратного вызова OnTrade. Она во многом похожа по логике на OnOrder, только возвращает коллбэки уже по исполненным сделкам. В случае, если заявка разбивается на несколько сделок, мы получим информацию по каждой.
В файле QLUA.chm в директории терминала находим через поиск описание самой функции: