株の売買を自動化したいと思って調べ始めたとき、最初に出てきたのが「日本の個人向けには公式の取引APIが無い」という情報でした。
結論から言うと、これは誤りです。少なくとも僕が調べた範囲では、主要ネット証券に個人でも使える公式の取引手段が2つあり、どちらも発注までできます。
ただし、それぞれに無視できないクセがありました。この記事では、その2つを実際に比較して、どちらを選んだかまで書きます。
選択肢は大きく2つある
| 楽天証券 マーケットスピードII RSS | 三菱UFJ eスマート証券 kabuステーションAPI | |
|---|---|---|
| 形式 | Excelアドイン(RTD) | REST + WebSocket |
| 発注 | ○(2021年6月から対応) | ○ |
| 逆指値 | ○ | ○ |
| OCO(利確と損切りの同時発注) | 要確認(後述) | ×(API未対応) |
| リアルタイム配信 | Excelのセルが自動更新 | WebSocketでPUSH(登録銘柄 最大50) |
| Pythonから使えるか | △(xlwings等でExcel経由) |
○(普通のHTTPリクエスト) |
| 必要なもの | Microsoft Excel(必須) | kabuステーション本体の起動・ログイン |
| 追加条件 | 特になし | Professionalプラン以上 |
以下、それぞれ詳しく見ていきます。
楽天証券:マーケットスピードII RSS
楽天証券のトレーディングツール「マーケットスピードII」には、RSS(リアルタイム・スプレッドシート)という機能が付いています。
どういう仕組みか
Excelのセルに専用の関数を書くと、そこにリアルタイムの株価が入ってきます。
=RssMarket("7203.T", "現在値")
こんな感じのイメージです。取得できるのは現在値だけではなく、
- 時価・気配値・板情報
- 買付余力
- 保有建玉
- 注文照会
といった口座まわりの情報も取れます。そしてVBA(Excelのマクロ)から発注もできます。
対応商品は国内株式(現物・信用)、株価指数先物・オプション、商品先物。個人が普通に売買するものはひととおりカバーされています。
Pythonから使いたい場合
Python単体では使えません。RSSはExcel固有のRTD(リアルタイムデータ)という仕組みを使っているためです。
xlwings というライブラリを使えば、PythonからExcelを操作する形で扱えますが、構成としては
Python → Excel → マーケットスピードII → 楽天証券
と、間にExcelが挟まります。動きはしますが、Excelを常時起動しておく必要があるので、その分だけ止まりどころが増えます。
僕にとっての最大の障害
このPCにExcelが入っていませんでした。
LibreOfficeやGoogleスプレッドシートで代替できないかも調べましたが、RSSはExcel専用のRTD機構に依存しているため代替不可です。使うなら Microsoft Excel(Microsoft 365 または買い切り版)を購入する必要があります。
マーケットスピードII自体は無料で使えるのに、自動化しようとした瞬間にExcelの購入費が発生する、という構造です。
三菱UFJ eスマート証券:kabuステーションAPI
旧auカブコム証券が提供している、いわゆる「kabuステーションAPI」です。
どういう仕組みか
kabuステーション(トレーディングツール本体)を起動してログインした状態にしておくと、自分のPCの中にAPIサーバーが立ち上がります。
http://localhost:18080 (本番環境)
http://localhost:18081 (検証環境)
ここに対してHTTPリクエストを投げるだけで動きます。つまり、Pythonでも何でも、HTTPが喋れる言語なら使えます。Excelは要りません。
できることは以下のとおりです。
- 発注 / 注文取消
- 残高照会・買付余力
- 板情報の取得
- ランキング取得
- 逆指値の発注
- WebSocketによるPUSH配信(登録銘柄 最大50銘柄)
検証環境(18081番ポート)が用意されているのも実用的で、本物の資金を動かさずに発注のコードをテストできます。
注意点1:OCO(W指値)がAPIでは使えない
これが一番大きな制約でした。
OCOというのは「利確の指値と、損切りの逆指値を同時に出しておいて、どちらかが約定したらもう片方を自動でキャンセルする」注文方法です。ツールの画面からは使えるのですが、APIからは発注できません。
なので自動化する場合は、
1. 利確の指値と損切りの逆指値を、別々の注文として出す<br>2. 自分のプログラムで約定を監視する<br>3. どちらかが約定したら、もう片方を取り消すリクエストを投げる
という処理を自分で書く必要があります。
ここを実装し損ねて片方の注文が残ると、二重決済、注文の拒否、取消の遅延といった、想定していない注文状態が発生しえます。具体的な挙動は現物か信用か、注文区分は何かによって変わるため、検証環境で必ず確認してください。地味ですが、一番慎重に作るべき部分です。
楽天証券側のOCOについても補足
なお、この記事を書いたあとに調べ直したのですが、楽天証券の国内株式に「本来のOCO」があるとは、公式資料からは確認できませんでした。
楽天証券には「逆指値付通常注文」や「セット注文」がありますが、これらは<br>「利確と損切りを同時に出して、片方が約定したらもう片方を自動で取り消す」という<br>OCOとは仕組みが異なります。FXのOCO機能と混同しやすい部分です。
上の比較表で「○(W指値)」としていた箇所を「要確認」に改めました。<br>実際に使う前に、必ず各社の公式の注文仕様をご確認ください。
注意点2:Professionalプラン以上が必要
API利用にはkabuステーションのProfessionalプラン以上が条件です。信用取引口座を開設して1回取引すれば条件を満たせる、という情報が多いですが、条件は変更される可能性があるので公式で確認してください。
API利用の申し込み自体はログイン後の画面から行え、書面のやりとりは不要でした。
注意点3:複数起動はできない
同時に複数のkabuステーションを立ち上げての利用はできません。1台のPCで1つ、という前提で設計する必要があります。
僕はkabuステーションAPIを選びました
理由はシンプルで、Excelが要らないからです。
| 楽天RSS | kabu API | |
|---|---|---|
| 追加コスト | Excel購入費(数千円〜) | 0円(プラン条件は要達成) |
| 構成の複雑さ | Python → Excel → ツール | Python → ツール |
| 障害点 | Excelが落ちたら止まる | ツールが落ちたら止まる |
Excelを常時起動して発注を通す構成は、動くには動きますが、止まる箇所が1つ増えるのが気になりました。相場が動いているときにExcelが固まって注文が通らない、というのは想像したくない状況です。
すでに楽天証券をメインで使っていて、Excelも持っているという方であれば、楽天RSSの方が口座を増やさずに済むぶん楽だと思います。「すでにExcelがあるか」で分岐する、というのが一番実態に近い判断基準かもしれません。
やらない方がいいこと:画面のスクレイピングとOCR
調べていると、「トレーディングツールの画面を自動でキャプチャして、OCRで板情報を読み取る」という手法を紹介している情報にも行き当たります。
僕はこれは採用しないことにしました。理由は3つあります。
1. 利用規約に抵触する可能性がある。各社の規約で自動操作を制限している場合があります<br>2. 遅すぎる。板は秒以下で更新されます。画像をキャプチャして文字認識にかける処理が追いつきません<br>3. 壊れる。ツールのアップデートでレイアウトが1ピクセルずれただけで読み取りが破綻します
そして何より、公式にデータとして取得できるものを、わざわざ画像から読み取る理由がありません。APIが提供されている以上、そちらを使うのが素直です。
自動化は「エントリー」より先に「出口と記録」から
最後に、順番の話をさせてください。
自動売買と聞くと「条件に合った銘柄を自動で買う」ところを想像しますが、僕はそこは最後に回すことにしました。
理由は、僕の売買ルール自体がまだ検証途中だからです。バックテストを組んだところ、自分のコードにバグ(テクニカル指標の計算ミス)が見つかったばかりで、そもそも検証している条件が正しいのかが確定していません。正しいか分からないルールを自動化しても、間違いを高速で繰り返すだけになります。
なので、こういう順番で進めることにしました。
1. 逆指値の自動セット(発注と同時に損切りを置く。人間が忘れる部分を機械に任せる)<br>2. 約定履歴の自動記録(あとで振り返れる形にする)<br>3. 場中データの収集のみ(発注はしない。デイトレ条件を作るための材料集め)<br>4. 半自動発注(プログラムが提案 → 自分が承認 → API発注)<br>5. 完全自動
1番が最初に来ているのがポイントです。僕が一番損をしたのは「損切りを自分の手でやろうとして失敗した」ときだったので、機械に任せて一番効果があるのは、エントリーではなく出口でした。
→ 関連記事:信用取引の損切りルール|「-8%で機械的に切る」を守れずに22万円溶かした話
よくある質問
Q. プログラミングができなくても使えますか?
楽天RSSは、発注しないで株価を眺めるだけならExcelの関数を書くだけなので、比較的とっつきやすいと思います。ただし発注まで自動化するならVBAが必要です。kabuステーションAPIは、最低限HTTPリクエストが書ける程度のプログラミング知識が要ります。
Q. 自動売買は証券会社の規約的にOKなんですか?
どちらも証券会社が公式に提供している機能なので、その範囲での利用は想定されています。ただし利用規約や仕様は変更されることがあるので、実際に運用する前に必ず最新の規約を確認してください。前述のスクレイピングのような、公式に提供されていない手段は別問題です。
Q. SBI証券や松井証券にはAPIはありますか?
各社で状況が異なり、法人向けのみだったり、条件付きだったりします。この記事では実際に自分で調べた2社に絞って書いています。他社については公式情報を直接確認されることをおすすめします。
Q. APIを使えば勝てるようになりますか?
なりません。APIができるのは「決めたことを、決めたとおりに、速く正確に実行する」ことだけです。決めた内容が間違っていれば、間違いを正確に実行します。順番として、ルールの検証が先、自動化は後だと思っています。
※この記事の内容は個人の見解であり、投資助言ではありません。記載の仕様・条件は筆者が調査した時点のものです。API仕様、プラン条件、利用規約は変更される可能性があるため、必ず各証券会社の公式情報をご確認ください。信用取引は元本を超える損失が生じる可能性があります。

