IB証券 API 注文情報の取得

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

前提

このページでは接続後のみのサンプルを記載しています。接続方法は以下を参照してください。
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.tradesfillsの部分の情報です。

  • 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.fillsexecutionの部分の情報です。

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‘となっていても、なぜかfillslogは空になっていました。

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=[]
),

 

コメント

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