1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | -- ПРОВЕРКА ВЫСТАВЛЕНИЯ ЗАЯВКИ ПО ОТПРАВЛЕННОЙ ТРАНЗАКЦИИ -- для примера отправляется транзакция на выставление лимитированной заявки на покупку по определенной цене ACCOUNT = "SPBFUT00k59" -- Код счета CLASS_CODE = "SPBFUT" -- Код класса SEC_CODE = "RIH6" -- Код инструмента OpenPrice = 73000 -- Цена выставления заявки run = true -- Флаг работы цикла while в функции main trans_id = os.time() -- Текущие дата и время в секундах хорошо подходят для уникальных номеров транзакций LastStatus = nil -- Последний статус транзакции, который был выведен в сообщении -- Основная функция скрипта, пока работает эта функция, работает скрипт function main() -- Отправляет транзакцию на открытие позиции TransOpenPos() -- Пока работает данный цикл, работает скрипт while run do sleep(1) end end -- Срабатывает при остановке скрипта function OnStop() run = false end -- Отправляет транзакцию на открытие позиции function TransOpenPos() -- Выставляет заявку на открытие позиции -- Получает ID для следующей транзакции trans_id = trans_id + 1 -- Заполняет структуру для отправки транзакции local Transaction={ ['TRANS_ID'] = tostring(trans_id), -- Номер транзакции ['ACCOUNT'] = ACCOUNT, -- Код счета ['CLASSCODE'] = CLASS_CODE, -- Код класса ['SECCODE'] = SEC_CODE, -- Код инструмента ['ACTION'] = 'NEW_ORDER', -- Тип транзакции ('NEW_ORDER' - новая заявка) ['OPERATION'] = 'B', -- Операция ('B' - buy, или 'S' - sell) ['TYPE'] = 'L', -- Тип ('L' - лимитированная, 'M' - рыночная) ['QUANTITY'] = '1', -- Количество ['PRICE'] = tostring(OpenPrice) -- Цена } -- Отправляет транзакцию local Res = sendTransaction(Transaction) if Res ~= '' then message('TransOpenPos(): Ошибка отправки транзакции: '..Res) else message('TransOpenPos(): Транзакция отправлена') end end -- Функция вызывается терминалом, когда с сервера приходит новая информация о транзакциях function OnTransReply(trans_reply) -- Если пришла информация по нашей транзакции if trans_reply.trans_id == trans_id then -- Если данный статус уже был обработан, выходит из функции, иначе запоминает статус, чтобы не обрабатывать его повторно if trans_reply.status == LastStatus then return else LastStatus = trans_reply.status end -- Выводит в сообщении статусы выполнения транзакции if trans_reply.status < 2 then -- Статусы меньше 2 являются промежуточными (0 - транзакция отправлена серверу, 1 - транзакция получена на сервер QUIK от клиента), -- при появлении такого статуса делать ничего не нужно, а ждать появления значащего статуса -- Выходит из функции return elseif trans_reply.status == 3 then -- транзакция выполнена message('OnTransReply(): По транзакции №'..trans_reply.trans_id..' УСПЕШНО ВЫСТАВЛЕНА заявка №'..trans_reply.order_num..' по цене '..trans_reply.price..' объемом '..trans_reply.quantity) elseif trans_reply.status > 3 then -- произошла ошибка message('OnTransReply(): ОШИБКА выставления заявки по транзакции №'..trans_reply.trans_id..', текст ошибки: '..trans_reply.result_msg) end end end |
-- ПРОВЕРКА ВЫСТАВЛЕНИЯ ЗАЯВКИ ПО ОТПРАВЛЕННОЙ ТРАНЗАКЦИИ -- для примера отправляется транзакция на выставление лимитированной заявки на покупку по определенной цене ACCOUNT = "SPBFUT00k59" -- Код счета CLASS_CODE = "SPBFUT" -- Код класса SEC_CODE = "RIH6" -- Код инструмента OpenPrice = 73000 -- Цена выставления заявки run = true -- Флаг работы цикла while в функции main trans_id = os.time() -- Текущие дата и время в секундах хорошо подходят для уникальных номеров транзакций LastStatus = nil -- Последний статус транзакции, который был выведен в сообщении -- Основная функция скрипта, пока работает эта функция, работает скрипт function main() -- Отправляет транзакцию на открытие позиции TransOpenPos() -- Пока работает данный цикл, работает скрипт while run do sleep(1) end end -- Срабатывает при остановке скрипта function OnStop() run = false end -- Отправляет транзакцию на открытие позиции function TransOpenPos() -- Выставляет заявку на открытие позиции -- Получает ID для следующей транзакции trans_id = trans_id + 1 -- Заполняет структуру для отправки транзакции local Transaction={ ['TRANS_ID'] = tostring(trans_id), -- Номер транзакции ['ACCOUNT'] = ACCOUNT, -- Код счета ['CLASSCODE'] = CLASS_CODE, -- Код класса ['SECCODE'] = SEC_CODE, -- Код инструмента ['ACTION'] = 'NEW_ORDER', -- Тип транзакции ('NEW_ORDER' - новая заявка) ['OPERATION'] = 'B', -- Операция ('B' - buy, или 'S' - sell) ['TYPE'] = 'L', -- Тип ('L' - лимитированная, 'M' - рыночная) ['QUANTITY'] = '1', -- Количество ['PRICE'] = tostring(OpenPrice) -- Цена } -- Отправляет транзакцию local Res = sendTransaction(Transaction) if Res ~= '' then message('TransOpenPos(): Ошибка отправки транзакции: '..Res) else message('TransOpenPos(): Транзакция отправлена') end end -- Функция вызывается терминалом, когда с сервера приходит новая информация о транзакциях function OnTransReply(trans_reply) -- Если пришла информация по нашей транзакции if trans_reply.trans_id == trans_id then -- Если данный статус уже был обработан, выходит из функции, иначе запоминает статус, чтобы не обрабатывать его повторно if trans_reply.status == LastStatus then return else LastStatus = trans_reply.status end -- Выводит в сообщении статусы выполнения транзакции if trans_reply.status < 2 then -- Статусы меньше 2 являются промежуточными (0 - транзакция отправлена серверу, 1 - транзакция получена на сервер QUIK от клиента), -- при появлении такого статуса делать ничего не нужно, а ждать появления значащего статуса -- Выходит из функции return elseif trans_reply.status == 3 then -- транзакция выполнена message('OnTransReply(): По транзакции №'..trans_reply.trans_id..' УСПЕШНО ВЫСТАВЛЕНА заявка №'..trans_reply.order_num..' по цене '..trans_reply.price..' объемом '..trans_reply.quantity) elseif trans_reply.status > 3 then -- произошла ошибка message('OnTransReply(): ОШИБКА выставления заявки по транзакции №'..trans_reply.trans_id..', текст ошибки: '..trans_reply.result_msg) end end end
Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!