ib_insync (Interactive Brokers API を python で操作するためのライブラリ) のインストールと使い方

## ib_insyncとは

Interactive Brokers の API を python で操作するためのライブラリです．
[GitHub - erdewit/ib_insync: Python sync/async framework for Interactive Brokers API](https://github.com/erdewit/ib_insync "GitHub - erdewit/ib_insync: Python sync/async framework for Interactive Brokers API")

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

## 必要環境

+ python3.6以上


## 私の環境

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

```

## 準備

### Download
+ [Interactive Brokers - API Software](http://interactivebrokers.github.io/# "Interactive Brokers - API Software") Version: API 9.73.06 以上．(2018/03/16現在，**LATEST**版をDLする．Stableではダメ)
+ [IBゲートウェイ最新版 | Interactive Brokers](https://www.interactivebrokers.com/jp/index.php?f=16901 "IBゲートウェイ最新版 | Interactive Brokers")
    + 2022/09/18 Updated: IB Gateway Latest へのURLが更新されていました -> https://www.interactivebrokers.com/en/trading/ibgateway-latest.php

### Install

1. [IB API LATESTをインストール](https://ibkr.info/article/2484).（windows はインストーラーがあるっぽいのでソレに従えばいい？）

    ```bash
    $ 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 $ pip install ．
    ```

2.  [IBゲートウェイ最新版をインストール](https://www.interactivebrokers.com/jp/index.php?f=16901 "IBゲートウェイ最新版 | Interactive Brokers")

    ```bash
    $ cd /tmp
    $ chmod u+x ibgateway-latest-standalone-linux-x64.sh  
    $ ./ibgateway-latest-standalone-linux-x64.sh   
    ```

1. ib_insync をインストール

    ```bash
    $ pip install -U ib_insync
    ```

## 試す

### IB Gatway設定

1. IBゲートウェイをインストール後，Demoアカウントでログイン．
![Screenshot from 2018-03-16 19-07-07.png](https://qiita-image-store.s3.amazonaws.com/0/14019/8ebde914-197e-8054-bdd2-b78e8e5190fd.png)
1. Configure -> Settings と進む．（Show Log / Show API message に✔入れておくと，実行中にログがでる．オススメ．）![Screenshot from 2018-03-16 19-07-44.png](https://qiita-image-store.s3.amazonaws.com/0/14019/6e84b5ae-258d-1e9e-556d-dd27cc843d52.png)
2. 設定はこんな感じです．赤枠のところを抑えておけば多分大丈夫かな？と思います．
![Screenshot from 2018-03-16 19-19-19.png](https://qiita-image-store.s3.amazonaws.com/0/14019/d56f9fa5-5866-afc4-68c4-11ea7ab90b72.png)


### jupyter notebook で historical data を取得

```python
# 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?](https://groups.io/g/twsapi/message/38673 "Re: historical data for indexes on cboe suddenly not working?")

## 使ってみて

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