Коллеги! Помогите решить простую задачку.
Дано: имеются позиции по бумагам (TQBR).
Надо: получить текущую позицию по каждой бумаге при помощи LUA.
Пробовал пользоваться таблицами depo_limits, firm_holding и account_balance.
Хоть каких-то чисел добился лишь через таблицу depo_limits следующим кодом:
pos1={}
pos2={}
for j=0,getNumberOf("DEPO_LIMITS")-1 do
pos1[#pos1+1]=getItem("DEPO_LIMITS",j).sec_code
pos2[#pos2+1]=getItem("DEPO_LIMITS",j).currentbal
end
Проблема такого варианта в том, что он показывает ненулевые значения в currentbal только для позиций, которые были открыты ранее (возможно, по которым прошло +2 дня). По позициям, которые были открыты сегодня, он точно показывает 0.
Подскажите, как правильно решить эту задачку?
Премного благодарен:)
quikluacsharp.ru/
отличный сайт, отличный чувак там, всегда отвечает, скажите что igr его порекомендовал;)
Посмотри вот этот код. Возможно тебе подойдет.
--Возвращает значение открытой позиции или false, если нет открытых позиций.
function Active_poz() --poz_condition(направление), poz_balance(количество), poz_price(цена)
--Определим текущую цену открытой позы и ее направление
— Перебирает строки таблицы «Позиции по клиентским счетам (фьючерсы)», ищет Текущие чистые позиции по инструменту «RIH5»
local poz_condition,poz_balance,poz_price=0,0,0
for i = 0,getNumberOf(«FUTURES_CLIENT_HOLDING») — 1 do
— ЕСЛИ строка по нужному инструменту и чистая позиция не равна нулю ТО
if getItem(«FUTURES_CLIENT_HOLDING»,i).sec_code == sec_code and getItem(«FUTURES_CLIENT_HOLDING»,i).totalnet ~= 0 then
— ЕСЛИ текущая чистая позиция > 0, ТО открыта длинная позиция (BUY)
if getItem(«FUTURES_CLIENT_HOLDING»,i).totalnet > 0 then
poz_condition=«B»
poz_balance = getItem(«FUTURES_CLIENT_HOLDING»,i).totalnet -- Количество лотов в позиции BUY
poz_price=getItem(«FUTURES_CLIENT_HOLDING»,i).avrposnprice
else — ИНАЧЕ открыта короткая позиция (SELL)
poz_condition=«S»
poz_balance = math.abs(getItem(«FUTURES_CLIENT_HOLDING»,i).totalnet) — Количество лотов в позиции SELL
poz_price=getItem(«FUTURES_CLIENT_HOLDING»,i).avrposnprice
end
else
printlogs(«p»,«Active_poz() Нет открытой позы. Выходим из функции.»)
return false
end
end
printlogs(«p»,«Active_poz() Открытая позиция (B-BUY,S-SELL)-»..poz_condition.."; Кол-во-"..poz_balance.."; Цена-"..poz_price)
if poz_balance>0 then
return poz_condition, poz_balance, poz_price
else
return false
end
end
это функция:
function get_balance(sec, client_code)
local n=getNumberOf(«depo_limits»)
for i=0,n-1 do
limit = getItem(«depo_limits», i)
if limit~=nil and limit.sec_code == sec and limit.client_code == client_code and limit.limit_kind==2 then
return limit.currentbal
end
end
return 0
end
а вызывается она так:
balance=get_balance(«GAZP», «код клиента»)
Я уже 5 лет пользуюсь ею в неизменном виде.
немного улучшил Ваш программный код Lua QUIK:
function get_balance(sec, client_code)
local n = getNumberOf('depo_limits')
for i=0,n-1 do
limit = getItem('depo_limits', i)
if limit and limit.sec_code == sec and limit.client_code == client_code and limit.limit_kind == 2 then return limit.currentbal end
end
return nil
end
balance = get_balance('GAZP, '123456')
if balance then message('Тута '..balance) else message('Жопа') end