51

Re: Общие вопросы по написанию скриптов LUA.

Все ходы записаны! smile

dark184 пишет:

Так вот, судя по отладочной информации OnTrade() вызывается только на первой покупке 1 лота. Следующие покупки он не вызывается, у меня по крайней мере.

Предлагаю отлогировать поля OnTrade и будет понятно почему условие не срабатывает как вы ожидаете.

52

Re: Общие вопросы по написанию скриптов LUA.

Все ходы записаны!

Ну вот, я так и написал smile

Предлагаю отлогировать поля OnTrade и будет понятно почему

Я бы это уже давно сделал, но это событие крайне редкое smile На реальном счете я не готов так сильно рисковать, а демо счет, первое, настолько медленно торгуется, что просто ужас, такое ощущение что раза в 3, а то и больше... Во вторых, чтобы даже на демо счете отловить нужно с десяток инструментов набрать чтобы хотя бы раз в пару дней это событие поймать. Разгребать потом лог придется очень долго, ибо для каждого инструмента на любую сделку OnTrade() отрабатывает не по разу. Так что фильтровать все равно придется, либо ждать неделю, а то и больше sad. Пробовал тупо купить в ручную кучу лотов, так эта зараза исполняет сразу все одной сделкой.

53 (2022-10-29 14:13:02 отредактировано dark184)

Re: Общие вопросы по написанию скриптов LUA.

Вобщем сейчас поглядел вчера подготовленный тестовый робот, обнаружил что сделка с частичным исполнением была за ночь. Вобщем то ничего криминального, OnTrade() действительно отрабатывает по 4 раза на каждую сделку даже частичную. В частности даже trans_id не изменяется, а у меня именно по нему и идет фильтрация. НО! это на демо счете. Лог же писался только на одном инструменте без всяких фильтров.

order_num        = 7174400703
price            = 617.3
qty            = 5.0
sec_code        = PIKK
class_code        = QJSIM
datetime        = table: 00000011B5E251E0
trans_id        = 414
order_qty        = 0.0
order_price    = 0.0

order_num        = 7174400703
price            = 617.3
qty            = 5.0
sec_code        = PIKK
class_code        = QJSIM
datetime        = table: 00000011B5E25EA0
trans_id        = 414
order_qty        = 0.0
order_price    = 0.0

order_num        = 7174400703
price            = 617.3
qty            = 1.0
sec_code        = PIKK
class_code        = QJSIM
datetime        = table: 00000011B5E256E0
trans_id        = 414
order_qty        = 0.0
order_price    = 0.0

order_num        = 7174400703
price            = 617.3
qty            = 5.0
sec_code        = PIKK
class_code        = QJSIM
datetime        = table: 00000011B5E255E0
trans_id        = 414
order_qty        = 0.0
order_price    = 0.0

order_num        = 7174400703
price            = 617.3
qty            = 1.0
sec_code        = PIKK
class_code        = QJSIM
datetime        = table: 00000011B5E25AE0
trans_id        = 414
order_qty        = 0.0
order_price    = 0.0

order_num        = 7174400703
price            = 617.3
qty            = 1.0
sec_code        = PIKK
class_code        = QJSIM
datetime        = table: 00000011B5E25A20
trans_id        = 414
order_qty        = 0.0
order_price    = 0.0

order_num        = 7174400703
price            = 617.3
qty            = 5.0
sec_code        = PIKK
class_code        = QJSIM
datetime        = table: 00000011B5E25BE0
trans_id        = 414
order_qty        = 0.0
order_price    = 0.0

order_num        = 7174400703
price            = 617.3
qty            = 1.0
sec_code        = PIKK
class_code        = QJSIM
datetime        = table: 00000011B5E258E0
trans_id        = 414
order_qty        = 0.0
order_price    = 0.0

order_num        = 7174400703
price            = 617.3
qty            = 4.0
sec_code        = PIKK
class_code        = QJSIM
datetime        = table: 00000011B6097C20
trans_id        = 414
order_qty        = 0.0
order_price    = 0.0

order_num        = 7174400703
price            = 617.3
qty            = 4.0
sec_code        = PIKK
class_code        = QJSIM
datetime        = table: 00000011B6096D60
trans_id        = 414
order_qty        = 0.0
order_price    = 0.0

