Python
interactivebrokers
ibgateway
IBAPI

ib_insync のインストール時につまづいたところなど

ib_insyncとは

Interactive Brokers の API を python で操作するためのライブラリです.
GitHub - erdewit/ib_insync: Python sync/async framework for Interactive Brokers API

スゴく使いやすいので,使って行こうと思いますが,ちょこちょこハマったので,メモします.

必要環境

  • python3.6以上

私の環境

$ cat /etc/lsb-release
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=18.1
DISTRIB_CODENAME=serena
DISTRIB_DESCRIPTION="Linux Mint 18.1 Serena"

準備

Download

Install

  1. IB API LATESTをインストール.(windows はインストーラーがあるっぽいのでソレに従えばいい?)

    $ cd /tmp
    $ unzip twsapi_macunix.972.18.zip -d $HOME/
    
    # file が解凍されているか確認
    $ cd ~/IBJts 
    
    # owner を確認
    ~/IBJts $ ls -alt
    drwxr-xr-x 2 root root 4096  3月 14 11:52 ibapi
    drwxr-xr-x 2 root root 4096 12月 28 18:35 tests
    ....
    ....
    
    # もし,↑のようにowner が root なら,自分に変更する
    ~/IBJts $ sudo chown -R shineitaro:shineitaro ./
    
    # pythonclient の setup.py を実行
    $ cd ~/IBJts/source/pythonclient
    ~/IBJts/source/pythonclient $ python setup.py install
    
  2. IBゲートウェイ最新版をインストール

    $ cd /tmp
    $ chmod u+x ibgateway-latest-standalone-linux-x64.sh  
    $ ./ibgateway-latest-standalone-linux-x64.sh   
    
  3. ib_insync をインストール

    $ pip install -U ib_insync
    

試す

IB Gatway設定

  1. IBゲートウェイをインストール後,Demoアカウントでログイン. Screenshot from 2018-03-16 19-07-07.png
  2. Configure -> Settings と進む.(Show Log / Show API message に✔入れておくと,実行中にログがでる.オススメ.)Screenshot from 2018-03-16 19-07-44.png
  3. 設定はこんな感じです.赤枠のところを抑えておけば多分大丈夫かな?と思います. Screenshot from 2018-03-16 19-19-19.png

jupyter notebook で historical data を取得

# version は 3.6 以上か確認
import sys
print(sys.version)
# 3.6.4 ~~~

from ib_insync import * 

# Jupyter Notebook で実行するときは必ずイベントループをスタートさせる必要があります.
# (ターミナルでは不要.)
util.startLoop()

# IB に接続
ib = IB()
# clientIdは適当な数値.
ib.connect('127.0.0.1', 4002, clientId=3)

contract = Index('SPX', exchange="CBOE", currency='USD', )
ib.reqHistoricalData(contract,
                          endDateTime='',
                          durationStr='10 D',
                          barSizeSetting='1 day',
                          whatToShow='TRADES', 
                          useRTH=True,
                          formatDate=1)

#[BarData(date=datetime.date(2018, 3, 2), open=2660.42, high=2696.13, low=2647.79, close=2691.25, barCount=10119),
# BarData(date=datetime.date(2018, 3, 5), open=2684.75, high=2727.97, low=2675.9, close=2720.94, barCount=6243),
# BarData(date=datetime.date(2018, 3, 6), open=2728.86, high=2731.36, low=2711.55, close=2728.12, barCount=5745),
# ......

はまったところ

  • 本家githubには install時に,pythonclient の setup.py を実行しろとは書いてない.これをやっていないと,No module named ‘ibapi’ / IB API from http://interactivebrokers.github.io is required というエラーが出る.
  • Jupyter Notebookで実行するときは必ず util.startLoop() を記述する
  • IB Gatwayを最新にしないと,CBOEのIndexヒストリカルデータを取得できない.参照:Re: historical data for indexes on cboe suddenly not working?

使ってみて

  • よく出来てると思う.スゴく使いやすい.たのしい
  • datafeed がこない週末は使えない。とほほ。