IB証券 API 建玉の取得

スポンサーリンク
スポンサーリンク

前提

このページでは接続後のみのサンプルを記載しています。接続方法は以下を参照してください。
IB証券 APIの接続方法

取得

ib.positions()のみで取得できます。

ib.positions()

# [Position(account='XXX', contract=Stock(conId=393728477, symbol='TVIX', exchange='NASDAQ', currency='USD', localSymbol='TVIX', tradingClass='NMS'), position=-350.0, avgCost=56.3837137),
#  Position(account='XXX', contract=CFD(conId=111987469, symbol='IBJP225', currency='JPY', localSymbol='IBJP225', tradingClass='IBJP225'), position=500.0, avgCost=20641.823976),
#  Position(account='XXX', contract=Option(conId=349549716, symbol='VXX', lastTradeDateOrContractMonth='20210115', strike=20.0, right='C', multiplier='100', currency='USD', localSymbol='VXX   210115C00020000', tradingClass='VXX'), position=28.0, avgCost=400.7438),
#  Position(account='XXX', contract=Forex('EURUSD', conId=12087792, localSymbol='EUR.USD', tradingClass='EUR.USD'), position=-300.0, avgCost=1.06905665)]

建玉の内容の解析?

上記のように取得できたデータ形式は、Pythonではすんなりと取得ができません。util.dfを使ってみました。

util.df(ib.positions())

少し分かりやすくなりました。4種類のポジションがあり、それぞれの建玉数と平均価格が表示されています。(オプションだけデスクトップTWSの価格と異なりますが。。。)
でも、欲しい情報がcontractに詰め込まれてしまいます。ちょっと難しです。

結局は何の情報が欲しいかということになりますが。

結論

少し強引ですが、以下で必要な内容を取得していると思います。

for details in ib.positions():
    text = str(details.contract).split('(')
    print("種類:{} シンボル:{} 通貨:{} 数量:{} 平均価格:{}".format(text[0], details.contract.symbol, details.contract.currency, details.position, details.avgCost))

# 種類:Stock シンボル:TVIX 通貨:USD 数量:-350.0 平均価格:56.3837137
# 種類:CFD シンボル:IBJP225 通貨:JPY 数量:500.0 平均価格:20641.823976
# 種類:Option シンボル:VXX 通貨:USD 数量:28.0 平均価格:400.7438
# 種類:Forex シンボル:EUR 通貨:USD 数量:-300.0 平均価格:1.06905665

EUR/USDはシンボルが「EUR」通貨が「USD」となっていたりと注意が必要ですね。

EUR/USDは売り100枚を3回していたのですが、このように個別に情報を取得できません。また個別に取得ができないためか、注文日などの日時に関する情報もありません。

コメント

タイトルとURLをコピーしました