-- Глобальные переменные
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()` используется для установки параметров отслеживаемого ордера.