読者です 読者をやめる 読者になる 読者になる

コバのシステムトレード構築日記(IB証券、トレステ、Dukascopy他)

IB証券/DukascopyとのAPI接続ナレッジや、トレステなど

IB証券:API接続検証、その6「履歴データ取得前の留意点」

Forex6通貨ペア、東証上場約3,900銘柄の 30sec/1min/2min/3min/5min/10min/20min/30min/1h/4h/1day/1weekの12種足を取得開始して2週間ほど経過しました。(4時間足は東証株価には不要だろうと除外)

いくつか経験からの留意点があるので書き留めておきます。

 

1:Exchange毎にレスポンスのキャップがある模様

 92通貨ペア全てだと年単位で時間がかかりそうだとは以前書きましたが、IB証券側のサーバレスポンスが遅いので覚悟が必要です。

 接続時に contractオブジェクトを生成してプロパティ値として Exchageを指定しますが、そのExchange毎に処理能力がアカウント毎に決まっているようなレスポンスを感じます。IBGatewayにソケットを開いて Forexの Exchange=IDEALPROを指定して例えばUSDJPY履歴データの取得を始めると打てば響く程度のレスポンスでドンドンデータが取れます。しかし新しくソケットを開いて EURUSD、EURJPY、GBPJPYと通貨を増やして並行処理させると増やした通貨ペアに比例するレスポンスの低下が起きます。厳密にははかっていませんが、サーバー側の付加を考えると致し方ないとは思います。これは Exchange=TSEJでも同じです。

 したがって、取得したい銘柄や通貨ペアなどに優先的に指定出来るようなプログラムのパラメータが必要かと思います。もしくは Exchangeが異なるデータ取得プログラムを複数早く揃えるのがよろしいかと思います。まだ IDEALPROと TSEJ用しか作っていないです。パターンは同じなのであとは課金とやる気の問題。

 東証約3,900銘柄の数年分の履歴取得に計算したくないほど膨大な時間がかかりそうなので、IB証券さんにはなんとかして欲しいなあとは思います。

 

2:Symbol(銘柄/通貨ペア)毎にレスポンスに微少な差がある。

 現在、6通貨 USDJPY, EURUSD, EURJPY, GBPJPY, GBPUSD, AUDJPYの履歴を取得中ですが、人気?の通貨単位が入ったペアは若干のレスポンスの遅さがあります。ざっくり5%~8%ぐらいと推測。上記6通貨ペアを1年分12種足取得するプログラムを同時に走らせると、EURUSDが一番遅く、次いでUSDJPY, EURJPY, GBPUSD, GBPJPYと続いて一番速いのが AUDJPYという傾向があります。サーバーの負荷が低そうな、不人気そうな通貨ほど速くデータが取得出来る可能性はあるかもしれません。数パーセントの誤差が履歴取得プログラムの制御に影響しそうであれば考慮しても良いかもしれません。

 あと2週間ほどで6通貨の履歴取得は終わりそうなので、その後のマイナー通貨ペアのダウンロードに取りかかればもう少し正確な傾向が判るかもしれません。

 

3:東証上場廃止銘柄の履歴データ

 過去に上場廃止になった銘柄のデータは query not foundで取得出来ません。あとはそのタイミングで何時からなのですが、2017/2/6に上場廃止になった日本デジタル研究所の場合では、最終取引日2/3 Friの24:00 JST頃にデータが取得出来なくなりました。MBOなどで上場廃止になり将来復活の可能性がある銘柄などはデータを持っておきたいところなので、早めに対応することが必要かと思います。

 

4:サーバの保守メンテナンス

 土曜日15:00頃 JST~翌週土曜日12:00 JST頃までは、IBGatewayが IB証券に基本的に接続出来るようです。上記期間中でもネット回線の状態によるのかもしれませんが希にセッションが切れて再接続を IBGatewayが試行しているようです。また、Exchange毎にメンテナンスがあるのか停止することも希にあります。東証の TSEJは土曜日の早朝に10分ほど止まっていたこともありましたが、同時刻帯に IDEALPROの Forexデータは取得出来ていたことからの推測です。

 プログラム側で履歴データ取得のレスポンス待ちを組み込んでその時間を長めにとるなどの対策を組み込みつつ、土曜日の12:00~15:00 JST頃は停止することを前提にプログラムの制御を考慮した方が良いかと思います。

 

5: IB Gateway接続時には Trader Workstationにログイン出来ない

 Trader Workstationにログインすると排他制御なので、IB Gatewayのセッションが切れてデータ取得が Abortします。私のプログラムは精緻なリスタート機能は無いので面倒くさいことになります。不便なのですが、全てシステム売買にするか UIから行うかの2択なのかと思います。

 バックテスト環境構築優先でデータ取得しかしていませんが、余力がもったいないので暴落時に発注出来るようプログラム発注もそのうち試す予定です。3Q決算を出してきて値が下がった押し目買い候補がいくつかありますので。