2025-10-31

自動売買への道 (2025-10-31)

楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で利用できる マーケットスピード II RSS を活用して Python であれこれ取り組んでいます。この「自動売買への道」のトピックでは、プログラミングの話題にも踏み込んで、日々の活動をまとめていきます。

デイトレ用自作アプリ

以下は株価に関連する情報の流れを示しています。

株価データの流れ(Windows 11)

楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、マーケットスピード II RSS を介して取引をする構成を取っています。

現在、強化学習を利用して、取引モデルを育成中です。

報酬設計の沼にハマる (2)

条件を変えながら報酬設計を試しているうちに、モデルの推論パフォーマンスが落ちてきて、遂に収益がマイナスばかりになってしまいました。そこで、一旦シンプルな報酬設計に戻して、ひとつひとつ変更を確認してそれを簡単にまとめながら進めることにしました。

推論に使用するティックデータ : ticks_20251019.xlsx, 7011

使用するティックデータは 9:00:00 から 15:24:50(ランチタイムを除く)までの 19,490 個(最大)のティックデータです。実際には寄り付いてからのデータになります。

今のところ、推論に使用する過去のティックデータは以下 (ticks_20251019.xlsx, 7011) に固定しています。

報酬 = 確定損益 + 含み損益 : 昨日のデータを加えて再学習

昨日取得したデータ ticks_20251030.xlsx, 7011 を加えた 50 個のデータで(今回学習したモデルに対して)追加学習をしました。

推論結果(使用データ : ticks_20251019.xlsx, 7011)

推論パフォーマンスを確認しました。収益がマイナスばかりになってしまっていいところがありません。収益なしの 0 円で返済する場合にはペナルティを課すようにした方が良いのかもしれません。

                   注文日時 銘柄コード  売買  約定単価  約定数量   損益
0   2025-09-19 10:16:34  7011  売建  3744     1  NaN
1   2025-09-19 10:16:35  7011  買埋  3744     1 -2.0
2   2025-09-19 12:43:44  7011  売建  3706     1  NaN
3   2025-09-19 12:43:51  7011  買埋  3707     1 -3.0
4   2025-09-19 12:58:21  7011  売建  3698     1  NaN
5   2025-09-19 12:58:22  7011  買埋  3696     1  0.0
6   2025-09-19 13:09:56  7011  売建  3645     1  NaN
7   2025-09-19 13:09:57  7011  買埋  3645     1 -2.0
8   2025-09-19 13:10:35  7011  売建  3645     1  NaN
9   2025-09-19 13:10:37  7011  買埋  3643     1  0.0
10  2025-09-19 13:11:29  7011  売建  3637     1  NaN
11  2025-09-19 13:11:33  7011  買埋  3635     1  0.0
12  2025-09-19 13:12:06  7011  売建  3631     1  NaN
13  2025-09-19 13:12:07  7011  買埋  3631     1 -2.0
14  2025-09-19 14:04:07  7011  売建  3652     1  NaN
15  2025-09-19 14:04:09  7011  買埋  3651     1 -1.0
16  2025-09-19 14:04:58  7011  売建  3653     1  NaN
17  2025-09-19 14:05:04  7011  買埋  3655     1 -4.0
一株当りの損益 : -14.0 円
モデルへの報酬分布
n: 19387, mean: -0.000, stdev: 0.000
観測数 : 9

報酬分布

分布はさらに狭くなり、ほとんど 0 へ収束してしまいました。😭

観測値のトレンド

観測値の「含損益」がほとんど動いていません。

スリッページを 0 にしてみる ①

指値で売買しようとしても、その株価で約定できるとは限りません。そこで、1 ティック分(対象銘柄では 1 円)は必ずスベると想定してスリッページを 1 円に設定していました。

つまり、指値より常に、1 円高く買って 1 円安く売る設定にしています。取引履歴上は同じ値段で売買すると 2 円の損失が発生します。

しかし、よくよく考えてみると、モデル側がスリッページ前提で取引するような仕組みになってしまっています。

本来は指値を取引履歴に残すのではなく約定価格を履歴に残すべきなので、スリッページの扱いに工夫の余地があります。この設定のせいでモデルの学習が収益を上げる方向に進まない可能性があると考えて、一旦 0 にしてみました。

とりあえず ticks_20251019.xlsx, 7011 で学習・推論させてみました。

推論結果(使用データ : ticks_20251019.xlsx, 7011)

過去データ ticks_20250919.xlsx の銘柄 7011 について推論します。
モデル models/ppo_7011.zip を読み込みます。
Wrapping the env in a DummyVecEnv.
                     注文日時 銘柄コード        売買  約定単価  約定数量   損益
