Доброго времени суток. Хотелось бы узнать из за чего происходит следущее:
я стараюсь узнать цену открытия по акциям, но вместо этого получаю в ответ цену деленную на 100. То есть, 1621,5 = 16,215. Это был тест на демке Арки, на реале не проверял. Это только с демо счетом актуально ? или же на реале так же будет ?
Код работает верно сейчас, но если убрать умножение на 100 (там где у меня стоит комментарий " -- Уточнить нужно ли умножать на 100") и попробовать достучаться до цены открытия позиции по акциям, то тогда описанная мною проблема как раз и всплывает (без этого умножения у меня цена возвращается деленная на 100).
Код
select_CurrentDeals = function(account,class_code,sec_code,limit_kind)
isPosition = false;
T_position={};
T_position.class_code = class_code;
T_position.sec_code = sec_code;
T_position.account = account;
close_price = getParamEx(class_code,sec_code,"last").param_value;
if class_code == "SPBFUT" then
T_position.position_type = 0;
for i = getNumberOf("futures_client_holding")-1,0,-1 do
T = getItem("futures_client_holding",i);
if T.sec_code == sec_code and
T.totalnet ~= 0 then
if T.totalnet > 0 then
T_position.position_type = 1;
else
T_position.position_type = -1;
end;
T_position.qty = math.abs(T.totalnet);
T_position.price = T.avrposnprice;
if T_position.position_type > 0 then
T_position.current_PL = close_price - T_position.price;
else
T_position.current_PL = T_position.price - close_price;
end;
break;
end;
end;
else
T_shares = {};
for i = getNumberOf("depo_limits")-1,0,-1 do
T = getItem("depo_limits",i);
if T.sec_code == sec_code and
T.limit_kind == limit_kind and
T.trdaccid == account and
T.currentbal ~= 0 then
isPosition = true;
T_shares = T;
break;
end;
end;
if isPosition then
lotSize = 1;
for i = getNumberOf("securities")-1,0,-1 do
T = getItem("securities",i);
if T.code == sec_code and T.class_code == class_code then
lotSize = T.lot_size;
break;
end;
end;
T_position.price = (T_shares.awg_position_price*100); -- Уточнить нужно ли умножать на 100
T_position.qty = math.abs(T_shares.currentbal/lotSize);
if T_shares.currentbal > 0 then
T_position.position_type = 1;
else
T_position.position_type = -1;
end;
if T_position.position_type > 0 then
T_position.current_PL = close_price - T_position.price;
else
T_position.current_PL = T_position.price - close_price;
end;
else
T_position.position_type = 0;
end;
end;
return T_position;
end;
Sergey Gorokhov написал: Уточните еще по какому инструменту Вы смотрите данные.
Однако жто как я понял на всех акциях так получается (повторюсь, что я на демке смотрел). и повторюсь что для того что бы описанная проблемма имела место, нужно убрать в функции умножение на 100.
В руководстве по QLua для версии QUIK 7.16.3.14 в описании параметров Таблицы лимитов по бумагам, получаемых по событию OnDepoLimit, цена приобретения указана как wa_position_price, но не awg_position_price. Будет ли в новых версиях QUIK поддерживаться параметр awg_position_price? Спасибо!
Сегодня 11.05.2018 проблема ( цена / 100 ) повторилась. На всех акциях. Возможно после обновления QUIK до 7.16.3.14. sec_code=VTBR entry_price=0.00051057 lotsize=10000 entry_price=myFuncGet ("depo_limits", "sec_code", sec_code, "limit_kind", 2, "awg_position_price") .... getItem(table_name, i)[key3]
Goodchild, Здравствуйте, Описанная в данном посте ошибка еще не была устранена. Как уже было сказано она будет исправлена в одной из следующих версий терминала, а не в текущей версии.
Sergey Gorokhov написал: Просьба предоставить код скрипта.
Код работает верно сейчас, но если убрать умножение на 100 (там где у меня стоит комментарий " -- Уточнить нужно ли умножать на 100") и попробовать достучаться до цены открытия позиции по акциям, то тогда описанная мною проблема как раз и всплывает (без этого умножения у меня цена возвращается деленная на 100).
Код
select_CurrentDeals = function (account,class_code,sec_code,limit_kind)
isPosition = false ;
T_position = {};
T_position.class_code = class_code;
T_position.sec_code = sec_code;
T_position.account = account;
close_price = getParamEx (class_code,sec_code,"last").param_value;
if class_code = = "SPBFUT" then
T_position.position_type = 0 ;
for i = getNumberOf ( "futures_client_holding" ) - 1 , 0 , - 1 do
T = getItem ( "futures_client_holding" ,i);
if T.sec_code = = sec_code and
T.totalnet ~ = 0 then
if T.totalnet > 0 then
T_position.position_type = 1 ;
else
T_position.position_type = - 1 ;
end ;
T_position.qty = math.abs (T.totalnet);
T_position.price = T.avrposnprice;
if T_position.position_type > 0 then
T_position.current_PL = close_price - T_position.price;
else
T_position.current_PL = T_position.price - close_price;
end ;
break ;
end ;
end ;
else
T_shares = {};
for i = getNumberOf ( "depo_limits" ) - 1 , 0 , - 1 do
T = getItem ( "depo_limits" ,i);
if T.sec_code = = sec_code and
T.limit_kind = = limit_kind and
T.trdaccid = = account and
T.currentbal ~ = 0 then
isPosition = true ;
T_shares = T;
break ;
end ;
end ;
if isPosition then
lot Size = 1 ;
for i = getNumberOf ( "securities" ) - 1 , 0 , - 1 do
T = getItem ( "securities" ,i);
if T.code = = sec_code and T.class_code = = class_code then
lot Size = T.lot_size;
break ;
end ;
end ;
T_position.price = (T_shares.awg_position_price * 100 ); -- Уточнить нужно ли умножать на 100
T_position.qty = math.abs (T_shares.currentbal/lot Size );
if T_shares.currentbal > 0 then
T_position.position_type = 1 ;
else
T_position.position_type = - 1 ;
end ;
if T_position.position_type > 0 then
T_position.current_PL = close_price - T_position.price;
else
T_position.current_PL = T_position.price - close_price;
end ;
else
T_position.position_type = 0 ;
end ;
end ;
return T_position;
end ;
Добрый день,
Описанная ошибка исправлена в версии 7.18.1 терминала QUIK. Рекомендуем вам обновить версию программы.