楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で利用できる マーケットスピード II RSS を活用して Python であれこれ取り組んでいます。この「自動売買への道」のトピックでは、プログラミングの話題にも踏み込んで、日々の活動をまとめていきます。
デイトレ用自作アプリ
以下は株価に関連する情報の流れを示しています。
楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、マーケットスピード II RSS を介して取引をする構成を取っています。
強化学習のシステム作成
GPT-5 をはじめとした生成 AI に PPO エージェントのサンプルを提案してもらって、運良く良さげな学習効果が得られるものがあれば、そのコードを徹底的にレビューして、自分で使いこなせるようにしようという都合の良いことを考えていました。
運良く学習が進むエージェントが得られたので、これをベースにあれこれチューニングを始めました。
特徴量の設計
株価 Price と累積出来高 Volume を秒間隔で取得した1日分 19,000 余りのティックデータで、収益を最大化できるような強化学習のシステムを作ろうと取り組んでいます。
ナンピンをせずに建玉固定で信用売買をするという制約を設けた環境クラスを用意して、GPT-5 に PPO エージェントのサンプルを提案してもらい、学習が進むかどうかのトライアルを何度も繰り返しました。
なかなか学習が進まなかったので、学習機会を増やすために特徴量を増やすという GPT-5 の提案を受け入れ、特徴量の良し悪しを吟味せずにここまで進めてきました。
学習が進むエージェントが得られたので、いまさらながら特徴量を吟味してみることにしました。
GPT-5 とのやりとりで採用した特徴量
過去のてティックデータで、特徴量をプロットしました。
200 回の学習曲線は次のようになりました。中段は、モデルへの報酬 (Reward) のスケールをズームして Epoch 後半の報酬曲線を見やすくしています。
試案 1
そもそも株価の絶対値は必要だろうか?という疑問を持っていたので、特徴量には株価の差分を使ってみることにしました。
移動標準偏差の代わりに、移動 IQR(四分位範囲)に置き換えたのは、IQR の方が変化が緩いという期待もありましたが、単に標準偏差を使いたくなかっただけです。その他は、オシレータ系のテクニカル指標を見繕って、同じような大きさに収まるように調整しました。
今のところ、period=60 固定でローリングして特徴量を算出しているのですが、テクニカル指標の動きが忙しく、これが役に立つのかは判りません。
200 回の学習曲線は次のようになりました。あまりの違いにびっくりです。最初に Price と Volume を生成 AI に指定したのは自分ですが、数値の取り扱い方について入念に相談をしなかったことが悔やまれます。学習曲線は大したことがないのですが、そこそこの収益を上げています。
従来の scikit-learn などを利用した機械学習では、観測データを標準化処理するのが常でしたが、今回は最終的にリアルタイムで推論マシンに観測データを送ることを前提としているため、標準化処理が出来ず、特徴量の桁数をある程度揃えるぐらいにしか考えていませんでした。
しかし、株価をそのまま入力してしまうという愚行は、標準化処理をしてみれば直ぐに判ったことでした。
これは、もう少し特徴量の吟味を続けたほうが良さそうです。
試案 1 に使用した環境クラス
参考に、試案 1 に使用した環境クラスを以下に掲載しました。
参考サイト
- マーケットスピード II RSS | 楽天証券のトレーディングツール
- マーケットスピード II RSS 関数マニュアル
- 注文 | マーケットスピード II RSS オンラインヘルプ | 楽天証券のトレーディングツール
- PythonでGUIを設計 | Qtの公式Pythonバインディング
- PyQtGraph - Scientific Graphics and GUI Library for Python
- Python in Excel alternative: Open. Self-hosted. No limits.
- Book - xlwings Documentation






0 件のコメント:
コメントを投稿