0     2025-09-19 09:01:04  7011        売建  3719     1  NaN
1     2025-09-19 09:01:09  7011        買埋  3714     1  5.0
2     2025-09-19 09:01:10  7011        売建  3715     1  NaN
3     2025-09-19 09:01:13  7011        買埋  3713     1  2.0
4     2025-09-19 09:01:14  7011        売建  3715     1  NaN
...                   ...   ...       ...   ...   ...  ...
2601  2025-09-19 15:24:43  7011        買埋  3687     1 -1.0
2602  2025-09-19 15:24:44  7011        売建  3689     1  NaN
2603  2025-09-19 15:24:53  7011        買埋  3688     1  1.0
2604  2025-09-19 15:24:54  7011        売建  3688     1  NaN
2605  2025-09-19 15:24:59  7011  買埋(強制返済)  3689     1 -1.0

[2606 rows x 6 columns]
一株当りの損益 : 189.0 円
モデルへの報酬分布
n: 19387, mean: -0.000, stdev: 0.005

報酬分布

分布は明確にはプラス側に寄ってはいませんが、きれいな正規分布にはなっていません。

観測値のトレンド

取引頻度が多いですが、学習を重ねることで頻度が変わるのかを確認してみたいです。

スリッページを 0 にしてみる ②

過去 50 個のデータでさせた後、ticks_20251019.xlsx, 7011 で推論させてみました。

推論結果(使用データ : ticks_20251019.xlsx, 7011)

高頻度の取引回数で実用的ではありませんが、利益は出ているようです。

過去データ ticks_20250919.xlsx の銘柄 7011 について推論します。
モデル models/ppo_7011.zip を読み込みます。
Wrapping the env in a DummyVecEnv.
                      注文日時 銘柄コード        売買  約定単価  約定数量   損益
0      2025-09-19 09:01:04  7011        売建  3719     1  NaN
1      2025-09-19 09:01:05  7011        買埋  3719     1  0.0
2      2025-09-19 09:01:06  7011        売建  3718     1  NaN
3      2025-09-19 09:01:07  7011        買埋  3718     1  0.0
4      2025-09-19 09:01:08  7011        売建  3714     1  NaN
...                    ...   ...       ...   ...   ...  ...
12945  2025-09-19 15:24:55  7011        買埋  3688     1  0.0
12946  2025-09-19 15:24:56  7011        売建  3688     1  NaN
12947  2025-09-19 15:24:57  7011        買埋  3688     1  0.0
12948  2025-09-19 15:24:58  7011        売建  3689     1  NaN
12949  2025-09-19 15:24:59  7011  買埋(強制返済)  3689     1  0.0

[12950 rows x 6 columns]
一株当りの損益 : 627.0 円
モデルへの報酬分布
n: 19387, mean: 0.000, stdev: 0.004
観測数 : 9

報酬分布

取引履歴では利益が出ているものの、縦軸が対数軸ですが分布形状は正規分布のように左右対称です。学習を重ねると、分布の広がりは抑えられていくという傾向は変わりません。

観測値のトレンド

圧倒的に SHORT ポジション(売建)が多いですが、LONG ポジション(買建)も少しあります。

損益 0 の売買にペナルティをかける ①

高頻度な売買を減らすために、まずは損益 0 の売買に -0.5 円(-0.5 ティック)のペナルティをかけてみます。

ticks_20251019.xlsx, 7011 で学習・推論させてみました。

推論結果(使用データ : ticks_20251019.xlsx, 7011)

「スリッページを 0 にしてみる ①」の取引頻度と比べると 10% 程度に取引回数が減りました。

過去データ ticks_20250919.xlsx の銘柄 7011 について推論します。
モデル models/ppo_7011.zip を読み込みます。
Wrapping the env in a DummyVecEnv.
                    注文日時 銘柄コード        売買  約定単価  約定数量   損益
0    2025-09-19 09:01:04  7011        買建  3719     1  NaN
1    2025-09-19 09:01:06  7011        売埋  3718     1 -1.0
2    2025-09-19 09:01:10  7011        買建  3715     1  NaN
3    2025-09-19 09:01:19  7011        売埋  3716     1  1.0
4    2025-09-19 09:01:21  7011        売建  3717     1  NaN
..                   ...   ...       ...   ...   ...  ...
235  2025-09-19 15:21:44  7011        売埋  3686     1  1.0
236  2025-09-19 15:21:51  7011        買建  3686     1  NaN
237  2025-09-19 15:21:57  7011        売埋  3686     1  0.0
238  2025-09-19 15:21:58  7011        売建  3686     1  NaN
239  2025-09-19 15:24:59  7011  買埋(強制返済)  3689     1 -3.0

