楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で利用できる マーケットスピード II RSS を活用して Python であれこれ取り組んでいます。この「自動売買への道」のトピックでは、プログラミングの話題にも踏み込んで、日々の活動をまとめていきます。
デイトレ用自作アプリ
以下は株価に関連する情報の流れを示しています。
楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、マーケットスピード II RSS を介して取引をする構成を取っています。
強化学習の「環境」を準備
株価データ | 約 1 秒間隔 | |
売買銘柄 | 1 銘柄に固定 | |
売買単位 | 100 株 | |
呼び値 | 1 円 | |
建玉 | 買い | 現在株価 + 呼び値 |
売り | 現在株価 - 呼び値 | |
ナンピン禁止 |
GPT-5 (ChatGPT) などの生成 AI を援用して、強化学習モデルを使った売買システムを作ろうとしていますが、プロンプトを用意して生成 AI とやり取りする時に入念に条件を記載しなければならないことがあります。それは売買条件です。
強化学習において、収益を最大化するように売買アクションを推論するモデルを作ろうとしているのですが、売買条件については右表のような設定(概略)をしています。
生成 AI は賢いので、例えば「ナンピン」とプロンプトに記載してもフツーに理解しているように振る舞います。しかし、提案されたコードの動作確認をして(シミュレーション結果の)取引明細を確認すると、期待通りの取引になっていなくてガッカリすることがあります。
毎回入力するプロンプトが微妙に修正されているので、GPT-5 が律儀に提案してくれるコードも毎回異なってきます。ただ、プロンプトが微に入り細に入ると、提案してくれるコードもだんだん長くなり、しかも、毎回のコーディングに一貫性があるわけでもないので、毎回のコード確認が大変になってきました。
その上、プロンプトが長くなったせいで文脈の解釈が変わってもしかたがないような箇所が出てきたりして、なおさらプロンプトが長くなるという悪循環に陥ります。
「環境」とは
下記のサイトにわかりやすい説明があったので引用させていただきました。
強化学習とは、エージェント (AI) が 環境 (Environment) と相互作用しながら最適な行動を学習する方法です。
ということで、今まで環境に相当する部分で、プロンプトの表現の違いなどでいろいろ悩まされてきたと言えます。
ちなみに、売買条件を提示して、雛形にできるような環境クラスを提案して欲しいと GPT-5 にお願いすると、下記のようなコードを提案してくれました(公開することに問題がないことを確認済です)。
コードが長くなるので、ここではナンピンの制約を含めていません。
提案されたコードに付いていた動作確認用のスクリプト (a tiny usage example) の実行結果です。
reset obs: {'price': array([1000.], dtype=float32), 'position': array([0.], dtype=float32)} {'start_index': 0} step 0 0.0 {'position': 0, 'entry_price': None, 'executed_price': 1000.0, 'cumulative_reward': 0.0, 'time_idx': 0} step 1 0.0 {'position': 100, 'entry_price': 1002.0, 'executed_price': 1002.0, 'cumulative_reward': 0.0, 'time_idx': 1} step 0 0.0 {'position': 100, 'entry_price': 1002.0, 'executed_price': 1002.0, 'cumulative_reward': 0.0, 'time_idx': 2} step 2 -200.0 {'position': 0, 'entry_price': None, 'executed_price': 1000.0, 'cumulative_reward': -200.0, 'time_idx': 3} step 2 0.0 {'position': -100, 'entry_price': 999.0, 'executed_price': 999.0, 'cumulative_reward': -200.0, 'time_idx': 4} step 0 0.0 {'position': -100, 'entry_price': 999.0, 'executed_price': 999.0, 'cumulative_reward': -200.0, 'time_idx': 5} step 2 0.0 {'position': -100, 'entry_price': 999.0, 'executed_price': 1000.0, 'cumulative_reward': -200.0, 'time_idx': 6} step 2 0.0 {'position': -100, 'entry_price': 999.0, 'executed_price': 1001.0, 'cumulative_reward': -200.0, 'time_idx': 7} step 0 0.0 {'position': -100, 'entry_price': 999.0, 'executed_price': 1002.0, 'cumulative_reward': -200.0, 'time_idx': 8} step 0 0.0 {'position': -100, 'entry_price': 999.0, 'executed_price': 1001.0, 'cumulative_reward': -200.0, 'time_idx': 9} episode finished, cumulative reward: -200.0
GPT-5 に次のような質問をしたときの回答です。
今回の TradingEnv のように環境クラスを添付していただければ、それを前提に「エージェント部分」だけを設計・実装することも可能です。例えば:
- 単純なランダムエージェント(動作確認用)
- ルールベースのエージェント(移動平均線や価格変化で売買判断するテスト用)
- 強化学習エージェント(PPO / DQN / A2C など、PyTorch 実装で env.step() を回して学習)
やり方は簡単で、次回リクエストの際に
- 添付する TradingEnv のコード(またはそのまま私が生成した環境コードを再掲でもOK)
- 「どんなエージェントが欲しいか」(例: PPOベース、シンプルなルールベース、torchで動く最小実装 など)
そうであれば、まずは環境クラスをしっかり作り込んでからエージェントの評価をした方が良さそうです。
すっかり生成 AI 頼みになってしまっていますが、慣れていない Python のパッケージを使うとき、学習コストをかなり節約できて大助りです。便利なツールを使わない手はありません。🤗
課 題
現在、課題と考えていることを下記にまとめました[随時更新〗。
- マーケットスピード II RSS による売買
- Excel VBA, Python 側で実際の売買を試す。
- 売買のためのサンプルワーク
- PyTorch を利用した強化学習モデルの実用化
参考サイト
- マーケットスピード 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 件のコメント:
コメントを投稿