はじめに
この記事では、ずぶの素人がAIと相談しながら、というかAIがほとんどコードを書きながら株式市場の板情報を自動で分析・監視するシステムの開発過程を記録しています。
プロジェクト概要
- 当初の目的:株式市場の板情報を自動で分析し、取引シグナルを検出する
- 使用技術:Python, xlwings, pandas, PyQt
- 開発環境:Windows 11
開発者の背景
まず前提として僕はプログラミングに関しては本当に素人です。趣味で少し手を動かす程度、本業も生活も基本的にまったく関係ありません。どこかで開発をしたこともなければ大学でさえかかわったことがありません。数年前に半年ほど大学の社会人向け講座を受けた程度です。前職は証券会社だったので株式についての基本的な知識はありました。
開発の経緯
初期のアイデア
まず、株の板情報を取得してそれをデータとして受け取りうまいことできるプログラムが書けるんじゃないか。みんなやってそうだけど実は板の情報ってほとんど落ちてないんでよ。ないなら作るしかないじゃない。ということでAIに聞きながら作ることにしました。エディタはCursorを使いました。ちなみに板情報というのは下の画像のようなものです。
実装方法の検討
最初はこの板の画像を読み込んで数値を抜き出しデータとして保存し、それを流用するような形を考えました。けどこれ汎用性は高そうですが、あんまり早くなさそうなんですよね(あと正確性を担保するのが難しそうだった)。早くないと困るのでOCRを使ったようなものは除外。となると証券会が出しているAPIを取りに行く方法。これかなりいいなと思っていろいろと調べたんですが、不幸なことに僕の使っているのが楽天証券で楽天はAPIを出してないみたいなんです。代わりにExcelのアドインで使えるMarketSpeedRSSというものを出しているらしい。そうなると、RSSアドインを使いExcelに表示させる→そのファイルをリアルタイムで監視→必要データを抜き出し処理。の流れが一番順当に感じました。VBAも考えたのですが、いまいちわかんなかったのでPythonで処理させることに。
最初の実装と課題
ということでコードを書いてもらい実装。シンプルに買い板売り板のどっちが多いかで売買のシグナルを出すコードはすぐに完成しました。ただ、あまりにロジックが短絡的なので使い物になるかといわれるとかなり微妙。いろいろと追加でロジックを考えていくのですが、場中でしか試せないのでいかんせん効率が悪い。
モックデータ生成への挑戦
それっぽいモックデータ?を自動で生成してロジックを検証できないか奮闘します。が、もちろんそれっぽいものは出来上がるのですが動きにランダム性が出せず、またシナリオを設定しても現実の動きとは似て非なるものができました。人体錬成して失敗した。みたいな気持ちです。
実データ収集と機械学習への転換
では、せっかく今データ自体を集めることは可能になったので実際の場中のデータを集めてきてそれでロジックをテストしようという話になりました。いわゆるバックテストです。チャートベースでのバックテストはすでにPythonにライブラリがあるほどなのですが、調べた限り板でのそれは存在しませんでした。ならとりあえず収集してcsvとしてどんどんログとっていこう。と2~3日集めていると「この時系列データを機械学習出来たらそれでもういいんじゃないか?」という考えに至ります。
機械学習の実装
今動かしているPCの性能では学習に耐え切れないと判断し、googlecolabで動かすことに。どのモデルを使うか悩んだのですがAIに聞くと「板読みだけなら決定木、歩み値も考慮するならTransformer」とのこと。このあたりでgitとgithubの有用性に気づきます。まだ使いこなせてはいないんですがセーブできるだけでかなりありがたい。AI、プロンプトの問題なのか割と突っ走って改修不可能なレベルまでぐちゃぐちゃにしてしまうことがあるので定期的にセーブしたり新しいことするときはブランチ作ったり、初歩的な使い方でもニッコリします。
学習結果と方向転換
さて、Transformerを使うことにし、ラベル作ったり、扱いやすいように前処理をしたりしていざ学習させるんですが、これがもうポンコツでほぼランダム。特徴量を増やす方向で考えたりラベルをもう少し細かくしたりといろいろ考えたのですがシンプルにデータ量が足りないという壁にぶち当たりました。そもそも1日とったデータだけで適切に動くことを期待していたわけではなかったので、とりあえずあってるか否かはさておき動いただけで及第点。
視覚化アプリの開発
ここで「これ機械学習とかしなくても板状況と歩み値自体を視覚的にわかりやすく出すだけでも需要があるんじゃないか?」と考えます。データ収集はスケジューラーみたいなので自動で動かすとして、それとは別に板読み補助のアプリを手元で作ることを目標とします。
PyQt5とかでGUIを作ってガチャガチャと注文つければうまくやってくれるだろ。と思いサクサクと作っていきます。
完成したアプリケーション
機能としては非常にシンプルにしており、板のほうは占める割合で色の濃度を調整し視覚的に厚みがわかるように。右の歩み値は同じ価格で小ロットが5連続以上続けばアイスバーグ注文?と注釈をつけるようにしました。
データは1秒更新でリアルタイムでExcelから引っ張ってくるようにします。ちなみにその関数はデータのログをとる際に使用していたのでそこから流用しました。
今後の展望
ここからですが、データをとりつつまずは1週間くらいのもので学習を進めて特徴量やラベルの見直しを測ります。あるいは価格以外の評価基準を設けたほうがいいのかもしれません。
同時に視覚化のほうはさすがにもう少しロジックを増やしたり、CSSを使ってUIを見やすくしたり考えることは多そうです。
開発を通じての学び
今回まったくコードを書かずじゃんじゃかAIにお願いしながら作っていきましたが、何よりの収穫はファイル操作です。まったくの未経験が作るとなるとディレクトリの中はぐちゃぐちゃになるし、なんならコードの中身もぐちゃぐちゃで順番なんてあったものじゃないです。そのあたりを適切に分離してくれたりフォルダにしてきれいにまとめてくれるのは非常にありがたいです。こんがらがってきたら聞けば構造を教えてくれるし、次何しよう。みたいなのもスムーズに進むし、僕みたいにあれやこれやと興味が移る人間には非常に強力な武器です。ここを見てる方たちには釈迦に説法でしょうが、初心者向けプログラミングの本を読み終えたくらいのレベルだとかなりスムーズに開発が進み、(正しいか、一般的かはさておき)少なくとも一人で1からやるよりは開発の流れをくみ取り易いのではないかと思います。
これを読んだ初学者の方の足しになれば幸いです。
参考リンク
Views: 0