[240 rows x 6 columns]
一株当りの損益 : 35.0 円
モデルへの報酬分布
n: 19387, mean: 0.000, stdev: 0.006
観測数 : 9

報酬分布

分布は母数が少ないのでなんとも言えません。学習を重ねてどうなるか確認します。

観測値のトレンド

次のステップ

今晩、51 個の過去データであらたに学習させて、明日、推論のパフォーマンスを確認します。学習を重ねることで、今までと同様に分布の広がりが引き締まるのであれば、報酬のスケーリングの調整も検討する予定です。

参考サイト

  1. マーケットスピード II RSS | 楽天証券のトレーディングツール
  2. マーケットスピード II RSS 関数マニュアル
  3. 注文 | マーケットスピード II RSS オンラインヘルプ | 楽天証券のトレーディングツール
  4. Gymnasium Documentation
  5. Stable-Baselines3 Docs - Reliable Reinforcement Learning Implementations
  6. PyTorch documentation
  7. PythonでGUIを設計 | Qtの公式Pythonバインディング
  8. Python in Excel alternative: Open. Self-hosted. No limits.
  9. Book - xlwings Documentation
にほんブログ村 株ブログ 株日記へ
PVアクセスランキング にほんブログ村

月足の日経平均株価 (2025-10)

本ブログの過去記事 [1] に書いたように、正規分布に従っていないデータに対して平均値 average、標準偏差 σ の使用をやめ、ロバスト統計量と呼ばれる median(中央値)と IQR(四分位範囲)を採用しています。

10 月の日経平均株価の終値は 52,411 円、 先月の終値に比べ 7,478 円高となり、 月足では陽線を形成しました。

直近の移動メジアン線の値は、 6 月線 41,894 円、 12 月線 39,733 円、 24 月線 38,864 円、 36 月線 37,537 円 でした。

なお、小数点以下は切り捨てています。

平均と標準偏差を、median と IQR(Q1 25% と Q3 75%)に置き換えたボリンジャーバンド(勝手に robust Bollinger bands と呼んでいます)のチャートを示しました。

日経平均株価の対象期間のデータのヒストグラムと Q-Q プロットを示しました。

※ ローソク足チャートは Yahoo Finance のデータを利用して作成しました。

関連サイト

  1. 私の株日記: 標準偏差を使う気持ち悪さ [2025-03-16]
にほんブログ村 株ブログ 株日記へ
PVアクセスランキング にほんブログ村

読売株価指数 (2025-10-31)

2025 年 3 月 24 日から公表が開始された読売株価指数読売333)は、特定の企業の値動きに偏らずに平均的な値動きを表すことができるとされる「等ウェート方式」で算出している指数です。

この指数の振る舞いに興味を持ったので、代表的な日本の株価指数である日経平均株価指数(日経225)と東証株価指数 (TOPIX) とのパフォーマンスを比較しています。読売333の公表が始まった 3 月 24 日を 1 として、それぞれの比率をトレンドにしています。

※ 各株価指数の値は下記のサイトを参照してします。

日経平均株価
指数値一覧 - 日経平均プロフィル
TOPIX(東証株価指数)
リアルタイム株価指数値一覧 | 日本取引所グループ
読売333
読売333 : 読売新聞

MAXIS読売333日本株上場投信 (348A)

この読売株価指数に連動する上場投資信託 (ETF)、MAXIS読売333日本株上場投信(MXS読売333日株【略称】)(348A) が 3 月 27 日に東京証券取引所へ上場しました。日足のローソク足チャートを作成しました。

※ ローソク足チャートは Yahoo Finance のデータを利用して作成しました。

参考サイト

  1. 私の株日記: 読売株価指数 [2025-03-28]
  2. 株価指数「読売333」の豆知識や裏話:読売333コラム : 読売新聞
  3. MAXIS読売333日本株上場投信 | ETFならMAXIS(マクシス)
  4. 日本株(市場別) | 銘柄一覧(ETF) | 日本取引所グループ
にほんブログ村 株ブログ 株日記へ
PVアクセスランキング にほんブログ村

今週の日経平均株価 (10/27 - 10/31)

本ブログの過去記事 [1] に書いたように、正規分布に従っていないデータに対して平均値 average、標準偏差 σ の使用をやめ、ロバスト統計量と呼ばれる median(中央値)と IQR(四分位範囲)を採用しています。

週の日経平均の終値は 52,411 円、 先週の終値に比べ 3,111 円高となり、 週足では陽線を形成しました。

