Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Lua скрипт для Quik

Олег Соколов Знаток (262), открыт 1 неделю назад
Подскажите как можно реализовать исполнение заявки через "доставание" из кармана. Задумка в том, чтобы бот автоматически выставлял заготовленный стоп лосс из кармана заявок, как только исполниться отложенный ордер на покупку/продажу.
1 ответ
Рустам Абдрашитов Мудрец (12117) 1 неделю назад
 -- Глобальные переменные 
local trans_id = 0 -- ID транзакции
local main_order_number = nil -- Номер основного ордера
local pocket_stop_price = 0 -- Цена стоп-лосса из кармана
local is_long = true -- Направление позиции (true для лонга, false для шорта)

-- Функция для получения нового ID транзакции
function GetNewTransID()
trans_id = trans_id + 1
return trans_id
end

-- Функция создания заявки стоп-лосс
function CreateStopOrder(class_code, sec_code, stop_price, volume, direction)
local stop_order = {
TRANS_ID = GetNewTransID(),
ACTION = "NEW_STOP_ORDER",
CLASSCODE = class_code,
SECCODE = sec_code,
OPERATION = direction and "S" or "B", -- S для продажи (в лонге), B для покупки (в шорте)
QUANTITY = tostring(volume),
STOPPRICE = tostring(stop_price),
PRICE = "0", -- Рыночная цена
CONDITION = "5", -- Тип стоп-заявки (5 = стоп-лимит)
CLIENT_CODE = getItem("CLIENTCODE"),
ACCOUNT = getItem("ACCOUNT")
}
return stop_order
end

-- Функция-обработчик события изменения заявки
function OnOrder(order)
if order.order_num == main_order_number then
-- Если основной ордер исполнен
if bit.band(order.flags, 1) == 0 and order.qty_remainder == 0 then
-- Создаем и отправляем стоп-лосс из кармана
local stop_order = CreateStopOrder(
order.class_code,
order.sec_code,
pocket_stop_price,
order.qty,
is_long
)
-- Отправляем транзакцию
local result = sendTransaction(stop_order)
if result ~= "" then
message("Ошибка выставления стоп-лосса: " .. result)
else
message("Стоп-лосс успешно выставлен")
end
end
end
end

-- Функция инициализации основных параметров
function InitializeOrder(order_number, stop_price, position_type)
main_order_number = order_number
pocket_stop_price = stop_price
is_long = position_type
end

-- Основная функция main
function main()
-- Пример использования:
-- InitializeOrder(123456, 150.50, true) -- для лонга
-- InitializeOrder(123456, 149.50, false) -- для шорта

while is_run do
sleep(100)
end
end
Как использовать этот скрипт:

1. В начале скрипта определяются глобальные переменные для хранения необходимых параметров.

2. Функция `GetNewTransID()` генерирует уникальный ID для каждой транзакции.

3. Функция `CreateStopOrder()` создает структуру стоп-заявки с необходимыми параметрами.

4. Основной обработчик `OnOrder()` следит за изменениями в заявках. Когда основной ордер исполняется, автоматически выставляется стоп-лосс.

5. Функция `InitializeOrder()` используется для установки параметров отслеживаемого ордера.
Похожие вопросы