Подсобите с битовыми флагами на примере выяснения позиции из таблицы OnTrade( )?

Страницы: 1
RSS
Подсобите с битовыми флагами на примере выяснения позиции из таблицы OnTrade( )?
 
В моей справочной литературе по LUA про битовые флаги ничего нет, в примерах мудрёно как-то, а в хелпе слишком скудная информация!
допустим имеем:
Код
function OnTrade(order)
   table_order = order
end
как выяснить направление сделки?
 
бит 2 (0x4)  Заявка на продажу, иначе – на покупку. Данный флаг для сделок и сделок для исполнения определяет направление сделки (BUY/SELL)  - т.е. вам надо проверить состояние 4го бита - (0х4). Если он ноль, то покупка, если 1 - то продажа.

if  bit.band(order["flags"],4)>0
then
-- заявка на продажу
else
-- заявка на покупку
end
 
Цитата
Руслан Руслан пишет:
бит 2 (0x4)Заявка на продажу, иначе – на покупку. Данный флаг для сделок и сделок для исполнения определяет направление сделки (BUY/SELL)- т.е. вам надо проверить состояние 4го бита - (0х4)
Почему же надо проверять состояния 4-го бита, если в документации идет речь о 2-м?
(0х4) - это не номер бита, а значение числа, имеющего единицу в данном бите и нули во всех остальных.

В Lua я не очень силен, поэтому подскажите плиз, функция bit.band - это стандартная функция Lua или она из какой-то библиотеки сторонних разработчиков? Где можно увидеть ее описание?
 
Цитата
Дмитрий пишет:
Цитата
Руслан Руслан пишет:
бит 2 (0x4)Заявка на продажу, иначе – на покупку. Данный флаг для сделок и сделок для исполнения определяет направление сделки (BUY/SELL)- т.е. вам надо проверить состояние 4го бита - (0х4)
Почему же надо проверять состояния 4-го бита, если в документации идет речь о 2-м?
(0х4) - это не номер бита, а значение числа, имеющего единицу в данном бите и нули во всех остальных.

В Lua я не очень силен, поэтому подскажите плиз, функция bit.band - это стандартная функция Lua или она из какой-то библиотеки сторонних разработчиков? Где можно увидеть ее описание?
Для меня это осталось загадкой, на выяснение которой я не стал тратить время. Видимо там значение бита проверяется, а не его порядковый номер.
вот щас быстренько написал:

if bit.band(order["flags"],1)>0
then
message("akt")
else
message("not akt")
end

выставляю лимитную заявку, выдает - akt, снимаю заявку, выдает - not akt.
хотя проверка акт/неакт в руководстве написано проверяется в "бит 0"
 
Нашел ее описание в руководстве по QLua, раздел "Функции для работы с битовыми масками в структурах данных":

Функция возвращает результат битовой операции AND над аргументами. Аргументов может быть несколько, при этом обязательные аргументы x1 и x2.
NUMBER bit.band(NUMBER x1, NUMBER x2, ...)
 
Цитата
поэтому подскажите плиз, функция bit.band - это стандартная функция Lua или она из какой-то библиотеки сторонних разработчиков?
стандартная. AND - это логическое ИЛИ только для битовых флагов, написанное в виде функции. Посмотрите в справке. bAnd, bOr, bNot соответствуют and, or, not в обычных логических операциях.
 
Цитата
Руслан Руслан пишет:
bit.band
Код
if bit.band(order["flags"],4)>0 
then 
 
Не сразу понял эту штуку, пока не включил калькулятор и не увидел, как выглядит в двоичной системе цифра 4!
Зачем было вводить эти биты, какая-то экономия на памяти?)))
 
Цитата
Николай Бехтерев пишет:
Зачем было вводить эти биты, какая-то экономия на памяти?)))
Все еще смешнее на самом деле это не экономия, а лишние затраты,
так как битовая операция  bit.band(order["flags"],4)
занимает места больше,
чем экономия памяти на упаковке флагов.
--------------------------------------
Возможно, что так сделано для того,
чтобы неподготовленным пользователям (а таких большинство) "жизнь медом не казалась".
 
Цитата
Николай Камынин пишет:

Возможно, что так сделано для того,
чтобы неподготовленным пользователям (а таких большинство) "жизнь медом не казалась".
Битовая маска flags из описания сделки выдается из хранилища quik без каких-либо изменений.

Экономия памяти на упаковке битов очень существенна, если учесть, что сделок в памяти квика в течение дня накапливается миллионы.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Подскажите как правильно работать с флагами при получении обезличенных сделок?
 
Код
local SELL_FLAG = 1
local BUY_FLAG = 2

function OnAllTrade(allTrade)
    ...
    local buySell = 0
    if bit.band(currTrade.flags, BUY_FLAG) == BUY_FLAG then
        buySell = 1
    elseif bit.band(currTrade.flags, SELL_FLAG) == SELL_FLAG then
        buySell = -1
    end
    ...
end
 
Цитата
_sk_ написал:
Код
   local  SELL_FLAG  =   1 
 local  BUY_FLAG  =   2 

 function   OnAllTrade (allTrade)
     .. .
     local  buySell  =   0 
     if   bit.band (currTrade.flags, BUY_FLAG)  =  =  BUY_FLAG  then 
        buySell  =   1 
     elseif   bit.band (currTrade.flags, SELL_FLAG)  =  =  SELL_FLAG  then 
        buySell  =   -  1 
     end 
     .. .
 end   
Да за такое морду бить надо.
Разные биты на один флаг? Смеялсо.
Цитата
бит 2 (0x4)Заявка на продажу, иначе – на покупку.

local  SELL_FLAG  = 2
if   bit.band (currTrade.flags, SELL_FLAG)  =  =  SELL_FLAG then          
    buySell  =   -  1
else
    buySell  = +  1
fi

и никак иначе. А первый бит
Цитата
бит 1 (0x2) Заявка снята. Если флаг не установлен и значение бита «0» равно «0», то заявка исполнена
Никакого отношения к направлению не имеет.

И этот человек пишет боты на заказ... ужос
 
Если посмотреть внимательно на вопрос, то станет ясно, что он был об обезличенных сделках (OnAllTrade), а не о сделках пользователя терминала (OnTrade).

Не знаю, что надо делать с мордами невнимательных комментаторов.

Отдельные биты, как я понимаю, были сделаны разработчиками терминала из-за того, что в обезличенных  сделках, представляющих собой данные по индексам, оба бита нулевые.
 
Цитата
_sk_ написал:
Если посмотреть внимательно на вопрос, то станет ясно, что он был об обезличенных сделках (OnAllTrade), а не о сделках пользователя терминала (OnTrade).
Оу... май пардон :(
Цитата
_sk_ написал:
Не знаю, что надо делать с мордами невнимательных комментаторов.
Вероятно тоже бить. Суют морды не в свое дело :)
Страницы: 1
Читают тему
Наверх