直近の移動メジアン線の値は、 9 週線 45,769 円、 13 週線 45,045 円、 26 週線 41,638 円、 52 週線 39,169 円、 100 週線 38,646 円、 200 週線 33,447 円 でした。

なお、小数点以下は切り捨てています。

平均と標準偏差を、median と IQR(Q1 25% と Q3 75%)に置き換えたボリンジャーバンド(勝手に robust Bollinger bands と呼んでいます)のチャートを示しました。

日経平均株価の対象期間のデータのヒストグラムと Q-Q プロットを示しました。

※ 以上 Yahoo Finance のデータを利用して作成しました。なお、掲載時点で金曜日の出来高が反映されていないので、翌日午後に差し替える予定です(ときどき忘れます)。

関連サイト

  1. 私の株日記: 標準偏差を使う気持ち悪さ [2025-03-16]
にほんブログ村 株ブログ 株日記へ
PVアクセスランキング にほんブログ村

今日の日経平均株価 (2025-10-31)


【参考】
厳密なドル換算でありませんが、日経平均株価の 15 分足 4 本値を、
対応するドル円レートの 15 分足終値で割ったチャートです。
上の 15 分足チャートは Yahoo! Finance のデータで作成しました。

前日比 304.19 円高の 51,629.80 円で 3 営業日続伸で取引が始まりました。

9:00 に 51,613.03 円の安値を付けた後は上げ幅を広げて、初めて 5 万 2 千円を超えて 9:50 に 52,391.45 円の高値を付けました。

その後は伸び悩み、前場は 51,948.26 円で取引を終えました。

後場は 52,023.59 円で取引が始まり、上げ幅を広げて再び 5 万 2 千円台を回復しました。

13 時から 52,200 円前後で推移しました。

14 時を過ぎてからはじわじわと値を広げて 15:23 に 52,393.82 と高値を更新しました。

大引けは前日比 1,085.73 円高の 52,411.34 円と高値引けで取引を終えました。また昨日の史上最高値(51,325.61 円)を更新しました。

【関連ニュース】

参考サイト

  1. 日経平均株価:リアルタイム推移・最新ニュース - 日本経済新聞
  2. ヒストリカルデータ - 日経平均プロフィル
にほんブログ村 株ブログ 株日記へ
PVアクセスランキング にほんブログ村

東証 日中変動率 Top 100 (2025-10-30)

10 月 30 日の日中変動率です。その日の高値安値を、始値終値平均値で割っています。これを「日中変動率」と呼んで、トップ 100 のランキングを集計しています。なお、始値と終値の平均が 100 円未満、出来高が 1,000,000 株未満の銘柄は除外しています。

