SmartQuant Discussion

Automated Quantitative Strategy Development, SmartQuant Product Discussion and Technical Support Forums
It is currently Mon Sep 24, 2018 7:23 am

All times are UTC + 3 hours




Post new topic Reply to topic  [ 6 posts ] 
Author Message
PostPosted: Tue Mar 26, 2013 10:08 pm 
Offline

Joined: Tue May 01, 2012 6:46 pm
Posts: 97
Добрый день,

столкнулся с проблемой - не могу получить доступ к позициям, которые в данный момент открыты у брокера
помогите пожалуйста разобраться.
- провайдер = 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 тоже нету позиции


Top
 Profile  
 
PostPosted: Wed Mar 27, 2013 11:04 am 
Offline
Site Admin

Joined: Thu Jul 17, 2003 10:39 am
Posts: 1478
Здравствуйте.

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

_________________
SmartQuant Development Team


Top
 Profile  
 
PostPosted: Wed Mar 27, 2013 12:45 pm 
Offline

Joined: Tue May 01, 2012 6:46 pm
Posts: 97
спасибо за ответ. указал мониторед аккаунт - действительно заработало.

но это не решает мою изначальную проблему изза которой я все это затеял.
смотрите:
после некоторых манипуляций с позицией (открытие, частичных сбросок, добавок и т. д.) 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 аккаунт на нужный мне - для получения позиции по каждому из сабсчетов?
или может вы знаете более красивый способ?


Top
 Profile  
 
PostPosted: Wed Mar 27, 2013 1:40 pm 
Offline
Site Admin

Joined: Thu Jul 17, 2003 10:39 am
Posts: 1478
Ситуация понятна...
Можно на ходу менять настройки провайдеров:
Code:
ProviderManager.Providers["IB"].Properties["MonitoredAccount"].Value = "аккаунт";

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

_________________
SmartQuant Development Team


Top
 Profile  
 
PostPosted: Wed Mar 27, 2013 1:55 pm 
Offline

Joined: Tue May 01, 2012 6:46 pm
Posts: 97
Alexei Kurov wrote:
Ситуация понятна...
Можно на ходу менять настройки провайдеров:
Code:
ProviderManager.Providers["IB"].Properties["MonitoredAccount"].Value = "аккаунт";

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

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

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

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


Top
 Profile  
 
PostPosted: Wed Mar 27, 2013 3:40 pm 
Offline
Site Admin

Joined: Thu Jul 17, 2003 10:39 am
Posts: 1478
К сожалению, точно не определить, что айби уже переслал все данные. Из личных наблюдений, секунды вполне достаточно, но это без гарантии сами понимаете. К тому же, ожидание ввиде паузы не надо делать в каком-либо колбеке стратегии, так как айби шлет евент за евентом последовательно и пока Вы не "отпустите" колбек, другой евент не придет.

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

_________________
SmartQuant Development Team


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 6 posts ] 

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group