Определение направления заявки

Страницы: 1
RSS
Определение направления заявки
 
Ребята, прошу помощи начинающему Lua-разрабу.
У меня есть такой код. Функция ActiveLimitOrderExists должна проверить, что по инструменту в таблице заявок есть активная лимитная заявка на продажу или покупку.
Проблема в этой строке

if bit.band(order.flags, 0x4) == operation_flag then
Не могу добиться, чтобы она отдавала правильный результат. Что может быть не так, что bit.band(order.flags, 0x4) ничего не отдает. Например, если вывести результат выполнения в message(bit.band(order.flags, 0x4)).
Код
function main()
   local a = ActiveLimitOrderExists(52.50, 1)
end


function ActiveLimitOrderExists(price, operation_flag)
    local orders_count = getNumberOf("orders")

    for i = 0, orders_count - 1 do
        local order = getItem("orders", i)
        if order.class_code == CLASS_CODE and order.sec_code == SEC_CODE then
           message("Не проверили направление сделки")
           if bit.band(order.flags, 0x4) == operation_flag then
            --if order.OPERATION == operation_flag then
                -- Проверяем, что цена совпадает
                message("Проверили направление сделки")
                if order.price == price then
                    -- Проверяем, что заявка активна (бит 0 в flags = 1)
                    if bit.band(order.flags, 0x1) == 0x1 then
                        -- Проверяем, что это лимитная заявка (бит 1 в flags = 0, т.е. не снята)
                        if bit.band(order.flags, 0x2) == 0 then
                            return true
                        end
                    end
                end
            end
        end
    end
    return false
end
 
Чем Вас SearchItems не устраивает?
Код
 function ActiveLimitOrderExists(price, operation_flag) -- если operation_flag = 1, то продажа 
    local cond = operation_flag == 1 and 5 or 1
    local function Fn1(prc, flg, clss, sec)
      return prc == price and flg & 5 == cond and sec == SEC_CODE and clss == CLASS_CODE
    end
    return SearchItems("orders", 0, getNumberOf("orders")-1, Fn1, "price,flags,class_code,sec_code")
  end
Возвращает таблицу  с индексом (индексами) подходящих заявок, или пустую, если таковых не найдено.
Всё пройдет. Но это не точно.
 
Поправка: возвращает nil, если не найдено.
Всё пройдет. Но это не точно.
 
Цитата
Димч написал:
если вывести результат выполнения в message(bit.band(order.flags, 0x4))
bit.band возвращает тип NUMBER, а message числа не понимает.
Всё пройдет. Но это не точно.
 
Цитата
Димч написал:
bit.band(order.flags, 0x4)
У Вас ошибка.
результат операции логического И  (bit.band)  не 1 , а 4 , если бит установлен.
т е в вызове должно быть
Код
 local a = ActiveLimitOrderExists(52.50, 0x4)

--------------------------------

В Lua 5.3 и 5 4  нет надобности в библиотеке bit
вместо
Код
bit.band(order.flags, 0x4)
можно записать так:
Код
order.flags&4
Страницы: 1
Читают тему
Наверх