# コード 銘柄名 区分 33業種区分 高値 安値 変動率 出来高 増減
1 2459 アウンコンサルティング S サービス業 564 404 0.331 2,790,200
2 7746 岡本硝子 S 精密機器 423 331 0.250 27,657,000
3 6276 シリウスビジョン S 電気機器 313 246 0.239 1,639,900
4 3905 データセクション G 情報・通信業 2,080 1,705 0.207 7,257,200
5 5191 住友理工 P ゴム製品 2,626 2,154 0.197 2,921,400
6 1850 南海辰村建設 S 建設業 616 513 0.183 1,266,400
7 6494 NFKホールディングス S 機械 126 107 0.174 3,714,900
8 2321 ソフトフロントホールディングス G 情報・通信業 235 198 0.172 3,584,900
9 6800 ヨコオ P 電気機器 1,888 1,599 0.167 1,129,900
10 3195 ジェネレーションパス G 小売業 730 616 0.163 3,919,100
11 4446 Link-Uグループ P 情報・通信業 1,169 996 0.161 1,764,400
12 4552 JCRファーマ P 医薬品 676 578 0.159 5,411,800
13 7711 助川電気工業 S 精密機器 8,250 7,060 0.157 1,186,600
14 4082 第一稀元素化学工業 P 化学 1,174 1,017 0.140 6,755,500
15 7256 河西工業 S 輸送用機器 132 116 0.130 2,636,600
16 5471 大同特殊鋼 P 鉄鋼 1,544 1,360 0.129 4,117,500
17 6330 東洋エンジニアリング P 建設業 2,617 2,300 0.129 27,297,800
18 3350 メタプラネット S 卸売業 514 454 0.127 50,137,300
19 6723 ルネサスエレクトロニクス P 電気機器 1,985 1,753 0.124 33,518,700
20 2586 フルッタフルッタ G 食料品 244 219 0.108 5,383,700
21 3475 グッドコムアセット P 不動産業 1,408 1,270 0.103 1,514,900
22 7419 ノジマ P 小売業 1,251 1,127 0.103 3,549,300
23 4586 メドレックス G 医薬品 135 122 0.100 4,893,300
24 8105 堀田丸正 S 卸売業 631 575 0.092 3,197,700
25 6857 アドバンテスト P 電気機器 23,675 21,670 0.090 37,582,800
26 8226 理経 S 卸売業 570 522 0.087 1,022,900
27 3656 KLab P 情報・通信業 215 197 0.087 5,960,100
28 9424 日本通信 P 情報・通信業 157 144 0.086 11,633,900
29 6871 日本マイクロニクス P 電気機器 8,730 8,030 0.084 1,602,400
30 2673 夢みつけ隊 S 小売業 257 237 0.082 1,475,100
31 8550 栃木銀行 P 銀行業 587 542 0.081 3,447,700
32 6269 三井海洋開発 P 機械 10,230 9,450 0.080 2,980,600
33 8338 筑波銀行 P 銀行業 327 303 0.077 1,603,400
34 5802 住友電気工業 P 非鉄金属 5,379 4,989 0.076 11,547,200
35 6814 古野電気 P 電気機器 9,740 9,040 0.075 1,399,100
36 2743 ピクセルカンパニーズ S 卸売業 124 115 0.075 1,229,200
37 9532 大阪瓦斯 P 電気・ガス業 4,533 4,218 0.073 4,145,400
38 247A Aiロボティクス G 化学 1,977 1,842 0.069 2,888,600
39 5857 AREホールディングス P 非鉄金属 2,615 2,440 0.069 1,723,700
40 285A キオクシアホールディングス P 電気機器 10,930 10,200 0.069 31,125,100
41 6594 ニデック P 電気機器 2,067 1,935 0.068 73,337,800
42 6146 ディスコ P 機械 54,290 50,800 0.066 6,231,200
43 9501 東京電力ホールディングス P 電気・ガス業 751 705 0.065 79,559,000
44 4528 小野薬品工業 P 医薬品 1,882 1,764 0.064 6,979,000
45 6574 コンヴァノ G サービス業 160 150 0.064 3,082,000
46 3853 アステリア P 情報・通信業 1,440 1,352 0.064 2,001,500
47 186A アストロスケールホールディングス G サービス業 767 720 0.063 4,088,700
48 9201 日本航空 P 空運業 2,864 2,686 0.063 7,669,900
49 5726 大阪チタニウムテクノロジーズ P 非鉄金属 2,713 2,549 0.062 1,615,900
50 6323 ローツェ P 機械 2,156 2,029 0.062 3,331,200
51 7735 SCREENホールディングス P 電気機器 14,530 13,680 0.061 3,014,900
52 1944 きんでん P 建設業 6,280 5,911 0.060 1,639,100
53 6703 沖電気工業 P 電気機器 1,886 1,776 0.060 1,038,900
54 2212 山崎製パン P 食料品 3,010 2,835 0.060 2,709,400
55 3825 リミックスポイント S 小売業 319 301 0.059 1,643,000
56 6701 日本電気 P 電気機器 6,027 5,685 0.058 23,266,100
57 1946 トーエネック P 建設業 1,811 1,710 0.058 1,669,500
58 402A アクセルスペースホールディングス G 輸送用機器 632 597 0.057 2,034,100
59 5595 QPS研究所 G 情報・通信業 1,948 1,840 0.057 1,191,000
60 4833 Def consulting G サービス業 110 104 0.056 2,859,500
61 6861 キーエンス P 電気機器 63,190 59,850 0.055 1,742,400
62 3697 SHIFT P 情報・通信業 1,103 1,045 0.055 6,310,800
63 3110 日東紡績 P ガラス・土石製品 8,650 8,200 0.054 1,145,400
64 6177 AppBank G サービス業 211 200 0.054 1,121,600
65 7777 スリー・ディー・マトリックス G 精密機器 306 290 0.053 1,943,600
66 4917 マンダム P 化学 2,442 2,317 0.053 1,066,400
67 7071 アンビスホールディングス P サービス業 530 503 0.052 1,432,900
68 2768 双日 P 卸売業 4,269 4,057 0.052 4,152,700
69 4816 東映アニメーション S 情報・通信業 3,185 3,025 0.051 1,201,100
70 5721 エス・サイエンス S 非鉄金属 142 135 0.051 3,953,800
71 6254 野村マイクロ・サイエンス P 機械 4,060 3,860 0.051 1,241,100 -
72 9022 東海旅客鉄道 P 陸運業 3,981 3,784 0.051 12,339,800
73 4091 日本酸素ホールディングス P 化学 5,250 4,991 0.050 3,813,900
74 4784 GMOインターネット P サービス業 1,022 972 0.050 1,563,600
75 6890 フェローテック S 電気機器 5,190 4,940 0.050 1,230,200
76 6315 TOWA P 機械 2,310 2,200 0.049 9,290,000
77 8035 東京エレクトロン P 電気機器 33,750 32,160 0.049 6,571,000
78 5246 ELEMENTS G 情報・通信業 679 647 0.048 1,017,400
79 5801 古河電気工業 P 非鉄金属 10,770 10,270 0.048 4,985,400
80 4576 デ・ウエスタン・セラピテクス研究所 G 医薬品 107 102 0.048 1,227,400
81 3323 レカム S 卸売業 107 102 0.048 1,059,100
82 4680 ラウンドワン P サービス業 1,112 1,061 0.047 2,531,400
83 190A Chordia Therapeutics G 医薬品 112 107 0.046 1,221,700
84 4062 イビデン P 電気機器 13,630 13,030 0.045 6,044,300
85 9984 ソフトバンクグループ P 情報・通信業 27,190 26,005 0.045 27,352,900
86 5803 フジクラ P 非鉄金属 20,995 20,090 0.044 17,914,500
87 2432 ディー・エヌ・エー P サービス業 2,764 2,646 0.044 5,139,500
88 6525 KOKUSAI ELECTRIC P 電気機器 5,507 5,269 0.044 13,297,400
89 2175 エス・エム・エス P サービス業 1,364 1,306 0.044 1,111,600
90 9003 相鉄ホールディングス P 陸運業 2,565 2,455 0.043 1,486,900
91 3498 霞ヶ関キャピタル P 不動産業 8,560 8,200 0.043 1,070,900
92 7003 三井E&S P 機械 6,190 5,930 0.043 4,701,100
93 9531 東京瓦斯 P 電気・ガス業 5,497 5,270 0.043 2,355,600
94 9766 コナミグループ P 情報・通信業 22,115 21,180 0.043 1,496,300
95 6920 レーザーテック P 電気機器 28,575 27,365 0.043 4,130,300
96 409A オリオンビール P 食料品 1,618 1,550 0.043 3,371,700
97 7014 名村造船所 S 輸送用機器 5,300 5,080 0.042 3,122,100
98 9412 スカパーJSATホールディングス P 情報・通信業 1,523 1,460 0.042 2,534,500
99 4593 ヘリオス G 医薬品 487 467 0.042 1,828,500
100 1885 東亜建設工業 P 建設業 2,392 2,295 0.042 1,563,800

