Не обновляется таблица при добавления цикла repeat...until

Страницы: 1
RSS
Не обновляется таблица при добавления цикла repeat...until
 
Всем привет!

Сделал скрипт, который при добавлении цикла repeat...until почему-то перестает обновляться.
Если этот цикл убрать, то обновление идет без проблем...
Почему бы так?

Заранее спасибо!
Код
local stopped = false
function OnStop()
   stopped = true
   return 2000
end


function main()


local Table = AllocTable()
AddColumn(Table, 1,"Data", true, QTABLE_DOUBLE_TYPE, 18)

CreateWindow(Table)
SetWindowCaption(Table, "Data table")
SetWindowPos(Table, 0, 10, 380, 80)


InsertRow(Table, -1)

   while stopped == false do

      Quotes_1 = getQuoteLevel2("SPBFUT", "SRU0")

      Bid_Count_1 = tonumber(Quotes_1.bid_count)

      if Bid_Count_1>1 then
         aa= tonumber(Quotes_1.bid[Bid_Count_1].quantity)
         SetCell(Table, 1, 1, tostring(aa))
      end

      local asset = getFuturesHolding("SPBFUT", "SPBFUT****","SRU0",0).totalnet

      repeat

            if aa>1 and asset>0 then

               local ID_B_Order=10
               local OrderSell = {
                     ["ACTION"]="NEW_ORDER",
                     ["ACCOUNT"]= "SPBFUT****",
                            ["OPERATION"] = "S",
                     ["CLASSCODE"]="SPBFUT",
                            ["SECCODE"] = "SRU0",
                            ["PRICE"] = "0",
                     ["QUANTITY"] = tostring(1),
                     ["TRANS_ID"] = tostring(ID_B_Order),
                     ["TYPE"] = "M",
                     }
               local Err_Order = sendTransaction(OrderSell)
               message(Err_Order)
            end

            asset=asset-1

            sleep(1000)

      until asset==0
      --return

      sleep(3000)
   end

end
 
Цитата
Leonid написал:
until asset==0
напишите  until asset<=0
 
Sergey Gorokhov, спасибо за подсказку - заработало как надо.

Единственное смущает то, что итоговое значение asset скачет от -1 до 0; впрочем, это не критично...
 
Sergey Gorokhov,  а как быть, если необходимо выполнить условие until asset=5?


Заранее спасибо
 
Цитата
Leonid написал:
until asset=5?
наверное так и написать, только согласно синтаксису Lua сравнение это ДВА знака равенства и об этом Вам уже говорили.
 
Sergey Gorokhov, уже пробовал вариант until asset==5, но он не срабатывает - идут продажи пока лимиты не выйдут.
 
Leonid,
очевидно что проблема не в  until asset==5
 
Sergey Gorokhov,  а в чем может быть причина?
Когда нужен был 0, то Вы посоветовали   "until asset<=0", и он сработал.
Но если asset  больше 0, то такой вариант не подходит
 
Leonid,
Цитата
Leonid написал:
"until asset<=0", и он сработал.
А что мешает написать "until asset<=5"?
 
Sergey Gorokhov,  ничто не мешает, но начинаются продажи, так как условия позволяет быть asset <5, то есть 4,3,2  и т.д.
 
Вы этот код как реальный пример рабочего кода приводите, либо как некий тестовый пример?

Если просто как пример, что repeat until выполняется всегда хоть один раз пока истинно условие. Т.е., если надо выполнять пока есть лимиты, то это будет условие until asset > 0
У Вас было 5, начинаем выполнять:
4, 3, 2, 1. Все, т.к. на последнем шаге 1 станет 0 и мы выйдем из цикла.

Также и с другими цифровыми порогами. Выполняете пока у вас asset больше. Вы же вычитаете 1 в процессе, значит asset будет уменьшаться.

Если же это рабочий код, то он не предусматривает, что транзакция может не пройти, баланс может обновляться долго, ответ транзакции идет долго. Сервер же далеко, он может быть занят.
 
Nikolay, это вполне рабочий код, который работает с малоликвидными бумагами, то есть сделки редкие и осуществляются при определенных условиях.
Проблема в  том, что если мне надо обнулить портфель из 10 бумаг (asset=10), то условие "until asset<=0" срабатывает отлично.
Если же мне надо продать только 3 бумаги, то "until asset<=7" начинает продавать до тех пор, пока не уйдет в шорт.
То же самое и "until asset==7".
 
Код
asset=10
repeat
  asset=asset-1
until asset==7
print('total: ' .. asset)  --> total: 7
Проблема явно не цикле repeat, а в том, что когда цикл заканчивается, вы возвращаетесь к следующей итерации цикла while, где проверяете позицию
Код
local asset = getFuturesHolding("SPBFUT", "SPBFUT****","SRU0",0).totalnet
которая отличается от нужной вам, т.к., вы только отправили транзакции, надо ещё дождаться, когда сделки исполнятся, сервер соизволит обновить позицию и отправит её клиенту.
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель, а как быть тогда?
Добавлять код, который отслеживает статус выполнения заявки?
Если да, то куда добавлять?
Страницы: 1
Читают тему
Наверх