前提
このページでは接続後のみのサンプルを記載しています。接続方法は以下を参照してください。
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=[]
),

コメント