自家製クオンツ

ソフトウェア技術を使って金融や投資の考察をしています。

投資検証環境徒然

f:id:yooce:20211125210349p:plain

ひとりアドベントカレンダー2日目です。今日はプログラミングによる投資検証環境について、雑多に書いておこうと思います。

Python

昨日、MagicalNutsのパッケージとその機能を説明しました。

それらと同じようなことをしようと思った場合、まず筆頭に挙がるプログラミング言語Pythonだと思います。界隈で有名なUKIさんは、トレーディングのサイエンスと銘打ったQiita記事で、Pythonによる投資検証例を示されています。

qiita.com

また、先日開催された日本取引所グループによるJ-Quantsという株価予測コンペでも、やはりPythonが採用されました。こちらは、機械学習を用いていますね。

japanexchangegroup.github.io

J-Quantsのチュートリアルバックテスト用ライブラリが紹介されており、

バックテストライブラリは定番と言えるものが無く

としているものの、売買戦略のバックテストライブラリにはいくつか候補があるようです。ここで紹介されているもの以外に、最近ではBackTesting.pyというものもあります。また、同チュートリアルでは、

取引戦略を実装する場合、フレームワークは利用せず個別に自分の取引戦略に合致したバックテストのコードを書いて評価し、結果はmatplotlibなどの描画用ライブラリで直接描画することも多く、本チュートリアルもその方式を採用しています。

という記述もあります。Ryotaさんのサイトでは、仮想通貨Botterのためのバックテスト実装が紹介されています。

ryota-trade.com

システムトレードソフト

投資検証環境としてもうひとつ挙げられるのが、システムトレードソフトです。システムトレードソフトはチャートやインジケーターの表示に加え、売買戦略のバックテスト機能を持ちます。

有名なところではメタトレーダートレードステーションでしょうか。前者は、基本的にFX用だと思っていましたが、最新版のバージョン5では株式にも対応しているようです。後者は、日本株対応版をマネックス証券が提供していましたが、残念ながら昨年サービス終了してしまいました。

www.metatrader5.com

www.tradestation.com

その代替として、TradingViewが挙げられます。

jp.tradingview.com

荻窪禅さんも著書「超実践!順張りスイングトレードの極意」で、トレードステーションのサービス終了を惜しみつつ、その代替はTradingViewであると述べておられます。

そして実は、マネックス証券が無料で提供していたトレードステーションこそが日本語でも利用可能なシステムトレードツールとして筆者は最強と考えていて、本書で詳しく解説する予定にしていました。しかし大変残念なことに、トレードステーションのサービスは20年8月をもって終了となり、この選択肢はなくなってしまったのです。

多くのトレードステーション愛用者が代替となるものを探さざるを得なくなったわけですが、20年9月の時点で最も好まれているのはTradingView(トレーディングビュー)のようです。日本にもしっかりと根を下ろすとともに人気となっているサービスですので、使い方を学ぶための情報はすでにネットに溢れ返っています。

また、日本製のシステムトレードソフトとして、システムトレーダーの斉藤正章さんが監修されているシステムトレードの達人があります。システムトレードの達人の大きな特徴は、同時に複数銘柄を対象とした売買戦略の検証ができることです。

sys-tatsu.com

なぜC#で自作するのか

さて、このように様々な投資検証環境がある中、なぜ私はC#でMagicalNutsを実装するのでしょうか?簡単に言ってしまえば、私はC#が得意で取り回しがしやすいからです。

私は元々C/C++出身で、C#は2002年の登場直後くらいからさわり始めました。途中離れていた時期もあるのですが、実務経験もそれなりにあり、CysharpさんにいらっしゃるようなつよC#erには及ばないと思うものの、ある程度自在にC#を操れる自信は持っています。

私は一時期、メタトレーダーのプログラミング言語MQLをゴリゴリ書いていたことがありますし、トレードステーションのEasyLanguageの経験もあります。もちろん両者とも非常に強力なプログラミング言語だと思うのですが、最終的にはどうしても痒い所に手が届かない感じを受けてしまいました。

また、私はシステムトレードの達人に実装されている、複数銘柄を対象としたバックテストに魅力を感じているのですが、システムトレードの達人は高いですし(汗)、間違っていたら申し訳ないのですが、EasyLanguageやTradingViewのPineスクリプトはそのような機能を持たず、できたとしても難しいものと理解しています。

さらに言えば、私は売買戦略のバックテストに加え、株主優待イベント投資など他の投資検証も行いたく、Pythonや既存のシステムトレードソフトでやりたいことができるのかどうか、調べる時間があったら作ってしまえ、と思って積み上げていった結果が、C#による投資検証ライブラリMagicalNutsなのです。