yahoo! finance API が提供する日足の4本値データを yfinance で取得して集計しました。

参考サイト

  1. トップ | 国内市場 | トレーダーズ・ウェブ
にほんブログ村 株ブログ 株日記へ
PVアクセスランキング にほんブログ村

2025-10-30

自動売買への道 (2025-10-30)

楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で利用できる マーケットスピード II RSS を活用して Python であれこれ取り組んでいます。この「自動売買への道」のトピックでは、プログラミングの話題にも踏み込んで、日々の活動をまとめていきます。

デイトレ用自作アプリ

以下は株価に関連する情報の流れを示しています。

株価データの流れ(Windows 11)

楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、マーケットスピード II RSS を介して取引をする構成を取っています。

現在、強化学習を利用して、取引モデルを育成中です。

報酬設計の沼にハマる

前回、StableBaselines3 を利用した PPO エージェントで、モデルの学習が進むようになったことを確認しました。

Python のコードを整理しながら、ちょこちょこと条件を変えながら報酬設計を試しているうちに、モデルの推論パフォーマンスが落ちてきて、遂に収益がマイナスばかりになってしまいました。😭

何をどう変えたかをきっちり履歴に残しておかなくて、しかも試しているうちにあちこちの不備を見つけては直すことを繰り返していたので、元に戻れなくなってしまいました。

仕方がないので、超シンプルな報酬設計に戻り、記録を取りながら改良を進めることにしました。

なお、推論結果は再現しないので、最初の結果を残しました。

推論に使用するティックデータ : ticks_20251019.xlsx, 7011

使用するティックデータは 9:00:00 から 15:24:50(ランチタイムを除く)までの 19,490 個(最大)のティックデータです。実際には寄り付いてからのデータになります。

今のところ、推論に使用する過去のティックデータは以下 (ticks_20251019.xlsx, 7011) に固定します。最初のうちは同じファイルでモデルの学習もします。

報酬 = 確定損益(1 つの過去データで学習・推論)

最もシンプルなケースとして、売買して確定した損益のみをスケーリングして報酬とした場合を試しました。

