はじめに
IB証券のAPIは機能が豊富で、そもそもIB証券の取扱商品やサービスが多岐にわたっているため、非常に複雑になっています。
私はIB証券のAPIを利用する際に、IB証券標準のライブラリではなく、ib_insyncというサードパーティーのライブラリを利用しています。IB証券標準のライブラリがうまくインストールできなかったのか正常に動作しなかったため、ib_insyncを利用しています。
ib_insyncは、基本的にIB証券標準のライブラリと機能は同じようです。
ib_insyncの機能を把握することで、シストレの要件を簡単に満たすことができるかもしれませんので、一度全てを網羅してみようと思います。
IB証券とib_insyncのサイトを並行して確認することをおすすめします。
IB証券のAPIのサイト
パッケージib_insyncのサイト
ib_insync.ib
ibモジュールのクラスは以下の一つのみになります。
class IB
ib_insync.ib.IB()
IBクラスは、注文、実行、ポジション、ティッカーなどの現在の状態への直接アクセスを提供します。
このクラスには、EClientのほとんどのリクエストメソッドがあり、名前とパラメーターは同じです(reqIdパラメーターは不要です)
結果を返すリクエストメソッドには2つのバージョンがあります。
Blocking
:完了するまでブロックし、結果を返します。現在の状態は、リクエストの進行中も更新され続けます。Asynchronous
:非同期で処理します。末尾に「Async
」とあるすべてのメソッドが対象です。
ib_insync.client
clientモジュールのクラスは以下の一つのみになります。
class Client
ib_insync.client.Client()
クライアントは完全に非同期であり、標準のEClientのネットワークコードを置き換える独自のイベント駆動型ネットワークコードを備えています。
*現在、仕様と動作の確認ができていません。しかし、今のところ本モジュールとクラスを利用する必要性が低いため調査は後回しにしようと思います。
ib_insync.order
orderモジュールには、注文に関する多数のクラスがあります。
しかし注文に関する機能の全てがorderモジュールにあるわけではなく、ibモジュールなどにもありますので注意してください。
注文に関するクラス一覧
ib_insync.order.Order()
注文を作成します。orderTypeの指定により成行や指値など様々な注文を作成することができます。
ib_insync.order.MarketOrder()
成行注文を作成します。
ib_insync.order.LimitOrder()
指値注文を作成します。
ib_insync.order.StopOrder()
損切注文(ストップロス)を作成します。
ib_insync.order.StopLimitOrder()
指値と損切注文(ストップロス)の両方を指定した注文を作成します。
ib_insync.order.BracketOrder()
新規注文と同時に、決済注文と損切注文(ストップロス)をセットした注文を作成します。
ib_insync.order.OrderComboLeg()
OrderComboLegは、スプレッド注文(コンボ注文)の注文を作成します。
参照ページ
注文に関しては、以下の本サイトのページを参照してください。
注文のステータスに関するクラス一覧
ib_insync.order.Trade()
Tradeは、注文、そのステータス、およびすべての約定を追跡します。
ib_insync.order.OrderStatus()
*現在、仕様と動作の確認ができていません。追って調べたいと思います。
ib_insync.order.OrderState()
*現在、仕様と動作の確認ができていません。追って調べたいと思います。
注文コンディションに関するクラス一覧
注文コンディションは、特定の基準を指定して注文をアクティブ化できます。
注文コンディションは、一つだけでなく、複数組み合わせて指定することができます。
ib_insync.order.OrderCondition()
恐らくですが、複数の注文コンディションに対応しているようです。
ib_insync.order.ExecutionCondition()
恐らくですが、特定のシンボルが約定されたら実行するというもの。
ib_insync.order.MarginCondition()
証拠金が指定のパーセントより上または下の場合に実行する。
ib_insync.order.TimeCondition()
指定の時間の前か後に実行する。
ib_insync.order.PriceCondition()
指定の金融商品の価格が、指定した価格より上か下の場合に実行する。指値と異なるのはトレードする銘柄の価格ではなく、他の銘柄の価格で実行を判断するというものです。
ib_insync.order.PercentChangeCondition()
前日の終値に対して指定したパーセントを上回るか下回った場合に実行する。
ib_insync.order.VolumeCondition()
指定した取引高(ボリューム)より上か下の場合に実行する。
サンプルシステム
なぜかibapi
が必要なようです。IB APIのバグらしいです。pip install ibapi
取引高(ボリューム)の指定
from ibapi.order_condition import PriceCondition contract1 = Stock('EXPE', 'SMART', 'USD') contract2 = Stock('SBUX', 'SMART', 'USD') ib.qualifyContracts(contract1) ib.qualifyContracts(contract2) limitOrder = LimitOrder( 'BUY', 1, 90, conditions = [ VolumeCondition(condType=6, isMore=True, volume=100, conId=contract2.conId, exch='SMART') ] ) ib.placeOrder(contract1, limitOrder) # Trade(contract=Stock(conId=98542021, symbol='EXPE', exchange='SMART', primaryExchange='NASDAQ', currency='USD', localSymbol='EXPE', tradingClass='NMS'), order=LimitOrder(orderId=68, clientId=2002, action='BUY', totalQuantity=1, lmtPrice=90, conditions=[VolumeCondition(condType=6, conjunction='a', isMore=True, volume=100, conId=274105, exch='SMART')]), orderStatus=OrderStatus(orderId=68, status='PendingSubmit', filled=0, remaining=0, avgFillPrice=0.0, permId=0, parentId=0, lastFillPrice=0.0, clientId=0, whyHeld='', mktCapPrice=0.0), fills=[], log=[TradeLogEntry(time=datetime.datetime(2020, 9, 13, 5, 37, 55, 101610, tzinfo=datetime.timezone.utc), status='PendingSubmit', message='')])
特定銘柄の価格指定
価格指定のところでエラーがでます。TypeError: Object Default price of 274105 on SMART is >= 85 is not a dataclass
from ibapi.order_condition import PriceCondition contract1 = Stock('EXPE', 'SMART', 'USD') contract2 = Stock('SBUX', 'SMART', 'USD') ib.qualifyContracts(contract1) ib.qualifyContracts(contract2) limitOrder = LimitOrder( 'BUY', 1, 90, conditions = [PriceCondition(0, contract2.conId, exch= "SMART", isMore= True, price = 85)] ) ib.placeOrder(contract, limitOrder)
以下のページでは動作しているようなことを書いていますので参考にしてください。
私はギブアップです。まぁ今のところ私にとって必要性もありませんので。
参照ページ
注文コンディションに関しては以下のIB証券のサイトを参照してください。
ib_insync.contract
contractモジュールのクラスは以下の一つのみになります。
class Contract
ib_insync.contract.Contract()
Contractクラスは、Interactive Brokersが使用する金融商品のタイプを設定します。
参照ページ
コンストラクタ(商品情報)に関しては、本サイトの以下のページを参照してください。
ib_insync.ticker
tickerモジュールのクラスは以下の一つのみになります。
class Ticker
ib_insync.ticker.Ticker()
Tickerクラスは、リアルタイムの市場の価格データへアクセスします。
参照ページ
ティックデータ(リアルタイムデータ)に関しては、本サイトの以下のページを参照してください。
ib_insync.objects
objectsモジュールは、新しい各種インスタンスなどを作成します。
クラスや関数の数が多いため別途紹介します。
ib_insync.util
utillモジュールは、役に立つ各種機能を提供します。
クラスや関数の数が多いため別途紹介します。
ib_insync.flexreport
flexreportモジュールのクラスは以下の一つのみになります。
class FlexReport
ib_insync.flexreport.FlexReport()
Flex Webサービスを介してIBアカウントの明細をダウンロードして解析します。
ib_insync.ibcontroller
ibcontrollerモジュールのクラスは以下の3つになります。
class IBC
ib_insync.ibcontroller.IBC()
IBCを使用したTWS /Gatewayの開始と停止のプログラムによる制御します。
class IBController
ib_insync.ibcontroller.IBController()
IBControllerを使用したTWS /Gatewayの開始と停止のプログラムによる制御します。
class Watchdog
ib_insync.ibcontroller.Watchdog()
TWSまたはゲートウェイアプリを起動し、接続して監視し、それが稼働し続けるようにします。これは、(再)接続時に自身を適切に初期化するイベント駆動型アプリケーションで使用することを目的としています。
コメント