前提
このページでは接続後のみのサンプルを記載しています。接続方法は以下を参照してください。
IB証券 APIの接続方法
注文方法
IB証券での注文方法は、以下を参照してください。
IB証券 API 注文、決済
未処理の注文を取得
注文数が多いなどの理由により。注文数のすべてが約定しないことがあります。
ib.openOrders()を使用すると、すべてが約定していない注文を取得することができます。
ib.openOrders() # [MarketOrder(orderId=212, clientId=9998, permId=911536690, action='SELL', totalQuantity=10.0, lmtPrice=0.0, auxPrice=0.0, tif='DAY', ocaType=3, trailStopPrice=321.25, openClose='', eTradeOnly=False, firmQuoteOnly=False, volatilityType=0, deltaNeutralOrderType='None', referencePriceType=0, account='', clearingIntent='IB', orderComboLegs=[], adjustedOrderType='None', conditions=[], softDollarTier=SoftDollarTier(), cashQty=0.0, dontUseAutoPriceForHedge=True)]
- totalQuantity:すべての注文数
- ocaType:たぶんですが、未約定の注文数
過去の注文の実行を取得
接続しているプログラム(セッション)からの当日の(午前0時以降の)の注文を取得することができます。
すべての注文を取得
ib.trades()
取得できる情報は以下です。
- contract:商品情報
- order:注文情報
- orderStatus:注文状況のステータス
- fills:確定した注文情報
- contract:商品情報
- execution:実行情報
- commissionReport:手数料情報
- time:時間
- log:ログ
for details in ib.trades(): print(details) # Trade(contract=Bag(conId=28812380, symbol='ES', right='?', exchange='SMART', currency='USD', localSymbol='ES', tradingClass='COMB', comboLegsDescrip='424630588|-1|GLOBEX,438927026|-1|GLOBEX', comboLegs=[ComboLeg(conId=424630588, ratio=1, action='SELL', exchange='GLOBEX'), ComboLeg(conId=438927026, ratio=1, action='SELL', exchange='GLOBEX')]), order=Order(permId=944265033, action='SELL', orderType='MKT', lmtPrice=-27.0, auxPrice=0.0, tif='DAY', ocaType=3, orderRef='ActivityMonitor', trailStopPrice=-28.0, openClose='', volatilityType=0, deltaNeutralOrderType='None', referencePriceType=0, account='', clearingIntent='IB', smartComboRoutingParams=[TagValue(tag='NonGuaranteed', value='0')], orderComboLegs=[], conditions=[], softDollarTier=SoftDollarTier(), cashQty=0.0, dontUseAutoPriceForHedge=True, filledQuantity=1.0, refFuturesConId=2147483647, shareholder='インサイダーまたは主要株主ではありません。', parentPermId=9223372036854775807), orderStatus=OrderStatus(status='Filled'), fills=[Fill(contract=Bag(conId=28812380, symbol='ES', exchange='GLOBEX', currency='USD', localSymbol='ES', tradingClass='COMB'), execution=Execution(execId='0000e1a7.5f4831c2.01.01', time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc), acctNumber='', exchange='GLOBEX', side='SLD', shares=1.0, price=-27.0, permId=944265033, cumQty=1.0, avgPrice=-27.0, orderRef='ActivityMonitor', lastLiquidity=1), commissionReport=CommissionReport(), time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc)), Fill(contract=FuturesOption(conId=438927026, symbol='ES', lastTradeDateOrContractMonth='20200918', strike=3670.0, right='C', multiplier='50', exchange='GLOBEX', currency='USD', localSymbol='ESU0 C3670', tradingClass='ES'), execution=Execution(execId='0000e1a7.5f4831c2.02.01', time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc), acctNumber='', exchange='GLOBEX', side='BOT', shares=1.0, price=5.75, permId=944265033, cumQty=1.0, avgPrice=5.75, orderRef='ActivityMonitor', lastLiquidity=1), commissionReport=CommissionReport(execId='0000e1a7.5f4831c2.02.01', commission=1.22, currency='USD', realizedPNL=-27.44), time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc)), Fill(contract=FuturesOption(conId=424630588, symbol='ES', lastTradeDateOrContractMonth='20200918', strike=3310.0, right='P', multiplier='50', exchange='GLOBEX', currency='USD', localSymbol='ESU0 P3310', tradingClass='ES'), execution=Execution(execId='0000e1a7.5f4831c2.03.01', time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc), acctNumber='', exchange='GLOBEX', side='BOT', shares=1.0, price=21.25, permId=944265033, cumQty=1.0, avgPrice=21.25, orderRef='ActivityMonitor', lastLiquidity=1), commissionReport=CommissionReport(execId='0000e1a7.5f4831c2.03.01', commission=1.22, currency='USD', realizedPNL=-39.94), time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc))], log=[TradeLogEntry(time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc), status='Filled', message='Fill 1.0@-27.0'), TradeLogEntry(time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc), status='Filled', message='Fill 1.0@5.75'), TradeLogEntry(time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc), status='Filled', message='Fill 1.0@21.25')])
少し判別しくいので、以下にまとめました。
Trade( contract=Bag( conId=28812380, symbol='ES', right='?', exchange='SMART', currency='USD', localSymbol='ES', tradingClass='COMB', comboLegsDescrip='424630588|-1|GLOBEX,438927026|-1|GLOBEX', comboLegs=[ ComboLeg(conId=424630588, ratio=1, action='SELL', exchange='GLOBEX'), ComboLeg(conId=438927026, ratio=1, action='SELL', exchange='GLOBEX') ]), order=Order( permId=944265033, action='SELL', orderType='MKT', lmtPrice=-27.0, auxPrice=0.0, tif='DAY', ocaType=3, orderRef='ActivityMonitor', trailStopPrice=-28.0, openClose='', volatilityType=0, deltaNeutralOrderType='None', referencePriceType=0, account='', clearingIntent='IB', smartComboRoutingParams=[TagValue(tag='NonGuaranteed', value='0')], orderComboLegs=[], conditions=[], softDollarTier=SoftDollarTier(), cashQty=0.0, dontUseAutoPriceForHedge=True, filledQuantity=1.0, refFuturesConId=2147483647, shareholder='インサイダーまたは主要株主ではありません。', parentPermId=9223372036854775807), orderStatus=OrderStatus(status='Filled'), fills=[ Fill( contract=Bag( conId=28812380, symbol='ES', exchange='GLOBEX', currency='USD', localSymbol='ES', tradingClass='COMB' ), execution=Execution( execId='0000e1a7.5f4831c2.01.01', time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc), acctNumber='', exchange='GLOBEX', side='SLD', shares=1.0, price=-27.0, permId=944265033, cumQty=1.0, avgPrice=-27.0, orderRef='ActivityMonitor', lastLiquidity=1 ), commissionReport=CommissionReport(), time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc)), Fill( contract=FuturesOption( conId=438927026, symbol='ES', lastTradeDateOrContractMonth='20200918', strike=3670.0, right='C', multiplier='50', exchange='GLOBEX', currency='USD', localSymbol='ESU0 C3670', tradingClass='ES' ), execution=Execution(execId='0000e1a7.5f4831c2.02.01', time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc), acctNumber='', exchange='GLOBEX', side='BOT', shares=1.0, price=5.75, permId=944265033, cumQty=1.0, avgPrice=5.75, orderRef='ActivityMonitor', lastLiquidity=1), commissionReport=CommissionReport(execId='0000e1a7.5f4831c2.02.01', commission=1.22, currency='USD', realizedPNL=-27.44), time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc)), Fill( contract=FuturesOption(conId=424630588, symbol='ES', lastTradeDateOrContractMonth='20200918', strike=3310.0, right='P', multiplier='50', exchange='GLOBEX', currency='USD', localSymbol='ESU0 P3310', tradingClass='ES'), execution=Execution(execId='0000e1a7.5f4831c2.03.01', time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc), acctNumber='', exchange='GLOBEX', side='BOT', shares=1.0, price=21.25, permId=944265033, cumQty=1.0, avgPrice=21.25, orderRef='ActivityMonitor', lastLiquidity=1), commissionReport=CommissionReport(execId='0000e1a7.5f4831c2.03.01', commission=1.22, currency='USD', realizedPNL=-39.94), time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc))], log=[ TradeLogEntry( time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc), status='Filled', message='Fill 1.0@-27.0'), TradeLogEntry( time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc), status='Filled', message='Fill 1.0@5.75'), TradeLogEntry( time=datetime.datetime(2020, 8, 27, 11, 57, 14, tzinfo=datetime.timezone.utc), status='Filled', message='Fill 1.0@21.25') ] )
すべての確定した注文を取得
ib.fills()
または ib.reqExecutions()
取得できる情報は以下です。ib.trades
のfills
の部分の情報です。
- contract:商品情報
- execution:実行情報
- commissionReport:手数料情報
*以下のサンプルは、なぜか空になっていますが、以下のように取得できることがあります。commissionReport=CommissionReport(execId='0000e1a7.5f3b1178.01.01', commission=1.9, currency='USD'),
- time:時間
import pprint pprint.pprint(ib.reqExecutions()) # [ # Fill(contract=Future(conId=383974345, symbol='MES', lastTradeDateOrContractMonth='20201218', multiplier='5', exchange='GLOBEX', currency='USD', localSymbol='MESZ0', tradingClass='MES'), execution=Execution(execId='0000e1a7.5f3b114e.01.01', time=datetime.datetime(2020, 8, 17, 15, 13, 8, tzinfo=datetime.timezone.utc), acctNumber='', exchange='GLOBEX', side='BOT', shares=1.0, price=3371.0, permId=1819596021, clientId=9998, orderId=214, cumQty=1.0, avgPrice=3371.0, lastLiquidity=1), commissionReport=CommissionReport(), time=datetime.datetime(2020, 8, 17, 15, 13, 8, tzinfo=datetime.timezone.utc)), # Fill(contract=FuturesOption(conId=429454814, symbol='ES', lastTradeDateOrContractMonth='20201218', strike=3370.0, right='C', multiplier='50', exchange='GLOBEX', currency='USD', localSymbol='ESZ0 C3370', tradingClass='ES'), execution=Execution(execId='0000e1a7.5f3b114f.01.01', time=datetime.datetime(2020, 8, 17, 15, 13, 8, tzinfo=datetime.timezone.utc), acctNumber='', exchange='GLOBEX', side='SLD', shares=10.0, price=174.75, permId=1819596022, clientId=9998, orderId=216, cumQty=10.0, avgPrice=174.75, lastLiquidity=1), commissionReport=CommissionReport(), time=datetime.datetime(2020, 8, 17, 15, 13, 8, tzinfo=datetime.timezone.utc)), # ・・・ # ]
少し判別しくいので、1つ目の注文を以下にまとめました。
Fill( contract=Future( conId=383974345, symbol='MES', lastTradeDateOrContractMonth='20201218', multiplier='5', exchange='GLOBEX', currency='USD', localSymbol='MESZ0', tradingClass='MES' ), execution=Execution( execId='0000e1a7.5f3b114e.01.01', time=datetime.datetime(2020, 8, 17, 15, 13, 8, tzinfo=datetime.timezone.utc), acctNumber='', exchange='GLOBEX', side='BOT', shares=1.0, price=3371.0, permId=1819596021, clientId=9998, orderId=214, cumQty=1.0, avgPrice=3371.0, lastLiquidity=1 ), commissionReport=CommissionReport( ), time=datetime.datetime(2020, 8, 17, 15, 13, 8, tzinfo=datetime.timezone.utc) ),
実行情報(execution)のみを取得
このすべての実行のリスト。ib.fills
のexecution
の部分の情報です。
import pprint pprint.pprint(ib.executions()) # [ # Execution(execId='0000e1a7.5f39b29b.01.01', time=datetime.datetime(2020, 8, 16, 11, 17, 54, tzinfo=datetime.timezone.utc), acctNumber='', exchange='GLOBEX', side='SLD', shares=6.0, price=336.75, permId=553069979, clientId=9998, orderId=168, cumQty=6.0, avgPrice=336.75, lastLiquidity=1), # Execution(execId='0000e1a7.5f39b29c.01.01', time=datetime.datetime(2020, 8, 16, 11, 17, 54, tzinfo=datetime.timezone.utc), acctNumber='', exchange='GLOBEX', side='BOT', shares=1.0, price=11161.5, permId=553069980, clientId=9998, orderId=170, cumQty=1.0, avgPrice=11161.5, lastLiquidity=1), # ・・・ # ]
少し判別しくいので、1つ目の注文を以下にまとめました。
Execution( execId='0000e1a7.5f39b29b.01.01', time=datetime.datetime(2020, 8, 16, 11, 17, 54, tzinfo=datetime.timezone.utc), acctNumber='', exchange='GLOBEX', side='SLD', shares=6.0, price=336.75, permId=553069979, clientId=9998, orderId=168, cumQty=6.0, avgPrice=336.75, lastLiquidity=1 ),
他のセッションの確定した注文情報を取得
ib.trades
と似ていますが、他のプログラムで接続している(セッション)の情報を取得することができます。
ステータスが’Filled
‘となっていても、なぜかfills
とlog
は空になっていました。
ib.reqCompletedOrders(clientId)
- clientId:API接続時に指定しているクライアントIDになります。他のセッションもOKです。
ib.reqCompletedOrders(1001) # [Trade(contract=Future(conId=383974345, symbol='MES', lastTradeDateOrContractMonth='20201218', right='?', multiplier='5', exchange='GLOBEX', currency='USD', localSymbol='MESZ0', tradingClass='MES', comboLegs=[]), order=Order(permId=1819596021, action='BUY', orderType='MKT', lmtPrice=0.0, auxPrice=0.0, tif='DAY', ocaType=3, rule80A='0', openClose='', volatilityType=0, deltaNeutralOrderType='None', referencePriceType=0, account='', clearingIntent='IB', orderComboLegs=[], conditions=[], softDollarTier=SoftDollarTier(), cashQty=0.0, dontUseAutoPriceForHedge=True, filledQuantity=1.0, refFuturesConId=2147483647, shareholder='インサイダーまたは主要株主ではありません。'), orderStatus=OrderStatus(status='Filled'), fills=[], log=[]), # Trade(contract=Future(conId=383974419, symbol='NQ', lastTradeDateOrContractMonth='20201218', right='?', multiplier='20', exchange='GLOBEX', currency='USD', localSymbol='NQZ0', tradingClass='NQ', comboLegs=[]), order=Order(permId=1819596277, action='SELL', orderType='MKT', lmtPrice=0.0, auxPrice=0.0, tif='DAY', ocaType=3, rule80A='0', openClose='', volatilityType=0, deltaNeutralOrderType='None', referencePriceType=0, account='', clearingIntent='IB', orderComboLegs=[], conditions=[], softDollarTier=SoftDollarTier(), cashQty=0.0, dontUseAutoPriceForHedge=True, filledQuantity=1.0, refFuturesConId=2147483647, shareholder='インサイダーまたは主要株主ではありません。'), orderStatus=OrderStatus(status='Filled'), fills=[], log=[]), # ・・・ # ]
上記ですと見にくいので、1つ目の注文を以下にまとめました。
Trade( contract=Future( conId=383974345, symbol='MES', lastTradeDateOrContractMonth='20201218', right='?', multiplier='5', exchange='GLOBEX', currency='USD', localSymbol='MESZ0', tradingClass='MES', comboLegs=[] ), order=Order( permId=1819596021, action='BUY', orderType='MKT', lmtPrice=0.0, auxPrice=0.0, tif='DAY', ocaType=3, rule80A='0', openClose='', volatilityType=0, deltaNeutralOrderType='None', referencePriceType=0, account='', clearingIntent='IB', orderComboLegs=[], conditions=[], softDollarTier=SoftDollarTier(), cashQty=0.0, dontUseAutoPriceForHedge=True, filledQuantity=1.0, refFuturesConId=2147483647, shareholder='インサイダーまたは主要株主ではありません。' ), orderStatus=OrderStatus( status='Filled' ), fills=[], log=[] ),
コメント