推論結果(使用データ : ticks_20251019.xlsx, 7011)

同じデータで学習・推論した結果です。

                   注文日時 銘柄コード        売買  約定単価  約定数量    損益
0   2025-09-19 09:03:40  7011        買建  3722     1   NaN
1   2025-09-19 09:06:38  7011        売埋  3727     1   3.0
2   2025-09-19 09:06:47  7011        買建  3727     1   NaN
3   2025-09-19 09:17:39  7011        売埋  3734     1   5.0
4   2025-09-19 09:20:42  7011        売建  3735     1   NaN
5   2025-09-19 09:33:56  7011        買埋  3744     1 -11.0
6   2025-09-19 09:35:25  7011        買建  3736     1   NaN
7   2025-09-19 09:48:32  7011        売埋  3746     1   8.0
8   2025-09-19 09:49:48  7011        買建  3747     1   NaN
9   2025-09-19 09:56:43  7011        売埋  3741     1  -8.0
10  2025-09-19 09:58:21  7011        買建  3732     1   NaN
11  2025-09-19 10:01:35  7011        売埋  3726     1  -8.0
12  2025-09-19 10:03:00  7011        買建  3726     1   NaN
13  2025-09-19 10:16:48  7011        売埋  3745     1  17.0
14  2025-09-19 10:17:37  7011        買建  3739     1   NaN
15  2025-09-19 12:43:58  7011        売埋  3706     1 -35.0
16  2025-09-19 12:47:29  7011        買建  3696     1   NaN
17  2025-09-19 12:49:43  7011        売埋  3707     1   9.0
18  2025-09-19 12:53:14  7011        買建  3711     1   NaN
19  2025-09-19 13:00:56  7011        売埋  3693     1 -20.0
20  2025-09-19 13:02:57  7011        買建  3683     1   NaN
21  2025-09-19 15:24:59  7011  売埋(強制返済)  3689     1   4.0
一株当りの損益 : -36.0 円

報酬分布

報酬設計がシンプル過ぎるためか、報酬 0 に集まってしまったので縦軸を対数にしました。

観測値のトレンド

報酬 = 確定損益 + 含み損益(1 つの過去データで学習・推論)

次に、確定損益に加えて、含み損益の 1% を報酬に加えた場合を試しました。

推論結果(使用データ : ticks_20250819.xlsx, 7011)

これも同じデータで学習・推論した結果です。

                  注文日時 銘柄コード        売買  約定単価  約定数量    損益
0  2025-09-19 09:03:37  7011        売建  3718     1   NaN
1  2025-09-19 14:13:43  7011        買埋  3662     1  54.0
2  2025-09-19 14:14:24  7011        売建  3662     1   NaN
3  2025-09-19 15:12:02  7011        買埋  3681     1 -21.0
4  2025-09-19 15:12:45  7011        売建  3682     1   NaN
5  2025-09-19 15:24:59  7011  買埋(強制返済)  3689     1  -9.0
一株当りの損益 : 24.0 円

報酬分布

含み損益の 1% では小さすぎるのか、あまり大きな変化はありません。縦軸はまだ対数軸です。贔屓目に見ればプラス側にちょっと分布が寄ったような気がします。

観測値のトレンド

LONG ポジション(買建)が 1 回も選択されていません。取引回数が少なかったし、こんなものかもしれません。

報酬 = 確定損益 + 含み損益(49 の過去データで学習、1 つのデータで推論)

複数のデータで学習を重ねることでどの程度変化するかを確認しました。

最後のエピソード

49 個のデータ ticks_20250819.xlsx - ticks_20251029.xlsx, 7011 で新しいモデルを学習した最後の出力です。

-----------------------------------------
| rollout/                |             |
|    ep_len_mean          | 1.92e+04    |
|    ep_rew_mean          | 0.0553      |
| time/                   |             |
|    fps                  | 503         |
|    iterations           | 49          |
|    time_elapsed         | 199         |
|    total_timesteps      | 100352      |
| train/                  |             |
|    approx_kl            | 0.007784045 |
|    clip_fraction        | 0.0556      |
|    clip_range           | 0.2         |
|    entropy_loss         | -0.26       |
|    explained_variance   | 0.369       |
|    learning_rate        | 0.0003      |
|    loss                 | -0.0303     |
|    n_updates            | 24000       |
|    policy_gradient_loss | -0.012      |
|    value_loss           | 7e-05       |
-----------------------------------------
モデルを models/ppo_7011.zip に保存します。

推論結果(使用データ : ticks_20250819.xlsx, 7011)

ticks_20250819.xlsx, 7011 で推論した結果です。

                   注文日時 銘柄コード  売買  約定単価  約定数量   損益
