楽天証券の口座でデイトレの自動売買に挑戦しようと、Windows / Excel 上で動作する マーケットスピード II RSS を利用した Python アプリ (Kabuto) を開発しています。未だ安心して自動売買できるレベルにまで到達していませんが、経験値を上げるため、セミオートでデイトレードを始めています。
今日の日経平均株価
| 現在値 | 53,429.56 | +15.88 | +0.03% | 15:45 | |
|---|---|---|---|---|---|
| 前日終値 | 53,413.68 | 04/06 | 高値 | 53,916.35 | 09:17 |
| 始値 | 53,571.28 | 09:00 | 安値 | 53,156.94 | 13:14 |
※ 右の 15 分足チャートは Yahoo! Finance のデータを yfinance で取得して作成しました。
【関連ニュース】
- ISM非製造業指数が低下、仕入れ価格は急上昇し22年以来の高水準 - Bloomberg [2026-04-06]
- トランプ氏、イランの壊滅は一晩で可能と警告-「明日かもしれない」 - Bloomberg [2026-04-07]
- 米国株式市場=上昇、トランプ氏発言と米・イラン協議報道をにらみ | ロイター [2026-04-07]
- 【米国市況】原油上昇、トランプ氏の記者会見受け-円はほぼ変わらず - Bloomberg [2026-04-07]
- ブルー・アウル株、最安値更新-プライベートクレジット資金流出受け - Bloomberg [2026-04-07]
- ゴールドマンのプライベートクレジット、解約請求4.999%-競合は制限 - Bloomberg [2026-04-07]
- モルガンS、プライベートクレジットに新ファンド-逆風の中で投入へ - Bloomberg [2026-04-07]
- アンソロピック、年換算売上高が4.8兆円突破-ブロードコムとも協業 - Bloomberg [2026-04-07]
- 景気一致指数2月は1.6ポイント低下、2カ月ぶりマイナス 判断据え置き | ロイター [2026-04-07]
- 日経平均は小幅続伸、停戦期待と原油高で方向感欠く動き | ロイター [2026-04-07]
デイトレ用自作アプリ
以下は株価・取引に関連する情報の流れを示しています。
楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、マーケットスピード II RSS を介して Python アプリから取引をする構成を取っています。
強化学習へ沼りに行く②
今日もひきつづき強化学習モデルの開発を優先して、デイトレはお休みです。
TensorBoard を使い始める
強化学習モデルの学習中に、エピソード毎に解析したい情報を引き出す方法について Microsoft Copilot(以降、単に Copilot)に相談していたところ TensorBoard で可視化する話がでたので、突っ込んで聞いてみました。TensorBoard はその名前から TensorFlow の専用ツールだと勝手に思っていたのですが、全くの誤解でした。
Copilot が TensorBoard について下記のようにまとめてくれました。
- 学習中の指標(episode reward, loss など)をグラフでリアルタイム可視化するツール
- ブラウザで http://localhost:6006 を開いて眺めるスタイル
- TensorBoard は TensorFlow 専用ではない
- ログファイルを読み取るだけの汎用可視化サーバー
- SB3 は標準で TensorBoard 出力に対応している
- RL の “見えない内部状態” を可視化する最強ツール
「知らない」っていうのは怖いですね。TensorBoard を利用することで RL(強化学習)モデルの学習時の内部状態を(ほぼ)リアルタイムで確認できるようになりました。
やはり、強化学習に沼ってしまったようです。
建玉(ポジション)情報をモデル側に送るのを忘れてしまっていたため、学習環境に手を入れています。コードの整理が終わらず、まだ動作確認中です。
環境
建玉(ポジション)情報を One-Hot エンコーディングして状態に加えました。
- 問題
- 報酬の最大化
- 報酬と収益が概ね比例するように考慮
- 状態 [Observation]
- Price(株価)
- Profit(含み損益)
- Diff(乖離率 : (MA1 - VWAP) / VWAP)
- ポジション SHORT, NONE, LONG を One-Hot エンコーディング
- SHORT [1. 0. 0.]
- NONE [0. 1. 0.]
- LONG [0. 0. 1.]
- 行動 [Action]
- HOLD(何もしない)
- BUY(買建または返済)
- SELL(売建または返済)
- 返済ロジックは環境側で制御
- ナンピン禁止は行動マスクで処理
- 報酬 [Reward]
- 建玉時、含み損益の一定割合を付与
- 買建時、-Diff を付与
- 売建時、+Diff を付与
- 返済時、直前の含み損益を付与
- 約定コスト : 建玉、返済時いずれも固定の約定コストを引く
- 終了条件
- terminated
- なし
- truncated
- ティックデータが最終行に達した時
- 終了時、建玉があれば強制返済。報酬条件、約定コストは同じ。
状態空間
ポジション情報を状態(観測値)空間に含めたことで構成を変えました。今までシンプルな状態空間しか使ったことがありませんでしたが、スケーリングをモデル側に委ねるため VecNormalize を使うことになったので、スケーリングを委ねる観測値と、そうでないポジション情報を下記のように区別する必要が出てきました。
self.observation_space = spaces.Dict({
"market": spaces.Box(low=-np.inf, high=np.inf, shape=(3,), dtype=np.float32),
"position": spaces.MultiBinary(3), # one-hot
})
エージェント側
モデル側も対応して、指定した観測値をスケーリングするように調節しています。
def make_env():
# 1. Gymnasium 継承の環境クラスのインスタンス
env_gym = TrainingEnv(code, df)
# 2. Monitor Wrapper
env_mon = Monitor(env_gym, dir_logs)
return env_mon
# ====== 学習用環境の準備 ======
# 3. DummyVecEnv Wrapper
env_dummy = DummyVecEnv([make_env])
# 4. VecNormalize Wrapper
env_train = VecNormalize(
env_dummy,
norm_obs=True,
norm_reward=True,
norm_obs_keys=["market"]
)
# モデルの準備
model = MaskablePPO(
"MultiInputPolicy",
env_train,
verbose=1,
tensorboard_log=tb_logs,
)
いろいろな情報を取得できるようになると欲が出てきます。今週のデイトレは全休になるかもしれません。
明日は少しでも成果をまとめたいです。
参考サイト
- マーケットスピード II RSS | 楽天証券のトレーディングツール
- マーケットスピード II RSS 関数マニュアル
- 注文 | マーケットスピード II RSS オンラインヘルプ | 楽天証券のトレーディングツール
- PythonでGUIを設計 | Qtの公式Pythonバインディング
- Python in Excel alternative: Open. Self-hosted. No limits.
- Book - xlwings Documentation



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