SmartQuant Discussion
http://www.smartquant.com/forums/

Доступ к позициям брокера (IB)
http://www.smartquant.com/forums/viewtopic.php?f=65&t=10484
Page 1 of 1

Author:  gonchis [ Tue Mar 26, 2013 10:08 pm ]
Post subject:  Доступ к позициям брокера (IB)

Добрый день,

столкнулся с проблемой - не могу получить доступ к позициям, которые в данный момент открыты у брокера
помогите пожалуйста разобраться.
- провайдер = IB
- использую эдвайзер аккаунт (основной эдвайзер + 2 дочерних аккаунта)
- есть открытая позиция (на каждом из двух дочерних аккаунтах открыта своя часть позиции)

Code:
         BrokerInfo info = DataManager.GetBrokerInfo();
         foreach(BrokerAccount acc in info.Accounts)
         {
            Console.WriteLine(acc.Name + " BP=" + acc.BuyingPower + " Positions=" + acc.Positions.Count);
         }


в аутпут выводит:
DF151804 BP=0 Positions=0
DU151805 BP=0 Positions=0
DU151806 BP=0 Positions=0
BP=0 Positions=0

почему выводит 4й аккаунт с пустым именем - незнаю, наверное это не играет никакой роли в данном случае
главная проблема в том, что я не вижу позиции ни на одном из аккаунтов. Баинпаэур, кстати, тоже неверно отображается

не вижу я позиции в обоих случаях:
- если позиция открыта из стратегии
- если позиция открыая руками из tws

да, еще: в ГУИ, в окне Broker Info тоже нету позиции

Author:  Alexei Kurov [ Wed Mar 27, 2013 11:04 am ]
Post subject:  Re: Доступ к позициям брокера (IB)

Здравствуйте.

У IB в API есть ограничение, которое позволяет мониторить только один аккаунт единовременно.
Какой именно, выбирать Вам - для этого есть настройка плагина MonitoredAccount.

Author:  gonchis [ Wed Mar 27, 2013 12:45 pm ]
Post subject:  Re: Доступ к позициям брокера (IB)

спасибо за ответ. указал мониторед аккаунт - действительно заработало.

но это не решает мою изначальную проблему изза которой я все это затеял.
смотрите:
после некоторых манипуляций с позицией (открытие, частичных сбросок, добавок и т. д.) IB не совсем корректно распределяет кол-во акций между счетами - это вполне логично т.к. при каждой операции (добавки/сброски) он округляет кол-во акций соответсвенно указанному allocation profile и в результате, после нескольких операций на счетах распределяются акции с небольшой погрешностью - обычно 1-а акция
т.е. допустим, если у меня allocation profile процентный (60% на 40%) и позиция у меня после многочисленных операций = 100 акций, то вполне возможно что на двух сабсчетах будет 59 и 41 акция соотвественно.
эта ситуация довольно распространенная, вот обсуждалась на форуме: viewtopic.php?f=60&t=6316&hilit=advisor+close+position

к этому моменту особо большой проблемы нету (одна акция особой погоды не играет), но большая проблема возникает когда я хочу закрыть позицию: у меня общая поза = 100 шерз (допустим лонг), функция ClosePosition продает 100 шерз. согласно моему allocation profile это = продаже 60 шерз на одном счете и продаже 40 на другом.

в итоге после ClosePosition у меня остатеся 1 акция в шорт по одному сабсчету и 1 акция в лонг по второму.
эта ситуация встречается _довольно часто_ и ее необходимо решить.

У меня был план такой: Переписать функцию ClosePosition для эдвайзер аккаунтов так чтобы она смотрела сколько акций реально на каждом подсчете и потом уже отправляла продажу корректное кол-во акций на каждый счет отдельно.

как мне можно решить эту проблему? могу ли я както в динамике менять Monitoring аккаунт на нужный мне - для получения позиции по каждому из сабсчетов?
или может вы знаете более красивый способ?

Author:  Alexei Kurov [ Wed Mar 27, 2013 1:40 pm ]
Post subject:  Re: Доступ к позициям брокера (IB)

Ситуация понятна...
Можно на ходу менять настройки провайдеров:
Code:
ProviderManager.Providers["IB"].Properties["MonitoredAccount"].Value = "аккаунт";

только имейте ввиду, что результат будет не сразу - айби получит запрос на мониторинг
нового аккаунта и начнет слать данные, но когда он закончит их слать - неизвестно. То есть, менять аккаунт
надо заранее.
А на самом деле, мне кажется, что для приведенного Вами примера есть более простое решение - Вы мониторите один
из аккаунтов, общую позицию Вы знаете, узнать сколько реально на втором аккаунте - простая арифметика.

Author:  gonchis [ Wed Mar 27, 2013 1:55 pm ]
Post subject:  Re: Доступ к позициям брокера (IB)

Alexei Kurov wrote:
Ситуация понятна...
Можно на ходу менять настройки провайдеров:
Code:
ProviderManager.Providers["IB"].Properties["MonitoredAccount"].Value = "аккаунт";

только имейте ввиду, что результат будет не сразу - айби получит запрос на мониторинг
нового аккаунта и начнет слать данные, но когда он закончит их слать - неизвестно. То есть, менять аккаунт
надо заранее.

а как узнать что уже "пора" считывать данные о позиции полсе изменения мониторед аккаунта?

Quote:
А на самом деле, мне кажется, что для приведенного Вами примера есть более простое решение - Вы мониторите один
из аккаунтов, общую позицию Вы знаете, узнать сколько реально на втором аккаунте - простая арифметика.

интересное решение, но будет рабоать только если число дочерних аккаунтов = 2. был бы вам очень признателен за идею решение для 3 и более аккаунтов =)

Author:  Alexei Kurov [ Wed Mar 27, 2013 3:40 pm ]
Post subject:  Re: Доступ к позициям брокера (IB)

К сожалению, точно не определить, что айби уже переслал все данные. Из личных наблюдений, секунды вполне достаточно, но это без гарантии сами понимаете. К тому же, ожидание ввиде паузы не надо делать в каком-либо колбеке стратегии, так как айби шлет евент за евентом последовательно и пока Вы не "отпустите" колбек, другой евент не придет.

Если у меня появятся варианты для 3-х и более аккаунтов, то неприменно поделюсь.
Просто вариант с 2-умя был довольно очевиден.

Page 1 of 1 All times are UTC + 3 hours
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/