ねほり.com

何もないから何かみつかる

機械学習で株価予測(Pythonのバックテストライブラリ調査)

      2020/01/29

前回、機械学習で解いた予測結果がどれだけ利益が出ているのか詳しく知ることが出来ませんでした。

そこで、Pythonを使った株価予想(バックテスト)ツールを調べてみます。

オンライン・サービス

QuantX

Smart Tradeのサービスであるクオンテックス(QuantX)という、株式投資をPythonで行うための無料プラットフォームがあります。

開発したアルゴリズムはSmart Tradeのマーケットプレイスでも販売できます。

都内の大学生をインターンシップに迎え、Qiita上に大量の記事を公開させています。

登録してバックテストするまでは分かりやすいですが、肝心のシステムトレード分析が浅い印象を受けます。

同時に販売されているストラテジーもイザナミなどと比べると・・・なイメージです。

とはいえ、いつか試そう。

バックテストライブラリ

pythonのアルゴリズムトレードライブラリをいくつか紹介します。

The Top 21 Python Trading Tools for 2020」というサイトにPythonのトレードツールのTop21が紹介されていました。

21個もあるのか・・・と思いましたが、バックテスト可能なツール紹介は次の4種類です。

また、日本人ブロガーが「簡単に使える!」とよく紹介しているのが次のライブラリです。

その他、backtraderが「代替ライブラリ」と紹介していたものは次の通りです。

Googleトレンドでは次のような人気になっています。

「Backtrader」「Backtesting.py」が比較的人気のようです。

代表的なライブラリを簡単に紹介しつつ、「Backtrader」「Backtesting.py」を実際に使ってみます。

Zipline

githubでは一番星の数が多いライブラリです。

2018年7月16日が最新で「1.3.0」で、最近は更新がありません。

歴史も比較的長く、大規模なデータ分析でも可能です。

また、コミュニティは活発です。

LEAN

日本人ブロガーの紹介は皆無です。

2017年8月9日が最新で「2.4.0.1」です。

LEANエンジンのコアはC#で記述されているため高速で、かつマルチ言語(F#言語、R言語など)に対応しています。

バックテストだけでなく、実際の取引もサポートしています。

また、コミュニティサイトも活発で、複数のサンプル戦略も公開されています。

Moonshot(QuantRocket)

日本では、一人だけツイッターで呟いているだけのライブラリです。

RT
@fx_kirin
: Pandasを使った複数ロジックのバックテストができるし、IBに直接同じストラテジをライブ運用できるって書いてあってとても気になる。 // QuantRocket – Documentation and Usage Guide https://t.c…

2019年9月24日が最新で「1.9.1」です。活発です。

Ziplineによるバックテストもサポートしています。

が、このライブラリはデータ取得等が月額料金制となっています。

PyAlgoTrade

以前は最も利用されていると言われているバックテストライブラリです。

2018年8月20日が最新で「0.20」です。

まだマイナーバージョンアップしかしていませんが、サポートしている注文方法が豊富で成行注文はもちろんのこと、指値や逆指値なども使えます。

またドキュメントも豊富なので使いやすそうな印象を受けます。

Twitter動向、企業ニュースのスクレイピングなどもサポートしていると記載があります。

pybacktest

こちらも軽量なライブラリです。

2013年5月3日が最新で「0.1」、開発は止まってそうです。

テクニカル指標の計算などの機能は用意されてなく、シンプルに機能をまとめたライブラリです。

Backtesting.py

初心者におすすめなライブラリです。

2019年9月23日のライブラリが最新で「0.1.2」。

2019年1月17日にリリースされて3回のアップデートがありましたが、今は開発がストップしている可能性があります。

機能的にはかなり劣りますが、逆にシンプルなため初心者には手っ取り早く使えるライブラリです。

特徴として次があります。

  • バックテストの処理がとても高速
  • テクニカル指標のライブラリTa-Libをサポート

Backtesting.pyを利用してみる

インストールは簡単でした。

次にバックテストに必要な時系列の価格データを用意します。

次の条件を満たす必要があります。

  • pandas DataFrame形式であること
  • ‘Open’, ‘High’, ‘Low’, ‘Close’, 列を持っている事(’Volume’はオプション)
  • indexはpandasのDatetime形式
  • 他の列は存在していても問題なし

