On Trade #
Функция вызывается терминалом QUIK при получении сделки или при изменении параметров существующей сделки.
Формат вызова: #
OnTrade(TABLE trade)
Параметры: #
| Параметр | Тип | Описание |
| trade | TABLE | Таблица с параметрами сделки |
Таблица с параметрами сделки #
| Параметр | Тип | Описание |
| trade_num | NUMBER | Номер сделки в торговой системе |
| order_num | NUMBER | Номер заявки в торговой системе |
| brokerref | STRING | Комментарий, обычно: <код клиента>/<номер поручения> |
| userid | STRING | Идентификатор трейдера |
| firmid | STRING | Идентификатор дилера |
| canceled_uid | NUMBER | Идентификатор пользователя, отказавшегося от сделки |
| account | STRING | Торговый счет |
| price | NUMBER | Цена |
| qty | NUMBER | Количество бумаг в последней сделке в лотах |
| value | NUMBER | Объем в денежных средствах |
| accruedint | NUMBER | Накопленный купонный доход |
| yield | NUMBER | Доходность |
| settlecode | STRING | Код расчетов |
| cpfirmid | STRING | Код фирмы партнера |
| flags | NUMBER | Набор битовых флагов |
| price2 | NUMBER | Цена выкупа |
| reporate | NUMBER | Ставка РЕПО (%) |
| client_code | STRING | Код клиента |
| accrued2 | NUMBER | Доход (%) на дату выкупа |
| repoterm | NUMBER | Срок РЕПО, в календарных днях |
| repovalue | NUMBER | Сумма РЕПО |
| repo2value | NUMBER | Объем выкупа РЕПО |
| start_discount | NUMBER | Начальный дисконт (%) |
| lower_discount | NUMBER | Нижний дисконт (%) |
| upper_discount | NUMBER | Верхний дисконт (%) |
| block_securities | NUMBER | Блокировка обеспечения («Да»/«Нет») |
| clearing_comission | NUMBER | Клиринговая комиссия биржи |
| exchange_comission | NUMBER | Комиссия Фондовой биржи |
| tech_center_comission | NUMBER | Комиссия Технического центра |
| settle_date | NUMBER | Дата расчетов |
| settle_currency | STRING | Валюта расчетов |
| trade_currency | STRING | Валюта |
| exchange_code | STRING | Код биржи в торговой системе |
| station_id | STRING | Идентификатор рабочей станции |
| sec_code | STRING | Код бумаги заявки |
| class_code | STRING | Код класса |
| datetime | TABLE | Дата и время |
| bank_acc_id | STRING | Идентификатор расчетного счета/кода в клиринговой организации |
| broker_comission | NUMBER | Комиссия брокера. Отображается с точностью до 2 двух знаков. Поле зарезервировано для будущего использования |
| linked_trade | NUMBER | Номер витринной сделки в Торговой Системе для сделок РЕПО с ЦК и SWAP |
| period | NUMBER | Период торговой сессии. Возможные значения: «0» – Открытие; «1» – Нормальный; «2» – Закрытие |
| trans_id | NUMBER | Идентификатор транзакции |
| kind | NUMBER | Тип сделки. Возможные значения: «1» – Обычная; «2» – Адресная; «3» – Первичное размещение; «4» – Перевод денег/бумаг; «5» – Адресная сделка первой части РЕПО; «6» – Расчетная по операции своп; «7» – Расчетная по внебиржевой операции своп; «8» – Расчетная сделка бивалютной корзины; «9» – Расчетная внебиржевая сделка бивалютной корзины; «10» – Сделка по операции РЕПО с ЦК; «11» – Первая часть сделки по операции РЕПО с ЦК; «12» – Вторая часть сделки по операции РЕПО с ЦК; «13» – Адресная сделка по операции РЕПО с ЦК; «14» – Первая часть адресной сделки по операции РЕПО с ЦК; «15» – Вторая часть адресной сделки по операции РЕПО с ЦК; «16» – Техническая сделка по возврату активов РЕПО с ЦК; «17» – Сделка по спреду между фьючерсами разных сроков на один актив; «18» – Техническая сделка первой части от спреда между фьючерсами; «19» – Техническая сделка второй части от спреда между фьючерсами; «20» – Адресная сделка первой части РЕПО с корзиной; «21» – Адресная сделка второй части РЕПО с корзиной; «22» – Перенос позиций срочного рынка |
| clearing_bank_accid | STRING | Идентификатор счета в НКЦ (расчетный код) |
| canceled_datetime | TABLE | Дата и время снятия сделки |
| clearing_firmid | STRING | Идентификатор фирмы — участника клиринга |
| system_ref | STRING | Дополнительная информация по сделке, передаваемая торговой системой |
| uid | NUMBER | Идентификатор пользователя на сервере QUIK |
Набор битовых флагов #
| Параметр | Тип | Описание |
| бит 0 (0x1) | — | Заявка активна, иначе – не активна |
| бит 1 (0x2) | — | Заявка снята. Если флаг не установлен и значение бита «0» равно «0», то заявка исполнена |
| бит 2 (0x4) | — | Заявка на продажу, иначе – на покупку. Данный флаг для сделок и сделок для исполнения определяет направление сделки (BUY/SELL) |
| бит 3 (0x8) | — | Заявка лимитированная, иначе – рыночная |
| бит 4 (0x10) | — | Разрешить / запретить сделки по разным ценам |
| бит 5 (0x20) | — | Исполнить заявку немедленно или снять (FILL OR KILL) |
| бит 6 (0x40) | — | Заявка маркет-мейкера. Для адресных заявок – заявка отправлена контрагенту |
| бит 7 (0x80) | — | Для адресных заявок – заявка получена от контрагента |
| бит 8 (0x100) | — | Снять остаток |
| бит 9 (0x200) | — | Айсберг-заявка |
Дата и время #
| Параметр | Тип | Описание |
| mcs | NUMBER | Микросекунды |
| ms | NUMBER | Миллисекунды |
| sec | NUMBER | Секунды |
| min | NUMBER | Минуты |
| hour | NUMBER | Часы |
| day | NUMBER | День |
| week_day | NUMBER | Номер дня недел |
| month | NUMBER | Месяц |
| year | NUMBER | Год |
Примеры: #
-- Пример сохраняет в файл все трейды по всем инструментам. При желании можно добавить условия и сохранять,
-- например трейды только определенной бумаги или класса.
-- Функция возвращает true, если бит с номером index флагов flags установлен в 1
function bit_set( flags, index )
local n=1;
n=bit.lshift(1, index);
if bit.band(flags, n) ~=0 then
return true;
else
return false;
end;
end
function OnTrade(trade)
-- Если номер последнего трейда не не равен номеру текущего
if last_trade_num < trade.trade_num then
-- Запомним номер последнего трейда
last_trade_num = trade.trade_num;
-- Если заявка не активна и исполнена
if bit_set(trade.flags, 0) == false
and bit_set(trade.flags, 1) == false then
-- Открываем файл для записи
base_file = io.open(getScriptPath() .. "\\" .. os.date("trades.dat"), "a");
-- В строковую переменную собираем информацию о трейде
local write_str = trade.trade_num .. ";" ..
trade.order_num .. ";" ..
trade.brokerref .. ";" ..
trade.price .. ";" ..
trade.qty .. ";" ..
trade.value .. ";" ..
trade.sec_code .. ";" ..
trade.class_code .. ";" ..
tostring(trade.datetime.year) .. "." .. tostring(trade.datetime.month) .. "." .. tostring(trade.datetime.day) .. " " ..
tostring(trade.datetime.hour) .. ":" .. tostring(trade.datetime.min) .. ":" .. tostring(trade.datetime.sec) .. ";" ..
tostring(bit_set(trade.flags, 1)) .. ";" .. "\n";
-- Пишем строку в файл
base_file:write(write_str);
-- Если файл существует, тогда закроем его
if base_file ~= nil then
base_file:close();
end;
end;
end;
end
