получить текущую эффективную цену позиции

Страницы: 1
RSS
получить текущую эффективную цену позиции
 
Здравствуйте, подскажите пожалуйста, как через Lua 100% получить Эффективную цену позиции? (фьюч)
 
Цитата
Sergey написал:
Здравствуйте, подскажите пожалуйста, как через Lua 100% получить Эффективную цену позиции? (фьюч)
Добрый день.

Для получения параметра Эффективная цена позиции необходимо использовать функцию
getFuturesHolding и параметр avrposnpric

Формат вызова:  

TABLE getFuturesHolding(STRING firmid, STRING trdaccid, STRING  sec_code, NUMBER type)

 
Цитата
Egor Zaytsev написал:
Цитата
Sergey написал:
Здравствуйте, подскажите пожалуйста, как через Lua 100% получить Эффективную цену позиции? (фьюч)
Добрый день.

Для получения параметра Эффективная цена позиции необходимо использовать функцию
getFuturesHolding и параметр avrposnpric

Формат вызова:    TABLE getFuturesHolding(STRING firmid, STRING trdaccid, STRING  sec_code, NUMBER type)
Так на всякий случай спрошу, если я куплю фьюч по рынку, затем через 2 минуты, ещё раз докуплю фьюч, я увижу среднюю цену позиции в эффект.цена.поз? или в другом месте нужно смотреть?
 
Цитата
Sergey написал:
Цитата
Egor Zaytsev написал:
 
Цитата
Sergey  написал:
Здравствуйте, подскажите пожалуйста, как через Lua 100% получить Эффективную цену позиции? (фьюч)
 Добрый день.

Для получения параметра Эффективная цена позиции необходимо использовать функцию
getFuturesHolding и параметр avrposnpric

Формат вызова:    TABLE getFuturesHolding(STRING firmid, STRING trdaccid, STRING  sec_code, NUMBER type)
Так на всякий случай спрошу, если я куплю фьюч по рынку, затем через 2 минуты, ещё раз докуплю фьюч, я увижу среднюю цену позиции в эффект.цена.поз? или в другом месте нужно смотреть?
Да, верно, это и есть Средневзвешенная цена открытия.
 
Цитата
Egor Zaytsev написал:
Цитата
Sergey написал:
 
Цитата
Egor Zaytsev  написал:
 
Цитата
 Sergey   написал:
Здравствуйте, подскажите пожалуйста, как через Lua 100% получить Эффективную цену позиции? (фьюч)
  Добрый день.

Для получения параметра Эффективная цена позиции необходимо использовать функцию
getFuturesHolding и параметр avrposnpric

Формат вызова:    TABLE getFuturesHolding(STRING firmid, STRING trdaccid, STRING  sec_code, NUMBER type)
 Так на всякий случай спрошу, если я куплю фьюч по рынку, затем через 2 минуты, ещё раз докуплю фьюч, я увижу среднюю цену позиции в эффект.цена.поз? или в другом месте нужно смотреть?
Да, верно, это и есть Средневзвешенная цена открытия.
погуглил что да как вродь всё правильно написал, но пишет nil
позиция открыта, в лонг.
tas=TABLE getFuturesHolding("SPBFUT","70180ZB", "SiM9",4)
message (tostring(tas))
 
Цитата
Sergey написал:
Цитата
Egor Zaytsev написал:
 
Цитата
Sergey  написал:
 
Цитата
 Egor Zaytsev   написал:
   
Цитата
  Sergey    написал:
Здравствуйте, подскажите пожалуйста, как через Lua 100% получить Эффективную цену позиции? (фьюч)
   Добрый день.

Для получения параметра Эффективная цена позиции необходимо использовать функцию
getFuturesHolding и параметр avrposnpric

Формат вызова:    TABLE getFuturesHolding(STRING firmid, STRING trdaccid, STRING  sec_code, NUMBER type)
  Так на всякий случай спрошу, если я куплю фьюч по рынку, затем через 2 минуты, ещё раз докуплю фьюч, я увижу среднюю цену позиции в эффект.цена.поз? или в другом месте нужно смотреть?
 Да, верно, это и есть Средневзвешенная цена открытия.
погуглил что да как вродь всё правильно написал, но пишет nil
позиция открыта, в лонг.
tas=TABLE getFuturesHolding("SPBFUT","70180ZB", "SiM9",4)
message (tostring(tas))
В параметре мы допустили опечатку. Правильно так: avrposnprice
 
Цитата
Egor Zaytsev написал:
avrposnprice
простите вот тут не понял, можете пожалуйста целиком написать как будет?
 
Пример:
T=getFuturesHolding("SPBFUT","SPBFUT0001", "SiM9", 0)
message(tostring(T.avrposnprice))
 
Цитата
Sergey Gorokhov написал:
Пример:
T=getFuturesHolding("SPBFUT","SPBFUT0001", "SiM9", 0)
message(tostring(T.avrposnprice))
Благодарю вас! так заработало.
только я до сих пор не понимаю, почему в "Таблица моих сделок" цена одна купли, а по эффект.цена позиции другая.
я уже не понимаю на какую мне смотреть)))
 
Sergey,
Этот параметр считает и транслирует биржа, можете поинтересоваться у нее какая формула расчета.
В биржевом потоке это параметр waprice из таблицы position потока FORTS_POS_REPL
 
Цитата
Sergey Gorokhov написал:
Sergey,
Этот параметр считает и транслирует биржа, можете поинтересоваться у нее какая формула расчета.
В биржевом потоке это параметр waprice из таблицы position потока FORTS_POS_REPL
И снова я к вам вернулся)) в общем протестил что да как, и вот что выходит
перед покупкой с прошлой сделки в "эффект.цена позиции" осталась цена 65212 (позиций нет)
short по маркету. в "Таблица заявок" цена 65103 а  в "эффект.цена позиции" цена стала 65209(это средняя цена всех предыдущих сделок как я понял), такой цены в стакане в Bid Ask нет.
так что это не то что нужно =(( мне нужна текущая цена текущей позиции.
 
Цитата
Sergey написал:
так что это не то что нужно =(( мне нужна текущая цена текущей позиции.

Что Вы понимаете под "текущая цена текущей позиции"?
биржа транслирует то что Вам нужно, если да в каком параметре?
Следует понимать что на срочном рынке (в отличии от фондового и валютного рынков), позиции ведет и транслирует биржа, а не QUIK.
Следовательно если биржа не транслирует нужную Вам цифру то и в QUIK ее нет.
 
Цитата
Sergey Gorokhov написал:
Цитата
Sergey написал:
так что это не то что нужно =(( мне нужна текущая цена текущей позиции.

Что Вы понимаете под "текущая цена текущей позиции"?
биржа транслирует то что Вам нужно, если да в каком параметре?
Следует понимать что на срочном рынке (в отличии от фондового и валютного рынков), позиции ведет и транслирует биржа, а не QUIK.
Следовательно если биржа не транслирует нужную Вам цифру то и в QUIK ее нет.
Окей тогда я проще опишу)
фьюч, я допустим, покупаю по 105, затем через минуту я покупаю по 107, средняя цена у меня будет 106, а перед этим я делал ещё 100 сделок, так вот в чём вопрос, как мне получить цифру 106, моей текущей позиции.
смысл в том, что я покупаю по маркету, и сразу же выставляю стоп, ну а стоп мне нужно выставить ОТ цены моей позиции +- прибыль - убыток
 
Sergey,
нам и так понятно что Вам нужно, нет смысла это повторять.

ответ Вам уже был дан и не один раз.
Цитата
Sergey Gorokhov написал:
Следовательно если биржа не транслирует нужную Вам цифру то и в QUIK ее нет.
 
Цитата
Sergey написал:
Окей тогда я проще опишу)фьюч, я допустим, покупаю по 105, затем через минуту я покупаю по 107, средняя цена у меня будет 106, а перед этим я делал ещё 100 сделок, так вот в чём вопрос, как мне получить цифру 106, моей текущей позиции.смысл в том, что я покупаю по маркету, и сразу же выставляю стоп, ну а стоп мне нужно выставить ОТ цены моей позиции +- прибыль - убыток
Получилось только способом перебора строк в таблице сделок (с последних) до совпадения с текущей позицией. Цены сделок пройденных строк суммируются (с минусом для шортов) и делится всё на текущий открытый объём (шортовая позиция с минусом).
За 100% точность вычисления не ручаюсь. Вопросы в точности возникают при перевороте позиции бОльшим объёмом. Тут нужно проверять. Ну и если сделок в trades уже нет, то ничего не получится.
Но это хоть что-то...

Код
SEC = "SiU9"

function GetPosePrice(sec)  -- Расчёт средней цены от конца таблицы сделок до совпадения суммарных объёмов с объёмом текущей позиции   (лонги - плюс; шорты - минус)
   local sumVol, sumPriceVol = 0, 0
   for i=getNumberOf("trades")-1,0,-1 do
      local dealTblLine = getItem("trades", i)
      if dealTblLine ~= nil and type(dealTblLine) == "table" then
         if dealTblLine.sec_code == sec then    --and dealTblLine.account == ACCOUNT then
            if Tradeflags2table(dealTblLine.flags).operation == "B" then           -- B
               sumPriceVol = sumPriceVol + dealTblLine.qty * dealTblLine.price
               sumVol = sumVol + dealTblLine.qty
            else                                                                   -- S
               sumPriceVol = sumPriceVol + dealTblLine.qty * dealTblLine.price * (-1)
               sumVol = sumVol + dealTblLine.qty * (-1)
            end
            -- message("qty = " .. tostring(dealTblLine.qty) .. ";  price = " .. tostring(dealTblLine.price) .. ";  sumVol = " .. tostring(sumVol) .. ";  sumPriceVol = " .. tostring(sumPriceVol), 1)
         end
            end
         if (sumVol == curQuikPoseVol) then  -- Если объём во всех осмотренных строках сделок равен нужному
            if tonumber(sumPriceVol) and ((tonumber(sumVol) or 0) ~= 0) then 
               -- message("Выход 1", 1)
               return sumPriceVol / sumVol
            else
               -- message("Выход 2", 1)
               return nil
            end   
         end
   end
   message("Недостаточно записей в таблице сделок для определения средней цены позиции", 1)
   return nil  -- Нужный объём по имеющимся записям сделок не подобран
end

function GetPoseVol()  -- Получение текущей позиции
   local i
   for i=getNumberOf("futures_client_holding")-1,0,-1 do
      if getItem("futures_client_holding",i)["sec_code"] == SEC then
         return tonumber(getItem("futures_client_holding",i)["totalnet"])
      end
   end
   return nil
end

function Tradeflags2table(flags)  -- Определение направления сделки
   -- operation("B" for Buy, "S" for Sell)
   local t={}
   local band=bit.band
   if band(flags, 4)~=0 then t.operation="S" else t.operation='B' end
   return t
end

function main()
   message("Скрипт запущен", 1)
   
   curQuikPoseVol = GetPoseVol()   
   if (tonumber(curQuikPoseVol) or 0) ~= 0 then
      curQuikPoseAvgPrice = GetPosePrice(SEC)
      if (tonumber(curQuikPoseAvgPrice) or 0 > 0) then
         message("Текущий объём = " .. tostring(curQuikPoseVol) .. ";  Средняя цена позиции =  " .. tostring(curQuikPoseAvgPrice), 1)
      end
   elseif curQuikPoseVol == 0 then   
      message("Открытая позиция отсутствует", 1)
   end
   
   message("Скрипт остановлен", 1)
end
Страницы: 1
Читают тему
Наверх