Protraのデータがそのまま使えそうです。

次のようなコードを書きました。

Backtestクラスのインスタンスを作成して、run()を呼ぶだけです。

コンストラクタの引数には、テストで利用するデータ(df)と、上記で作成したcustom strategyクラス、cash(予算)、comission(売買手数料)(0~10%で指定可能)を指定します。

予算は10万円を、手数料は0.1%としています。

結果は次のように出力されます。

BokehJS 1.4.0を使っているようです。

SQN(SystemQualityNumber)とは、Van K. Tharp氏によって定義された取引システムの分類(評価)方法のようです。

SQN値によって下記のように分類され、取引数が30以上の場合、SQN値は信頼できるとみなされています。

# 1.6-1.9:平均以下
# 2.0-2.4:平均
# 2.5-2.9:良い
# 3.0-5.0:素晴らしい
# 5.1-6.9:最高
# 7.0~:聖杯?

グラフを出力する場合は次を呼びます(bt.run()の出力は表示されなくなります)

かなり簡単にバックテストが可能です。

ちょっと試すなら、このライブラリが良さそうです。

Backtrader

PyAlgoTraderと同様に海外で人気のライブラリです。

2019年5月30日のライブラリが最新で「1.9.74.123」です。

アップデートも多く、ドキュメントも豊富&コミュニティも非常に活発です。

また、インジケータの種類が多く、取引量などの設定も可能です。

Backtraderを利用してみる

インストールを行います。

売買のソースコードとしてBacktesting.pyの出力を真似て実装されたものを見つけました。

[引用] 『Backtrader』でFXのバックテストをする!:Python

世の中に公開されているサンプルより初動が早そうなので、こちらを使って日本株のバックテストを行います。

出力結果です。

グラフも出力可能です・・・・赤い。

その他、株関連ライブラリ

TA-Lib

テクニカル分析における代表的な指標を算出することができます。

既に紹介済です。

Quandl

金融、経済などの数値データの検索エンジンで、さまざまなソースから得られたデータを検索し、グラフや表を表示させることができます。

まとめ

比較的簡単にバックテストを行える事は分かりました。

が、Protraを改造する必要があったように他視点から分析するには、大幅な改造が必要な気がします。

独自実装している声はよく聞きますが、満足するフレームワーク作った頃に大体において飽きが来るので躊躇しています。

 - 2020年(社会人16年), 機械学習, システムトレード, テクノロジー

  関連記事

テクニカル手法の勝率・PFまとめ(システムトレード)

当初、システムトレードの手法として、 勝率70%以上 PF2.0以上 最大損失2 …

月単位の利益を出力してみる(システムトレード)

世界的な株の下落が始まりました。 [8/5]米国株、ダウ続落で767ドル安 下げ …

RCIの3本ライン表示方法(protraシストレ)

protraを使ったバックテストのソースコードばかり公開してますが、グラフ表示も …

JavaScriptの知識をPhotoShopの自動化に活用

2011年06月12日(日) JavaScriptの知識をPhotoShopの自 …

高知工科大学生の卒業論文(MACP、VR、MACD)の有効性確認(protraシストレ)

10年前となりますが、平成18年度の学士学位論文にテクニカル分析に関するものを見 …

バックテスト完了後に売買結果をテキストに保存する(システムトレード)

過去のイザナミ愛用者のブログを読み漁ると、2015年頃までは独自ストラテジー・開 …

あなたも株のプロになれる(うねり取り手法:立花義正編)

2002年に、長瀬主演の株投資のドラマがありました。 マーケットの動きは一見デタ …

マトリックス・ウイルスに感染するも三ヶ月放置

CGIにも飽きてきた…。IPルーティングのプログラム分からん…。  & …

推薦論文の査読結果&キッズGooでWebサイトが表示されるために

推薦論文 「推薦論文」の査読結果が返ってきた・・・・   & …

最大連勝・最大連敗・平均年利などを追加する(システムトレード)

なぜバックテストすると近年は資産曲線が寝る(横ばい)なストラテジーが多いのか? …