swerg пишет:Однако чтобы разговор этот был плодотворным, давайте помечтаем и о том, какие фичи нам хочется видеть в библиотеке и как красиво и логично они должны выглядеть.
Чем больше фич, тем труднее будет отловить ошибку. Нужно оставить как есть, оно вполне себе годный вариант, только индексы поправить и сделать Set/Get-функции пот типу qpile с явным указанием на nsp (в qpile явно указывается имя таблицы).
Тем не менее, давайте помечтаем ("кто о чем, а вшивый о бане").
Итак, есть пространство имен "nsp1", конкретной заявки, которое будет хранится в поле комментария brokerref и доступно в транзакционных таблицах и событиях:
stv.SetVarList("nsp1", {-- сразу! используем нужное пространство имен
plan = 1,
posa = 1,
price = 64.3,
status = "F",
event_msg = {}, -- для событий извне
})
В event_msg нужно "накатить" события, будь то события с кнопки или с калбэка:
stv.SetMsg("nsp1", "event_msg", {OnTrade = true})
stv.SetMsg("nsp1", "event_msg", {OnOrder = true})
stv.SetMsg("nsp1", "event_msg", {gui = {plan = -4, price = 64.9})
в итоге имеем поле event_msg в nsp1:
event_msg = {
[1] = {OnOrder = true},
[2] = {OnOrder = true},
[3] = {gui = {plan = -4, price = 64.9}},
}
Бот опрашивает event_msg:
emsg = stv.GetMsg("nsp1", "event_msg") -- при вызове GetMsg поле event_msg = {} - автоматически, если не пустое
if #emsg > 0 then
-- обработка событий
end
-- пошелестел торговый алгоритм
trade()
По сути, поле event_msg должно выглядеть отдельным объектом в пространстве имен.
И функции SetVar/GetVar нужны с явным указателем на пространство имен:
plan = stv.GetVar("nsp1", "plan")
stvSetVar("nsp1", "price", 64.5)
Пустое пространство имен или именованное (например, nsp_list или "TQBR_SBER") можно использовать для хранения общей информации по инструменту, например.
А stv.UseNameSpace убрать совсем, за ненадобностью + нет гарантии, что сразу после вызова UseNameSpace одним ботом, второй бот тоже ее вызывает и первый бот запишет не в свое пространство имен, что собственно и бывает на практике. И функция о текущем пространстве имен, тоже не нужна, т.к. Set/Get будут явно указывать на nsp.
И будет счастье:)