OnTrade

Функция вызывается терминалом 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 Год

Примеры:

  • 0
-- Пример сохраняет в файл все трейды по всем инструментам. При желании можно добавить условия и сохранять,
--    например трейды только определенной бумаги или класса.
-- Функция возвращает 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