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アクセスランキング にほんブログ村

0 件のコメント:

コメントを投稿