Сейчас немного модифицировал функцию, первое изменение по вашему замечанию, второе перенес вывод сообщения, которое ожидаю увидеть 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(), внутри выставляем заявку на купленное количество и дальше сравниваем и выставляем соответствующий статус. Но тут ошибочка есть
Так как остаток этот коллбэк не возвращает, нужно что то другое придумать, ибо part_buy больше никогда не изменится. Но сейчас это вторично, статус "part_buy" верный и остается таким дальше, ибо изначально не может смениться из за косяка. В любом случае это не влияет ни на что, сообщение
message("OnTrade() Статус " .. NAME .. " " .. cur_state) Статус "part_buy" судя по логам я должен увидеть еще три раза, всего шесть раз, независимо ни от статуса, ни от ошибки в коллбэке, лишьбы Trans_id оба совпали, а они совпадают по логу...