Блог им. 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
3.8К | ★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 лет пользуюсь ею в неизменном виде.

avatar
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


Читайте на SMART-LAB:
Фото
Банк России и ФАС запретили банкам навязывать конкретных страховщиков при выдаче кредитов
Отличные новости для независимых страховых, как RENI!  Сегодня стало известно, что ЦБ и ФАС направили совместное письмо банкам, которое...
Фото
Золото и серебро — идеальное сочетание? Взгляд Heraeus на рынок драгоценных металлов
 Когда инвесторы ищут ответы на вопросы о будущем, они нередко возвращаются к золоту и серебру — одним из старейших активов за всю историю...
Акции Сбербанка отреагировали умеренным ростом на его отчётность по МСФО за 2025 год
Сегодня динамику немного лучше рынка показывают обыкновенные акции Сбербанка, подорожавшие на 0,1%, до 317,85 руб. за акцию. Сбербанк сегодня...
Фото
Какие юаневые облигации можно приобрести на фоне ужесточения бюджетного правила?

теги блога Sergey Pavlov

....все тэги



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