Найти в Дзене

Выставляем и снимаем стоп-приказ

Всем привет!

Сегодня я покажу как в QUIK реализуется выставление и снятие стоп-заявок. По большому счету это ничем не отличается от выставления обычных заявок, который мы ранее рассматривали. Тем не менее я решил рассмотреть этот вопрос и написать конкретно код по этой теме.

Первым делом давайте зайдем в позицию.

А теперь нужно запустить такой код. Я поставил цену, которая ниже, чем та, которая сейчас есть на рынке (учебные торги).

function main()
Kod_klienta="11006"; -- нужно поставить свое значение
Torg_schet="NL0011100043"; -- нужно поставить свое значение
CLASS_CODE = "QJSIM" -- Kод класса
SEC_CODE = "SBER" -- Kод бумаги
trans_id = 1;
podgot={
ACCOUNT=tostring(Torg_schet),
CLIENT_CODE=tostring(Kod_klienta),
TRANS_ID=tostring(trans_id),
CLASSCODE=CLASS_CODE,
SECCODE=SEC_CODE,
ACTION="NEW_STOP_ORDER",
OPERATION="S", -- S - продать, B - купить.
QUANTITY=tostring(1), --количество лотов
EXPIRY_DATE="TODAY",
STOPPRICE=tostring(157), --цена при которой сработает стоп-заявка
PRICE=tostring(156.8), -- цена по которой она будет выставлена.
STOP_ORDER_KIND="SIMPLE_STOP_ORDER" -- Это тип заявки.
}
rez=sendTransaction(podgot)
message(rez);
end

Посмотреть данный код

Скачать данный код

По поводу параметра:

STOP_ORDER_KIND="SIMPLE_STOP_ORDER" не забивайте себе голову – просто пишите так и все.

И обратите внимание, что параметры STOPPRICE и PRICE должны быть не числами, а строками. Для перевода в строки я использовал команду tostring().

Думаю, что по остальным параметрам вопросов быть не должно.

Если все хорошо, то в таблице стоп-заявок должна появиться соответствующая запись

-2

А теперь давайте снимем эту заявку. Мы аналогичные действия делали с обычными заявками. Для начала нам нужно найти ее уникальный номер, который присвоила система. Для этого нам нужно пройти по таблице стоп-заявок. Эта таблица имеет название stop_orders. В этой таблице получить номер Стоп-заявки, а затем, используя этот номер снять заявку. Код будет иметь следующий вид:

function main()
Kod_klienta="11006"; -- нужно поставить свое значение
Torg_schet="NL0011100043"; -- нужно поставить свое значение
CLASS_CODE = "QJSIM" -- Kод класса
SEC_CODE = "SBER" -- Kод бумаги
trans_id = 9;
razmer_orders=getNumberOf("stop_orders"); -- получаем количество записей в таблице стоп-заявок.
num_order = 0; -- устанавливаем номер в торговой системе равный 0. Потом будем искать нужную заявку и сюда запишем ее номер, если найдем.
for f=0,razmer_orders-1 do -- Начинаем проходить по каждой позиции таблицы.
order_find=getItem("stop_orders",f); -- получаем очередную запись.
if ((order_find.sec_code==SEC_CODE)and(bit.band(order_find.flags, 0x1)==1))then
--Нашли заявку по нужной бумаге активную заявку
num_order=order_find.order_num--Номер заявки в торговой системе
end
end
message("Номер заявки в торговой системе - "..num_order);
sleep(100);
--Теперь готовим данные для снятия заявки в системе.
if (num_order > 0) then -- Если что-то нашли и номер заявки узнали, то выполняем снятие этой заявки.
podgot={
ACCOUNT=tostring(Torg_schet),
CLIENT_CODE=tostring(Kod_klienta),
TRANS_ID=tostring(trans_id),
CLASSCODE=CLASS_CODE,
SECCODE=SEC_CODE,
ACTION="KILL_STOP_ORDER",
STOP_ORDER_KEY=tostring(num_order)
}
rez = sendTransaction(podgot) -- выполняем удаление заявки
--message(rez);
end
end

Посмотреть данный код

Скачать данный код

Если все прошло отлично, то система выдаст такое сообщение:

-3

А в таблице стоп-заявок по данной заявке будет указано, что она снята.

-4

На сегодня у меня все. Всем пока.

Пишите в комментариях все ли вам понятно. Получилось ли у вас запустить данный код и получить нужный результат?

Подписывайтесь на канал – дальше будет интереснее.

=================================

Краткое содержание данного канала.

=================================