Sergey Pavlov
Sergey Pavlov личный блог
19 октября 2017, 14:38

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

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

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

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

Премного благодарен:)
10 Комментариев
  • SergeyJu
    19 октября 2017, 14:42
    Т+2
  • Igr
    19 октября 2017, 14:48

    quikluacsharp.ru/

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

  • Maximus
    19 октября 2017, 15:27

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

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

  • А. Г.
    19 октября 2017, 16:43
    В таблице лимитов по бумагам есть столбец  c T0 и T2. По нему можно отфильтровать.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн