Как получить графу Прибыль/Убыток из getPortfolioInfoEx

Страницы: 1
RSS
Как получить графу Прибыль/Убыток из getPortfolioInfoEx, часть возвращаемой таблицы пустая, хотя в визуальной таблице QUIK данные есть.
 

Пытаюсь получить из таблицы "Клиентский портфель [SUR]" данные из графы << Плечо >> по строке Т2

Использую для этого код:

Код
local PortfolioInfoExTable=getPortfolioInfoEx (gFIRMID, gCLIENT_CODE, 2) -- https://luaq.ru/getPortfolioInfoEx.html
local zPortfolio_value=PortfolioInfoExTable.portfolio_value -- Стоимость портфеля
local zCash_leverage=PortfolioInfoExTable.cash_leverage -- Плечо
message(tostring(zPortfolio_value)..'\n\n'..tostring(zCash_leverage)) 

Но значение плеча zCash_leverage нулевое, хотя я вижу этот размер плеча явно в таблице "Клиентский портфель [SUR]" в строке Т2.

При этом мне успешно показывается стоимость портфеля - zPortfolio_value.

У меня такое ощущение, что в синтаксисе команды getPortfolioInfoEx должно быть ещё указание на валюту т.к. она указана в титуле окна.

На самом деле мне нужна графа <<Прибыль/Убытки>>, но для упрощения вопроса спрашиваю про графу <<Плечо>>.

Как мне получить размер Плеча или Прибыль/Убыток с начала дня по спотовому рынку?

 
awkozlov, добрый день.

Для getPortfolioInfoEx действительно можно указать необязательные аргументы "board_tag" (код позиции) и "currency" (валюта), формат вызова:

Код
TABLE getPortfolioInfoEx (STRING firm_id, STRING client_code, NUMBER limit_kind, [STRING board_tag, STRING currency])

(см. актуальную документацию по QLua)

Рекомендуем указать данные аргументы и проверить работу функции.

Чтобы получить значение "Прибыль/Убытки", необходимо обратиться к параметру profit_loss.
 
В общем это не работает.
При таком коде:
Код
local Tab=getPortfolioInfoEx (gFIRMID, gCLIENT_CODE, 2, gBOARD_TAG, gCURRENCY) -- https://luaq.ru/getPortfolioInfoEx.html
local Tab=getPortfolioInfoEx (gFIRMID, gCLIENT_CODE, 2) -- https://luaq.ru/getPortfolioInfoEx.html
local zPortfolio_value=Tab.portfolio_value -- Стоимость портфеля
local zCash_leverage=Tab.cash_leverage -- Плечо
local zProfit_loss=Tab.profit_loss -- Прибыль/Убытки
message('zPortfolio_value= '..tostring(zPortfolio_value)..'\nzCash_leverage= '..tostring(zCash_leverage)..'\nzProfit_loss= '..tostring(zProfit_loss))
Результат:
Код
zPortfolio_value= 45643.370000 -- это правильно
zCash_leverage= 0.000000
zProfit_loss= 0.000000
А при таком коде:
Код
local Tab=getPortfolioInfo (gFIRMID, gCLIENT_CODE) -- https://luaq.ru/getPortfolioInfo.html
local zLeverage=Tab.leverage -- Плечо
local zCur_leverage=Tab.cur_leverage -- Тек.плечо
message('zLeverage= '..tostring(zLeverage)..'\nzCur_leverage= '..tostring(zCur_leverage)) 
Результат:
Код
zLeverage= 101000.000000
zCur_leverage= 0.000000
Эта цифра котрую удалось выудить zLeverage
принимае у разных брокеров такие значения,
Код
1501,00 -- это наверно надо делить на 100000
101000,00 -- это наверно надо делить на 100000
2,00 -- а это не надо делить, ибо похоже на правду

т.е. каждый кто-во что горазд Смысл этого абсурда примерно ясен: бороться с ветрянными мельницами себе дороже.Вывел плечо в константу gLVG.
Я уже ржу над тем, что разработчики позиционируют QUIK как профессиональную систему, из профессионального там только ядро.
Вот теперь моя коллекция констант для настройки счета. Сразу с их жесткого прописывайте и не тратьте впустую время.
Код
 gFIRMID='';gACCOUNT='';gCLIENT_CODE='';gCLASSCODE='';gBOARD_TAG='';gCURRENCY='';gLIMIT_KIND=nil;gLVG=nil;
 
Цитата
awkozlov написал:
Пытаюсь получить из таблицы "Клиентский портфель [SUR]" данные из графы << Плечо >> по строке Т2  Использую для этого код:  
Код
   local  PortfolioInfoExTable =  getPortfolioInfo Ex (gFIRMID, gCLIENT_CODE,  2 )  -- https://luaq.ru/getPortfolioInfoEx.html 
 local  zPortfolio_value = PortfolioInfoExTable.portfolio_value  -- Стоимость портфеля 
 local  zCash_leverage = PortfolioInfoExTable.cash_leverage  -- Плечо 
 message (tostring(zPortfolio_value) .. '\n\n' .. tostring(zCash_leverage))   
   Но значение плеча zCash_leverage нулевое, хотя я вижу этот размер плеча   явно   в таблице "Клиентский портфель [SUR]" в строке Т2.  При этом мне успешно показывается стоимость портфеля - zPortfolio_value.  У меня такое ощущение, что в синтаксисе команды getPortfolioInfoEx должно быть ещё указание на валюту т.к. она указана в титуле окна.  На самом деле мне нужна графа <<Прибыль/Убытки>>, но для упрощения вопроса спрашиваю про графу <<Плечо>>.  Как мне получить размер Плеча или Прибыль/Убыток с начала дня по спотовому рынку?
В документации сказано:
Функция возвращает таблицу Lua с параметрами
таблицы «Клиентский портфель».

Дополнительно возвращаются следующие параметры:  

ПараметрТипОписание
1init_marginSTRINGЗначение начальной маржи. Заполняется для клиентов типа «МД»Нач.маржа
2min_marginSTRINGЗначение минимальной маржи. Заполняется для клиентов типа «МД»Мин.маржа
3corrected_marginSTRINGЗначение скорректированной маржи. Заполняется для клиентов типа «МД»Скор.маржа
4client_typeSTRINGТип клиентаТип клиента
5portfolio_valueSTRINGСтоимость портфеля. Для клиентов типа «МД» возвращается значение для строк с  максимальным сроком расчётов limit_kindСтоимость портфеля
6*start_limit_open_posSTRINGЛимит открытых позиций на начало дняЛимОткрПозНачДня
7*total_limit_open_posSTRINGЛимит открытых позицийЛимОткрПоз
8*limit_open_posSTRINGПланируемые чистые позицииПланЧистПоз
9*used_lim_open_posSTRINGТекущие чистые позицииТекЧистПоз
10*acc_var_marginSTRINGНакопленная вариационная маржаНакопВарМаржа
11*cl_var_marginSTRINGВариационная маржа по итогам промклирингаВарМаржаПромклир.
12*opt_liquid_costSTRINGЛиквидационная стоимость опционовЛиквСтоимОпционов
13*fut_assetSTRINGСумма оценки средств клиента на срочном рынкеСумАктивовНаСрчРынке
14*fut_total_assetSTRINGСумма оценки собственных средств клиента на фондовом и срочном рынкахПолнСтоимостьПортфеля
15*fut_debtSTRINGТекущая задолженность на срочном рынкеТекЗадолжНаСрчРынке
16*fut_rate_assetSTRINGДостаточность средствДост. Средств
17*fut_rate_asset_openSTRINGДостаточность средств (под открытые позиции)Дост. Средств (ОткрПоз)
18*fut_rate_goSTRINGКоэффициент ликвидности ГОКоэффЛикв ГО
19*planed_rate_goSTRINGОжидаемый коэффициент ликвидности ГООжид. КоэффЛикв ГО
20*cash_leverageSTRINGCash LeverageCash Leverage
21*fut_position_typeSTRINGТип позиции на срочном рынке. Возможные значения  
  • «0» – нет позиции;
  • «1» – фьючерсы;
  • «2» – опционы;
  • «3» – фьючерсы и опционы
