株の自動取引プログラムを作る

金融, プログラミングPython

コーディングの能力がぼちぼちあれば自動取引とか出来そうだなあと思ったので、2022年の初めくらいから地道にコツコツ作っているプログラムがあった。とはいえ、稼働させたりさせなかったりでよくわからないことになっている。最近、2022年から2023年の日本株のデータセットにおいてバックテストを走らせた結果の資金の推移がこちらである(バックテストというのは、過去の株価からシミュレーション的にトレードして、このアルゴリズムだと過去どれくらいの損益になったかをチェックするものである)。

見ていただけると分かる通り、なんか増えている気がする。初期資金を(シミュレーションなので適当に)50万円とし、半年ほど放置するとなぜか2倍くらいになっている。なんか良さそうに見える。下のプロットの売買の頻度(回数)も、まあ健全な気がする。途中の保有円の上がりが超バグっぽいけど、、

が、しかし、この通りになるとは言っていない。正直なところ、このようにバックテストを走らせて確かめてから、きちんと取引を長期間走らせたことがないので、どうなるのかよくわからない。とりあえずこれを機にまともに長期間走らせ続けてみようかなあと思っている次第である。

どうやって自動取引をやるのか

自動取引とはいっても、市場や、やりかた、色々あるが、ここでは日本株の話をしてみる。そもそも詳しくないと、どういった仕組みで何が起こっているのか全くわからないと思うので、少し説明すると、いわゆる証券口座を普通に開設したのちに、プログラム(Pythonだが)を書いて、ブラウザを自動的に開いて、ぽちぽちボタンを押して、売り買いをするというプログラムを実装している。ただ、人間がやることを自動化すると言った感じだ。ボタンぽちぽちは、簡単に自動化できるんだが(Selenium)、じゃあいつ売り買いするかとか、そういうのはまさにアルゴリズムの開発といったテーマになって、深淵を覗くことになる。

自動売買するプログラムを組むこと自体は、簡単とは言ったものの、実際にやってみると色々と細かなところでうざい部分が多い。このトピックで少しGoogle検索してみると、自動取引プログラムの自作はほぼ不可能です!みたいな文章をやや見かけるが、これはプログラムで仕事をしていない人だとそうだと思う。仕事で使っていて、十分に色々自分で書ける、みたいな人ならば少しの時間があればまあ出来ると思われる。取引関連の知識も多少要求されはするが。。。あとは運用の観点だとか、バックテストの観点もあるので、学びは多い気がする。

今の自分の構成は、Google Cloud上で適当に平日の取引時間内に30分程度、クラウドのサーバーを起動させて、その中で取引を回していると言った感じだ。めちゃめちゃ安いわけではないが、自動取引の夢を見るコストとしている。現在の構成だと、メモリの中にそれなりに株価データが載らないと動いてくれないので・・・。

意外と、綺麗なコードが書けていて、なんとバックテストと本番の実装がほとんど一緒なのである。これは結構凄いことで、シミュレーション用途と本番の運用で実装をかなり近づけることで、バグの影響が判明しやすくなるし、バックテストの結果も本番にちかくなりやすい。株価のデータの取得元も、データの前処理も、取引のアルゴリズムも、取引履歴のデータの保存方法も、同じコードを使っている。なかなか上手に書けているなと思う。もちろん、これでいい成績が出せなかった何の意味もないのだが。逆に言えば、いい成績を出せそうなアルゴリズムが数行とかで用意できさえしてしまえば、あとのところは全て綺麗に処理されているということでもある。というわけで、いいアイデアを持っている人、興味ある人、連絡ください。AboutページのLinkedInからでもメール送っていただければ。

こういう、時間がかかる系は並行して仕込むのが楽しい気がするので、色々仕込んでみたいね。まあバックテストでだいたい運命見えるけどね。ちなみに、日本株の前に仮想通貨系も自動取引やってみたことがあるのだが、魔界すぎて無理だった。バックテストの効率的な走らせ方、探索の仕方なども色々みるべき点は多いと思う。

とはいえ、まだバグだらけなんだろうなあ・・・。

1/27 追記: 予告通りバグを見つけました。大変申し訳ない。更新版の画像は以下になります。ただし、これはTrade自体のバグじゃなくて、この記事のために突貫で作ったplotの処理のバグですね。右肩上がりはやや抑制されてしまいましたね、現実は厳しい。