Значения цены в таблице заявок

Страницы: 1
RSS
Значения цены в таблице заявок
 
Пытаюсь искать заявки по равенству значения поля price в таблице orders цене типа 0.213. Использую функцию SearchItems. Но работает через раз. Причем этот же скрипт нормально работает на обычныйх фьючах и через раз на спредах фьючей. Заявки выставляю в формате цены, как выше писал.
Соответсвует ли формат цены в этой таблице той, что в терминале? В чем причина такого поведения? Кривое округление или его отсутствие?
 
кусок кода выполняющий поиск заявки по цене:
Код
function KillOrderPrice(ordtable, TRADE_CLASS_CODE, TRADE_SEC_CODE, fPrice)
    function myFindPrice(C,S,F,P)
       return (C == TRADE_CLASS_CODE) and (S == TRADE_SEC_CODE) and (bit.band(F, 0x1) ~= 0) and (P == fPrice)
    end    
    local orders = SearchItems(ordtable, 0, getNumberOf(ordtable)-1, myFindPrice, "class_code,sec_code,flags,price")
    if (orders ~= nil) and (#orders > 0) then
...
 
вот лог скрипта:
Код
Wed May 24 11:15:17 2023; script Monitor: L Transaction SELL 0.235;
Wed May 24 11:15:17 2023; OnTransReply 1684916125 Заявка на спрэд фьючерсов 2012575306438912367 успешно зарегистрирована.;
Wed May 24 11:15:18 2023; Отмена заявки - NGK3NGM3 = 0.211;
Wed May 24 11:15:18 2023; OnTransReply 1684916126 Заявка на спрэд фьючерсов 2012575306438911628 снята. Снятое количество: 1.;
Wed May 24 11:15:19 2023; Отмена заявки - NGK3NGM3 = 0.235;
Wed May 24 11:15:19 2023; Не найдены активные заявки NGK3NGM3;

Wed May 24 11:15:21 2023; Отмена заявки - NGK3NGM3 = 0.235;
Wed May 24 11:15:21 2023; Не найдены активные заявки NGK3NGM3;

Wed May 24 11:15:23 2023; Отмена заявки - NGK3NGM3 = 0.235;
Wed May 24 11:15:23 2023; Не найдены активные заявки NGK3NGM3;
 
Цитата
Cyber написал:
о
сделайте так
Код
    function myFindPrice(C,S,F,P)
     if (C == TRADE_CLASS_CODE) and (S == TRADE_SEC_CODE) and (bit.band(F, 0x1) ~= 0) and (P == fPrice) then return true end
     return false 
    end    
  для проверки хорошо бы вывести в лог файл  перед if все параметры сравнения
 
Цитата
nikolz написал:
if (C == TRADE_CLASS_CODE) and (S == TRADE_SEC_CODE) and (bit.band(F, 0x1) ~= 0) and (P == fPrice) then return true end
не помогло
пример лога со всеми вызовами функции myFindPrice
нормально:
Код
Thu May 25 15:09:40 2023; KillOrderPrice: C=FUTSPREAD==FUTSPREAD and S=NGK3NGM3==NGK3NGM3 and F=25 and P=0.208==0.208;
Thu May 25 15:09:40 2023; KillOrderPrice: C=FUTSPREAD==FUTSPREAD and S=NGK3NGM3==NGK3NGM3 and F=29 and P=0.231==0.208;
Thu May 25 15:09:40 2023; KillOrderPrice: C=FUTSPREAD==FUTSPREAD and S=NGK3NGM3==NGK3NGM3 and F=25 and P=0.219==0.208;
Thu May 25 15:09:40 2023; KillOrderPrice: C=FUTSPREAD==FUTSPREAD and S=NGK3NGM3==NGK3NGM3 and F=29 and P=0.232==0.208;
Thu May 25 15:09:40 2023; OnTransReply 1685016561 Заявка на спрэд фьючерсов 2012575310734055100 снята. Снятое количество: 1.;

а 0,243, например, просто не находит:

Код
Thu May 25 15:11:53 2023; KillOrderPrice: C=FUTSPREAD==FUTSPREAD and S=NGK3NGM3==NGK3NGM3 and F=29 and P=0.242==0.243;
Thu May 25 15:11:53 2023; KillOrderPrice: C=FUTSPREAD==FUTSPREAD and S=NGK3NGM3==NGK3NGM3 and F=25 and P=0.22==0.243;
Thu May 25 15:11:53 2023; KillOrderPrice: C=FUTSPREAD==FUTSPREAD and S=NGK3NGM3==NGK3NGM3 and F=29 and P=0.243==0.243;
Thu May 25 15:11:53 2023; Не найдены активные заявки NGK3NGM3=0.243;

 
Цитата
Cyber написал:
fPrice
а где fPrice?
и как понять какие условия сработали ,а какие нет.
-----------------
хорошо бы  вывести все параметры сравнения и в конце результат сравнения
т е будут строки всех параметров а в конце true или false
 
и еще
возможно различные типы  
попробуйте указать явный тип для всех параметров которые могут быть числами
 
Цитата
nikolz написал:
а где fPrice?
и как понять какие условия сработали ,а какие нет.
myLog('KillOrderPrice: C='..tostring©..'=='..tostring(TRADE_CLASS_CODE)..' and S='..tostring(S)..'=='..tostring(TRADE_SEC_CODE)..' and F='..tostring(F)..' and P='..tostring(P)..'=='..tostring(fPrice))
Похоже, не находит заявки на продажу, только на покупку.
 
Код
if (tostring(C) == tostring(TRADE_CLASS_CODE)) and (tostring(S) == tostring(TRADE_SEC_CODE)) and (F & 0x1 ~= 0) and (tostring(P) == tostring(fPrice)) then 
заработало вроде
разрабы, вы бы проверили, это явно не нормальная ситуация с типами
 
Цитата
Cyber написал:
Код
   if  (tostring(C)  =  =  tostring(TRADE_CLASS_CODE))  and  (tostring(S)  =  =  tostring(TRADE_SEC_CODE))  and  (F  &   0x1  ~ =   0 )  and  (tostring(P)  =  =  tostring(fPrice))  then  
  
заработало вроде
разрабы, вы бы проверили, это явно не нормальная ситуация с типами
скорее всего это не вина разработчиков.
Это особенность языков с динамической типизацией, к которым относится и LUA.
Но разработчики могли бы это учесть в функции SearchItems.  
Страницы: 1
Читают тему
Наверх