株の売買を自動化したいと思って調べ始めたとき、最初に出てきたのが「日本の個人向けには公式の取引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仕様、プラン条件、利用規約は変更される可能性があるため、必ず各証券会社の公式情報をご確認ください。信用取引は元本を超える損失が生じる可能性があります。