order_num        = 7174400703
price            = 617.3
qty            = 4.0
sec_code        = PIKK
class_code        = QJSIM
datetime        = table: 00000011B6097620
trans_id        = 414
order_qty        = 0.0
order_price    = 0.0

order_num        = 7174400703
price            = 617.3
qty            = 4.0
sec_code        = PIKK
class_code        = QJSIM
datetime        = table: 00000011B6097CA0
trans_id        = 414
order_qty        = 0.0
order_price    = 0.0

Из этого лога вообще следует, что

function OnTrade(trade)

    if ((uniq_trans_id & 0xFF000) == (trade.trans_id & 0xFF000)) then

          ........

    message("OnTrade() Статус " .. NAME .. " " .. cur_state)
    end
end

Должна вывести в любом случае сообщение, если uniq_trans_id == trans_id, но он выводится исключительно только при 1 сделке из всех... Значит у меня возникают вопросы либо к сравнению, либо OnTrade() завершает досрочно свою работу...

54 (2022-10-29 17:03:09 отредактировано dark184)

Re: Общие вопросы по написанию скриптов LUA.

Натравил отдельного бота на все остальные боты. Отдельный бот заточен логгировать все, абсолютно все вызовы OnTrade(). Ох, чую, еще неделю буду ловить нужную сделку, учитывая ВЯЛОСТЬ торгов на демо счете, а на реальных торгах крайне редкую такую ситуацию, я все таки не Рокфеллер ;(

function OnTrade(trade)
    File_Write(trade)
end
function File_Write(file_data)

    f = io.open(getScriptPath().."\\Robot\\log\\" .. SEC .. ".log","r+")
    if f == nil then
--        message("Файл не существует!")
        f = io.open(getScriptPath().."\\Robot\\log\\" .. SEC .. ".log","w")
        f:close()
        f = io.open(getScriptPath().."\\Robot\\log\\" .. SEC .. ".log","r+")
--        message("Файл создан!")

    end;

    f:seek("end",0);
    
    f:write("\n")
    f:write("order_num                    = " .. tostring(file_data.order_num))
    f:write("\n")
    f:write("price                        = " .. tostring(file_data.price))
    f:write("\n")
    f:write("qty                            = " .. tostring(file_data.qty))
    f:write("\n")
    f:write("sec_code                    = " .. tostring(file_data.sec_code))
    f:write("\n")
    f:write("class_code                    = " .. tostring(file_data.class_code))
    f:write("\n")
    f:write("order_qty                    = " .. tostring(file_data.order_qty))
    f:write("\n")
    f:write("order_price                    = " .. tostring(file_data.order_price))
    f:write("\n")
    f:write("trans_id                    = " .. tostring(file_data.trans_id))
    f:write("\n")
    f:write("trans_id & 0xFF000            = " .. tostring(file_data.trans_id & 0xFF000))
    f:write("\n")
    f:write("uniq_trans_id & 0xFF000        = " .. tostring(uniq_trans_id & 0xFF000))
    f:write("\n")
    f:flush()
    f:close()
    
end

55

Re: Общие вопросы по написанию скриптов LUA.

Жаль, что не логируется оригинальное значение uniq_trans_id
Всего скрипта я не вижу, но предполагаю, что значение uniq_trans_id меняется после первой заявки.

А длинные логи не страшно. Через утилиту grep их очень удобно фильтровать. Главное в каждую группу логируемых записей добавлять уникальный набор символов.

56 (2022-10-30 11:43:37 отредактировано dark184)

Re: Общие вопросы по написанию скриптов LUA.

что значение uniq_trans_id меняется после первой заявки.

Именно так, инкременируется перед отправкой каждой заявки. Я об этом писал. Именно поэтому я и маскирую младшие 12 бит.

((uniq_trans_id & 0xFF000) == (trade.trans_id & 0xFF000))

Старшие же 8 бит отвечают за уникальность.
Хотя сейчас я начал сомневаться в целесообразности использования trans_id. По моему алгоритму работы он в принципе нафиг не нужен, но пока держу про запас, может где и понадобится...
Сегодня ночью всю ночь демо счет пахал и поймал частичное исполнение заявки на покупку.

sec_code                    = VTBR
class_code                    = QJSIM
order_num                    = 7174743882
price                        = 0.016765
qty                            = 1.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 86018
trans_id & 0xFF000            = 86016
uniq_trans_id & 0xFF000        = 217088

sec_code                    = VTBR
class_code                    = QJSIM
order_num                    = 7174743882
price                        = 0.016765
qty                            = 26.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 86018
trans_id & 0xFF000            = 86016
uniq_trans_id & 0xFF000        = 217088

Никаких признаков неисполнения условия я не увидел вообще. Одна и таже заявка, меняется только количество...

57

Re: Общие вопросы по написанию скриптов LUA.

dark184 пишет:
((uniq_trans_id & 0xFF000) == (trade.trans_id & 0xFF000))

Никаких признаков неисполнения условия я не увидел вообще. Одна и таже заявка, меняется только количество...

Я может чего не понимаю, но вот эти значения

dark184 пишет:
trans_id & 0xFF000            = 86016
uniq_trans_id & 0xFF000        = 217088

никак не равны.

58 (2022-10-30 12:41:20 отредактировано dark184)

Re: Общие вопросы по написанию скриптов LUA.

trans_id & 0xFF000            = 86016
uniq_trans_id & 0xFF000        = 217088

Они физически не могут быть равны, ибо это разные trans_id. Первый это выставленный торговым ботом, второй закрался как артефакт логгирующего бота. По хорошему из за его бесполезности его можно убрать. Оба бота выполняются в разных main.
Моя же цель была в том, чтобы убедиться, что у частично выставленной заявки все параметры не меняются. А то, что срабатывает в первый раз говорит о том, что сравнение работает правильно.
Добавил логгирование в сам торговый бот. Буду ловить дальше уже с настоящим uniq_trans_id

59

Re: Общие вопросы по написанию скриптов LUA.

Так сравниваемые значения логируются или нет? я так и не понял

60

Re: Общие вопросы по написанию скриптов LUA.

Пока жду, надо чтобы робот сам выставил заявку, чтобы она частично полностью отработала, только после этого можно смотреть логи. Вручную бесполезно, логгироваться будет, но trans_id тогда не будет вообще. Точнее у меня почему вручную выставленные заявки имеют trans_id = 414 и более. Видимо квик их сам выставляет, но в таблицах не отображает.

61 (2022-10-31 14:44:20 отредактировано dark184)

Re: Общие вопросы по написанию скриптов LUA.

Ура!!! Наконец то подловил сделку с частичной покупкой на реальных торгах! Причем покупалось за три раза, сначала 3, потом еще 1 и сразу 36 лотов. Всего 40. вообще никакого криминала не вижу, колбэк вызывается, данные правильные и реальные, а условие не работает. Ну просто чудеса какие то. Ловил без всяких условий.

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33288950090
price                        = 0.106
qty                            = 3.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81925
uniq_trans_id                    = 81925
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33288950090
price                        = 0.106
qty                            = 3.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81925
uniq_trans_id                    = 81926
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33288950090
price                        = 0.106
qty                            = 3.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81925
uniq_trans_id                    = 81926
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33288950090
price                        = 0.106
qty                            = 1.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81925
uniq_trans_id                    = 81926
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33288950090
price                        = 0.106
qty                            = 1.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81925
uniq_trans_id                    = 81926
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33288950090
price                        = 0.106
qty                            = 1.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81925
uniq_trans_id                    = 81926
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33288950090
price                        = 0.106
qty                            = 36.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81925
uniq_trans_id                    = 81926
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33288950090
price                        = 0.106
qty                            = 36.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81925
uniq_trans_id                    = 81926
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33288950090
price                        = 0.106
qty                            = 36.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81925
uniq_trans_id                    = 81926
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

Кажется пора начинать верить в чудеса...

62 (2022-10-31 15:42:28 отредактировано swerg)

Re: Общие вопросы по написанию скриптов LUA.

Перечитал на 2-й странице ваш скрипт.
Как-то мы во флажки в поисках уперлись.

А вот это вот что??

        if (cur_state == ("confirm_buy" or "part_buy")) then

Этот код до сих пор есть в скрипте?

Да, Lua на него не ругается синтаксически, но работает оно точно не так, как вы ожидаете.
В частности, если cur_state равно "part_buy", то условие вернет false.

Надо так:

        if ((cur_state == "confirm_buy")  or (cur_state =="part_buy")) then

63

Re: Общие вопросы по написанию скриптов LUA.

Этот код до сих пор есть в скрипте?

В принципе уже подправил, я подозревал что эта конструкция не будет нормально работать. Но тем не менее она ни на что не влияет.

message("OnTrade() Статус " .. NAME .. " " .. cur_state)

В любом случае, я уже выяснил однозначно, что колбэк вызывается нормально. А значит это сообщение должно вывестись однозначно при условии (uniq_trans_id & 0xFF000) == (trade.trans_id & 0xFF000), а как видно из лога они однозначно равны во всех случаях, но тем не менее условие срабатывает только при первой частичной покупке, на любые другие не реагирует, хотя коллбэк вызывается однозначно. Ретурнов нигде нет, и выходит из функции по ее завершению... Фиг знает, может чудеса? smile

64

Re: Общие вопросы по написанию скриптов LUA.

dark184 пишет:

Фиг знает, может чудеса? smile

Чудес не бывает.
Предлагаю добавить логирование после каждого if и выяснить таким образом какое именно условие не срабатывает. По приведенному вами ранее скрипту вывод сообщения как минимум под двумя if, а "подозреваете" вы только первый.

Кстати сказать, условие

if (cur_state == ("confirm_buy" or "part_buy")) then

для случая, когда cur_state равно "confirm_buy", вернет как раз true, что очень похоже на описываемое вами поведение "срабатывает для полного исполнения, но не срабатывает для частичного".
Кстати, чему равно cur_state - не логируется, что в нем на самом деле содержится в момент возникновения проблемы - вообще не понятно.

В общем добавить еще логирования после каждого отдельного if.

65

Re: Общие вопросы по написанию скриптов LUA.

Не знаю как сюда картинки цеплять. Сегодня просто день частичных покупок smile Уже во второй раз поймал в первой половине дня.

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33297001713
price                        = 0.1075
qty                            = 6.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81930
uniq_trans_id                    = 81930
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33297001713
price                        = 0.1075
qty                            = 6.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81930
uniq_trans_id                    = 81931
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33297001713
price                        = 0.1075
qty                            = 6.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81930
uniq_trans_id                    = 81931
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33297001713
price                        = 0.1075
qty                            = 34.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81930
uniq_trans_id                    = 81931
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33297001713
price                        = 0.1075
qty                            = 34.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81930
uniq_trans_id                    = 81931
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

sec_code                    = SIBG
class_code                    = TQPI
order_num                    = 33297001713
price                        = 0.1075
qty                            = 34.0
order_qty                    = 0.0
order_price                    = 0.0
trans_id                    = 81930
uniq_trans_id                    = 81931
trans_id & 0xFF000            = 81920
uniq_trans_id & 0xFF000        = 81920

И опять картина маслом, по логу 6 и 34 лота, сделки абсолютно реальные, в квике тоже отображается две сделки по 6 и 34 лота. И опять условие выполняется целиком и полностью, а вот сообщение выводится исключительно только при первой сделке. Смотрю в квике еще по сообщениям. То, что исполнилась заявка еще на 34 лота вообще нигде не упоминается. Хотя в портфеле уже 40 лотов.

66

Re: Общие вопросы по написанию скриптов LUA.

Сейчас немного модифицировал функцию, первое изменение по вашему замечанию, второе перенес вывод сообщения, которое ожидаю увидеть message("OnTrade() Статус " .. NAME .. " " .. cur_state) сразу за if.

function OnTrade(trade)

    if trade.sec_code == SEC then File_Write_Log(trade) end
    
    if ((uniq_trans_id & 0xFF000) == (trade.trans_id & 0xFF000)) then
    message("OnTrade() Статус " .. NAME .. " " .. cur_state)

        if ((cur_state == "confirm_buy") or (cur_state == "part_buy")) then
            message("OnTrade(), Name = " .. NAME .. ", " .. "количество = " .. tostring(tonumber(math.floor(trade.qty))))

            local temp_percent =  buy_price / 100 * percent + buy_price --tonumber(cur_price.param_value)    --
            sell_price = buy_price
            while temp_percent > sell_price do
                sell_price = sell_price + PRICE_STEP
            end
            SendOrder("S", sell_price, tonumber(math.floor(trade.qty)))
            message("OnTrade() Выставлено на продажу " .. NAME .. " sell_price= " .. tostring(sell_price))
            
            if tonumber(math.floor(trade.qty)) == portfolio then
                cur_state = "e_sell"
            else
                cur_state = "part_buy"
            end
        
        end

        if cur_state == "confirm_sell" then
            message("OnTrade() Все лоты проданы! ")
            cur_state = "sell"
        end
    end
end

Что я вижу, если заявка на 40 лотов исполнилась частично, первыми 6 лотов, вторыми 34
message("OnTrade() Статус " .. NAME .. " " .. cur_state) Статус "confirm_buy"
message("OnTrade(), Name = " .. NAME .. ", " .. "количество = " .. tostring(tonumber(math.floor(trade.qty)))) количество 6
message("OnTrade() Выставлено на продажу " .. NAME .. " sell_price= " .. tostring(sell_price))
message("OnTrade() Статус " .. NAME .. " " .. cur_state) Статус "part_buy"
message("OnTrade() Статус " .. NAME .. " " .. cur_state) Статус "part_buy"
Все именно так и задумано, ловлю точку входа, выставляю заявку, она подтверждается статусом "confirm_buy" (не очень удачно выбрано). Затем ждем OnTrade(), внутри выставляем заявку на купленное количество и дальше сравниваем и выставляем соответствующий статус. Но тут ошибочка есть smile Так как остаток этот коллбэк не возвращает, нужно что то другое придумать, ибо part_buy больше никогда не изменится. Но сейчас это вторично, статус "part_buy" верный и остается таким дальше, ибо изначально не может смениться из за косяка. В любом случае это не влияет ни на что, сообщение
message("OnTrade() Статус " .. NAME .. " " .. cur_state) Статус "part_buy" судя по логам я должен увидеть еще три раза, всего шесть раз, независимо ни от статуса, ни от ошибки в коллбэке, лишьбы Trans_id оба совпали, а они совпадают по логу...

67 (2022-11-03 15:21:01 отредактировано dark184)

Re: Общие вопросы по написанию скриптов LUA.

Народ, подскажите что за??? Вобщем все воюю с частичной покупкой... Уже попробовал разные подходы, но все разбивается в хаотичность прихода коллбэков, тот же OnOrder().
Вобщем подумываю использовать

function OnDepoLimit(dlimit)

    if SEC == dlimit.sec_code then
        message("OnDepoLimit() " .. NAME)
        message("Текущий остаток = " .. dlimit.currentbal .. " В продаже = " .. dlimit.locked_sell .. " В покупке = " .. dlimit.locked_buy)

    end
    
end

Вроде все прекрасно, и нужные данные мне подкидывает, но как обычно, есть одно НО! Он отрабатывает 2 раза по выбранному инструменту. Первый раз данные корректные, второй раз во всех полях по нулям... Как вообще это понимать? Если что, то это демо счет.

68

Re: Общие вопросы по написанию скриптов LUA.

Все, вопрос снимается. Первый раз отрабатывает с limit_kind = 0, второй с -3, как я понял это для "служебного использования". Просто фильтрую на заданном сроке расчетов.

69

Re: Общие вопросы по написанию скриптов LUA.

Фух, кажется победил частичное исполнение заявок! И даже удалось оттестировать на демо торгах! Выкинул нафих OnTrade(), OnOrder() с их беспорядочными случайными множественными вызовами. Именно этот хаос мне и мешал. Если при полном исполнении это не представляет особой трудности, то при частичном исполнении, особенно когда покупки идут одна за другой с коротким интервалом времени, не превышающим периодичность повторных вызовов OnTrade(), OnOrder(), начинает творится такая вакханалия!!! Мозг наизнанку выворачивается...
Жаль сразу не додумался осмыслить список коллбэков. OnDepoLimit() для моих целей подошел просто идеально! Через него вся логика реализуется в пару десятков строк кода. Вызывается всего два раза, причем первый раз с limit_kind = 0, второй -3, что фильтруется просто... Единственное, что надо на реальном счете его протестить еще, но я так понимаю скорее всего будет вызываться со значениями limit_kind 0, 1, 2 и -3? На демо счете там только один срок расчетов Т0, в отличие от реального...
Осталось понять, когда он вызывается. Нет, понятно что

Функция вызывается терминалом QUIK при получении изменений позиции по инструментам.

НО! Когда изменяются эти позиции??? Понятно что при выставлении/изменении/исполнении/снятии заявок различного типа. Но когда еще? На данный момент я заметил, что OnDepoLimit() вызывается при подключении к серверу если в портфеле есть что-либо. Если же там все "по нулям" функция не вызывается...

70

Re: Общие вопросы по написанию скриптов LUA.

dark184 пишет:

OnDepoLimit()
Когда изменяются эти позиции??? Понятно что при выставлении/изменении/исполнении/снятии заявок различного типа. Но когда еще? На данный момент я заметил, что OnDepoLimit() вызывается при подключении к серверу если в портфеле есть что-либо.

Наверное еще при изменении сессии (начало новых торгов), если QUIK не выключить и он работает круглосуточно.

71

Re: Общие вопросы по написанию скриптов LUA.

Вот не могу понять, почему здесь

    message("Торговая сессия " .. NAME .. " = " .. getParamEx(CLASS, SEC, "ENDTIME").result)
    message("Торговая сессия " .. NAME .. " = " .. getParamEx(CLASS, SEC, "EVNSTARTTIME").param_image)
    message("Торговая сессия " .. NAME .. " = " .. getParamEx(CLASS, SEC, "EVNENDTIME").param_image)
    message("Торговая сессия " .. NAME .. " = " .. getParamEx(CLASS, SEC, "MONSTARTTIME").param_image)
    message("Торговая сессия " .. NAME .. " = " .. getParamEx(CLASS, SEC, "MONENDTIME").param_image)

Всегда нули. Если взять .result он везде тоже ноль, а это ошибка. Соответственно и .param_image и все остальные пустые.
Для проверки правильности своих действий для теста вывел сообщение с ценой последней сделки

message("Цена последней сделки " .. NAME .. " = " ..tostring(getParamEx(CLASS, SEC, "LAST").param_value))

Все работает. Что я делаю не так или чего не понимаю? Все идентификаторы параметров брал из официальной документации квика info.chm.
Попутно еще вопрос, а есть ли где более полное описание что должно возвращаться? Т.е. хочу я получить строку getParamEx(CLASS, SEC, "EVNSTARTTIME").param_image), чего мне в ней ожидать?
Или к примеру getParamEx(CLASS, SEC, "STATUS").param_image)?
В руководстве написано