0   2025-09-19 09:03:14  7011  売建  3723     1  NaN
1   2025-09-19 09:03:18  7011  買埋  3719     1  2.0
2   2025-09-19 09:03:52  7011  売建  3722     1  NaN
3   2025-09-19 09:05:15  7011  買埋  3720     1  0.0
4   2025-09-19 09:05:40  7011  売建  3724     1  NaN
..                  ...   ...  ..   ...   ...  ...
75  2025-09-19 15:15:20  7011  買埋  3682     1  3.0
76  2025-09-19 15:20:26  7011  売建  3688     1  NaN
77  2025-09-19 15:20:43  7011  買埋  3684     1  2.0
78  2025-09-19 15:24:45  7011  売建  3689     1  NaN
79  2025-09-19 15:24:47  7011  買埋  3689     1 -2.0

[80 rows x 6 columns]
一株当りの損益 : -12.0 円

報酬分布

分布に広がりが見られますが、まだ明らかにプラス側に偏っている、というような特徴は確認できません。報酬設計がまだシンプル過ぎるのかもしれませんが、この状態で更に学習を重ねて分布がどのように変わるのかに興味があります。

観測値のトレンド

今回も LONG ポジション(買建)が 1 回も選択されていません。推論に使用したデータ ticks_20250819.xlsx, 7011 の値動きがほぼ下降トレンドのせいもありますが、その割には収益がマイナスになっているのが気になります。

今日のデータを加えて再学習

今日取得したデータ ticks_20251030.xlsx, 7011 を加えた 50 個のデータで(今回学習したモデルに対して)追加学習をして推論パフォーマンスを確認してみます。

学習するティックデータ : ticks_20250819.xlsx
モデル models/ppo_7011.zip を読み込みます。
Wrapping the env in a DummyVecEnv.
-----------------------------
| time/              |      |
|    fps             | 808  |
|    iterations      | 1    |
|    time_elapsed    | 2    |
|    total_timesteps | 2048 |
-----------------------------
...
(以下省略)
...

詳細は、明日まとめます。

本記事は、基本的に結果を貼り付けただけのような内容なので、後日、読み返して説明が足りない部分を補足するようにします。

参考サイト

  1. マーケットスピード II RSS | 楽天証券のトレーディングツール
  2. マーケットスピード II RSS 関数マニュアル
  3. 注文 | マーケットスピード II RSS オンラインヘルプ | 楽天証券のトレーディングツール
  4. Gymnasium Documentation
  5. Stable-Baselines3 Docs - Reliable Reinforcement Learning Implementations
  6. PyTorch documentation
  7. PythonでGUIを設計 | Qtの公式Pythonバインディング
  8. Python in Excel alternative: Open. Self-hosted. No limits.
  9. Book - xlwings Documentation
にほんブログ村 株ブログ 株日記へ
PVアクセスランキング にほんブログ村

今日の日経平均株価 (2025-10-30)


【参考】
厳密なドル換算でありませんが、日経平均株価の 15 分足 4 本値を、
対応するドル円レートの 15 分足終値で割ったチャートです。
上の 15 分足チャートは Yahoo! Finance のデータで作成しました。

前日比 161.38 円安の 51,146.27 円で取引が始まりました。

9:38 に 51,547.93 円の高値をつけましたが、その後は値を消してマイナス圏で推移しました。

10:31 に 51,027.22 の安値を付けました。

その後持ち直してプラス圏に転じ、前場は前日比 89.20 円高の 51,396.85 円で取引を終えました。

後場は 51,484.66 円で取引が始まりましました。

12:49 に 51,657.28 円と高値を更新し、前場の高値に続いて更に史上最高値を更新しました。

13 時過ぎに下げに転じて 14:04 に 50,972.56 円と安値を更新しました。

その後持ち直して 14 時半ごろにプラスに転じ、15 時にかけて上げ幅を広げました。その後再び下げに転じて 15:15 には再びマイナスに転じました。

大引けは前日比 17.96 円高の 51,325.61 円と、僅かですがプラスで取引を終えました。これで連日の史上最高値更新になりました。

あっという間に 5 万円を超えてしまった日経平均株価について、現在のスケール感に慣れていません。🙇🏻

チャートを見てずいぶん乱高下しているように見えましたが、実は変化率は大きくありません。

【関連ニュース】

参考サイト

  1. 日経平均株価:リアルタイム推移・最新ニュース - 日本経済新聞
  2. ヒストリカルデータ - 日経平均プロフィル
にほんブログ村 株ブログ 株日記へ
PVアクセスランキング にほんブログ村