ТипПозНаСрчРынке
22*fut_accured_intSTRINGНакопленный доход с учётом премии по опционам и биржевым сборамНакопДоход
23rcv1STRINGНорматив покрытия риска 1. Рассчитывается как разница параметров «Стоимость  портфеля» и «Начальная маржа». Для клиентов типа «МД» и «МД+»НПР1
24rcv2STRINGНорматив покрытия риска 2. Рассчитывается как разница параметров «Стоимость  портфеля» и «Минимальная маржа». Для клиентов типа «МД» и «МД+»НПР2

* - параметр заполняется для  клиентов с настроенной единой денежной позицией и для клиентов срочного рынка  без единой денежной позиции

т е параметры с 6 по 20 заполняются лишь для
клиентов с настроенной единой денежной позицией и для клиентов срочного рынка без единой денежной позиции
если Вы не такой клиент, то будет ноль.
 
опечатка:
т е параметры с 6 по 22
 
awkozlov, Ядро здесь тоже чуть ли не эталон непрофессионализма.  :smile:  Как, прочем, и у Вас: прописывать эти "константы" в коде означает требование менять код на каждый чих, а уж то, что в "константы" попали даже CLASSCODE и CURRENCY... мой скрипт прекрасно работает как с одним, так и с тысячей тикеров разных классов и разных валют на разных счетах разных клиентов и всё это без малейшего изменения кода. И уж собственную Прибыль/Убыток он знает в миллион раз лучще любого getPortfolioInfoEx.
 
Цитата
Владимир написал:
он знает в миллион раз лучще любого getPortfolioInfoEx
Я про это и говорю. Я тоже теперь считаю и храню данные за пределами QUIK.
QUIK - это только для открытия ордеров, остальную же функциональность надо затачивать за пределами QUIK.
Такое как хранение истории ордеров, расчет лотности, can_buy, плечо, информацию о портфеле: просто надо брать и смело переписывать getPortfolioInfoEx в свою фунцию.

Сейчас у меня констаны подгружаются в зависимости от того на каком компе (виртуальной машине) запущено.
Т.е. каждой машинке своего брокера, со своими причудливыми брокерскими настройками в константах. Очень удобно в моём случае.
Код
local function get_Comp_Name()
    os.execute('echo %computername% > C:\\Comp_Name.txt')
    local file=io.open('C:\\Comp_Name.txt','r')
    local Comp_Name=file:read("*all"):gsub("%s+","")
    file:close()
    message('[' .. Comp_Name .. ']')
    file=io.open('C:\\Comp_Name.txt','w')
    file:write(Comp_Name)
    file:close()
    return Comp_Name
end
 
awkozlov, Именно так. Портфель, кошелёк и даже свечи скрипт считает сам. На долю Квика остаётся getParamEx, sendTransaction, работа с файлами, да прорисовка таблиц.

Не знаю, что у Вас за константы подгружаются - у меня на каждого брокера свой Квик, а код совершенно одинаковый.
 
Цитата
Владимир написал:
а код совершенно одинаковый.
А как Вы определяете максимально возможный лот на спотовом рынке при условии, что can_buy для цены не у всех брокеров заполняется ?
 
awkozlov, А я вообще не определяю максимально возможный лот. На кой? На срочном рынке у меня всегда как раз МИНИМАЛЬНО возможный, а на фондовом определяется по желаемому размеру ставки которая указывается скрипту в конфигурационном файле для каждой валюты. А что он там can_buy, скрипт и сам знает лучше любого брокера - пусть заполняют что хотят - их расчёты нас не интересуют.
Страницы: 1
Читают тему
Наверх