1 STATUS STRING Статус

и кроме этого я ничего более не могу найти. Статус чего? Какие значения статуса могут быть? В каком виде, в виде строки с кодовым значением или строки с описанием статуса? Или опять все возможные варианты вычислять самому?

72

Re: Общие вопросы по написанию скриптов LUA.

Получение тех или иных параметров регулируется настройками. Либо надо явно вызывать функцию заказа параметра.
Откройте таблицу параметров. Вы видите в ней то, что хотите увидеть в скрипте? После этого и в скрипте будут значения.
Чтобы было без открытия таблицы - надо заказать получение нужного параметра через ParamRequest()

73 (2022-11-07 12:11:48 отредактировано dark184)

Re: Общие вопросы по написанию скриптов LUA.

В таблице они тоже пустые, я экспортировал в эксель "текущие торги", те параметры в экселе тоже пустые. Сравнивал по названию параметра, они одинаковые.

74

Re: Общие вопросы по написанию скриптов LUA.

dark184 пишет:

В таблице они тоже пустые

Значит либо они не транслируются на данной площадке вовсе, либо их получение отключено в настройках получения данных терминала.

75

Re: Общие вопросы по написанию скриптов LUA.

Значит либо они не транслируются

Чего то сейчас попытался найти те параметры в таблице текущие торги и не смог smile Приснилось чтоли? smile
Из всех нашел только STATUS, TRADINGSTATUS, PLANNEDTIME, STARTTIME, ENDTIME. И в таблице они показываются... Вот только есть ли список всех значений STATUS и TRADINGSTATUS, сейчас они у меня отображается торгуется и открыта соответственно. Можно конечно же погадать на кофейной гуще и придумать не торгуется и закрыта соответственно, ну или подождать и посмотреть... Полный список вообще в природе существует?