Блог им. melamaster

Как в квике получить текущую позицию по бумагам

Коллеги! Помогите решить простую задачку.

Дано: имеются позиции по бумагам (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.

Подскажите, как правильно решить эту задачку?

Премного благодарен:)
  • обсудить на форуме:
  • Quik Lua
★4
10 комментариев
Т+2
avatar

quikluacsharp.ru/

отличный сайт, отличный чувак там, всегда отвечает, скажите что igr его порекомендовал;)  

avatar

Посмотри вот этот код. Возможно тебе подойдет.

--Возвращает значение открытой позиции или 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

avatar
Maximus, спасибо, но с фьючерсами у меня проблем нет. Не могу добиться текущих позиций по бумагам.
avatar
В таблице лимитов по бумагам есть столбец  c T0 и T2. По нему можно отфильтровать.
avatar
А. Г., интересует автоматически и программно, советника себе делаю.
avatar

это функция:
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 лет пользуюсь ею в неизменном виде.

Albus, благодарю. Не подозревал, что по одному инструменту приходят три разных лимита и нужно фильтровать по limit_kind.
avatar
Sergey Pavlov, 

немного улучшил Ваш программный код 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


теги блога Sergey Pavlov

....все тэги



UPDONW
Новый дизайн