1

Тема: Запрос таблицы заявок и вывод названия акции по последней заявке

Запрос таблицы заявок и вывод названия акции по последней заявке мэсэджем. Пытаю чат GPT, он дает тонны кода по подобным запросам. Такое ощущение что таблица заявок защищена чем-то. То функции nil, то не определены.


Например

-- определяем функцию для поиска последней исполненной заявки
function last_trade()
local last_trade = {}
local n = getNumberOf("trades")

while n > 0 do
local trade = getItem("trades", n)
if trade.flags == 1 then
last_trade = trade
break
end
n = n - 1
end

return last_trade
end

-- получаем последнюю исполненную заявку
local trade = last_trade()

-- проверяем условия и выводим информацию
if trade.class_code == "TQBR" and trade.client_code == "4X55N" then
if trade.sec_code == "LKOH" then
message("Акция: ЛУКОЙЛ\nКупля/продажа: " .. trade.dir .. "\nЧисло лотов: " .. trade.qty)
elseif trade.sec_code == "ROSN" then
message("Акция: РОСНЕФТЬ\nКупля/продажа: " .. trade.dir .. "\nЧисло лотов: " .. trade.qty)
elseif trade.sec_code == "MAGN" then
message("Акция: ММК\nКупля/продажа: " .. trade.dir .. "\nЧисло лотов: " .. trade.qty)
elseif trade.sec_code == "SBER" then
message("Акция: СБЕРБАНК\nКупля/продажа: " .. trade.dir .. "\nЧисло лотов: " .. trade.qty)
elseif trade.sec_code == "GAZP" then
message("Акция: ГАЗПРОМ\nКупля/продажа: " .. trade.dir .. "\nЧисло лотов: " .. trade.qty)
elseif trade.sec_code == "AFKS" then
message("Акция: СИСТЕМА\nКупля/продажа: " .. trade.dir .. "\nЧисло лотов: " .. trade.qty)
elseif trade.sec_code == "PLZL" then
message("Акция: ПОЛЮС\nКупля/продажа: " .. trade.dir .. "\nЧисло лотов: " .. trade.qty)
elseif trade.sec_code == "MTLR" then
message("Акция: МЕЧЕЛ\nКупля/продажа: " .. trade.dir .. "\nЧисло лотов: " .. trade.qty)
elseif trade.sec_code == "BANE" then
message("Акция: БАШНЕФТЬ\nКупля/продажа: " .. trade.dir .. "\nЧисло лотов: " .. trade.qty)
end
end

Может есть что проще и надежней. За 2 недели мытарств ни разу не получил ни кусочка инфы из таблицы заявок. Из стакана цену последней сделки по конкретной бумаге могу получить. А из таблицы заявок ни кусочка информации.  Заявки исполненные всегда в наличии в этой таблице.

2

Re: Запрос таблицы заявок и вывод названия акции по последней заявке

Alexey89, рад приветствовать вас на форуме!

Уточните: речь про таблицу заявок или про таблицу сделок?
Вы запрашиваете сделки:

getNumberOf("trades")

3

Re: Запрос таблицы заявок и вывод названия акции по последней заявке

заявки
Как будет запросить название акции и числа лотов последней заявки?

4

Re: Запрос таблицы заявок и вывод названия акции по последней заявке

-- Получаем максимальный ID заявки
local n_trades = getNumberOf("trades")
local last_trade = getTrade(n_trades)

-- Получаем информацию о последней заявке
local level2_info = getQuoteLevel2("TQBR", last_trade.sec_code, last_trade.price)
message("Название акции: " .. level2_info) 


Ошибку пишет, как будто функция не стандартная и в каком-то доп пакете идет.
lua:4: attempt to call a nil value (global 'getTrade')

5

Re: Запрос таблицы заявок и вывод названия акции по последней заявке

-- Получаем максимальный ID заявки
local n_trades = getNumberOf("trades")
local last_trade = getTradeByNumber(n_trades)

-- Получаем информацию о последней заявке
local level2_info = getQuoteLevel2("TQBR", last_trade.sec_code, last_trade.price)
message("Название акции: " .. level2_info)

lua:4: attempt to call a nil value (global 'getTradeByNumber')

6 (2023-06-17 10:07:33 отредактировано swerg)

Re: Запрос таблицы заявок и вывод названия акции по последней заявке

trades - это сделки, а вы пишете про заявки.
Заявки - "orders"

getTradeByNumber - такой н бывает функции.

-- получить параметры последней моей выставленной заявки
local n_orders = getNumberOf("orders")
local last_order = getItem("orders", n_orders - 1)

7

Re: Запрос таблицы заявок и вывод названия акции по последней заявке

getQuoteLevel2 - это функция для получения стакана по указанному классу и бумаге.
Стакан котировок - он, конечно, формируется из заявок, но там не одна заявка, а все вместе. И там уже не только мои заявки, а зявки всей биржи.

А вы что хотите получить на самом деле? какие заявки?

8

Re: Запрос таблицы заявок и вывод названия акции по последней заявке

Lua скрипт для Quik без дополнительных библиотек.

-- получить параметры последней моей выставленной заявки
local n_orders = getNumberOf("orders")
local last_order = getItem("orders", n_orders - 1)
message('Заявка: ' ..last_order)

выдает ошибку
lua:5: attempt to concatenate a table value (local 'last_order')

почему? какой правильный код?

Ошибка возникает, потому что переменная last_order содержит таблицу с параметрами заявки, а не строковое значение. Правильный способ получения информации о параметрах заявки и их вывода в сообщении выглядит так:

-- получить параметры последней моей выставленной заявки
local n_orders = getNumberOf("orders")
local last_order = getItem("orders", n_orders - 1)
message('Заявка: ' ..last_order.order_num.. ' ' ..last_order.sec_code.. ' ' ..last_order.price)

Обратите внимание, что мы обращаемся к конкретным параметрам заявки (номеру заявки, коду инструмента, цене и т.д.) через точку, что позволяет успешно сконкатенировать их значения в строку для вывода в сообщении.




Lua скрипт для Quik без дополнительных библиотек.

-- получить параметры последней моей выставленной заявки
local n_orders = getNumberOf("orders")
local last_order = getItem("orders", n_orders - 1)
message('Заявка: ' ..last_order.order_num.. ' ' ..last_order.sec_code.. ' ' ..last_order.price)

добавить к коду что бы еще и число лотов выводил

-- получить параметры последней моей выставленной заявки
local n_orders = getNumberOf("orders")
local last_order = getItem("orders", n_orders - 1)
message('Заявка: ' ..last_order.order_num.. ' ' ..last_order.sec_code.. ' ' ..last_order.price.. ' ' ..last_order.qty)

9

Re: Запрос таблицы заявок и вывод названия акции по последней заявке

Просто супер все как хотел. Остается пилить напильником до следующего подводного камня.