2025-11-01

自動売買への道 (2025-11-01)

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

デイトレ用自作アプリ

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

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

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

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

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

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

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

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

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

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

高頻度な売買を減らすために、まずは損益 0 の売買に -0.5 円(-0.5 ティック)のペナルティをかけて、過去 51 日分のティックデータで学習をしました。

学習したモデルに対して 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:11  7011        売建  3715     1  NaN
1     2025-09-19 09:01:13  7011        買埋  3713     1  2.0
2     2025-09-19 09:01:15  7011        売建  3715     1  NaN
3     2025-09-19 09:01:17  7011        買埋  3714     1  1.0
4     2025-09-19 09:01:19  7011        売建  3716     1  NaN
...                   ...   ...       ...   ...   ...  ...
1803  2025-09-19 15:24:49  7011        買埋  3688     1  1.0
1804  2025-09-19 15:24:51  7011        売建  3689     1  NaN
1805  2025-09-19 15:24:53  7011        買埋  3688     1  1.0
1806  2025-09-19 15:24:59  7011        売建  3689     1  NaN
1807  2025-09-19 15:24:59  7011  買埋(強制返済)  3689     1  0.0

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

報酬分布

報酬分布では 0 付近(ややマイナス)の部分の頻度が(スリット状に)極端に少なくなっています。報酬 0 のペナリティの効果があったと言えそうですが、その分、損益が +1 のところが増えて、結果として売買頻度が高くなってしまったのかもしれません。

観測値のトレンド

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

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

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:20  7011        売建  3717     1   NaN
1   2025-09-19 09:06:47  7011        買埋  3727     1 -10.0
2   2025-09-19 09:06:49  7011        売建  3726     1   NaN
3   2025-09-19 09:51:04  7011        買埋  3743     1 -17.0
4   2025-09-19 09:51:12  7011        売建  3743     1   NaN
5   2025-09-19 10:00:34  7011        買埋  3730     1  13.0
6   2025-09-19 10:00:41  7011        売建  3729     1   NaN
7   2025-09-19 10:04:24  7011        買埋  3728     1   1.0
8   2025-09-19 10:04:33  7011        売建  3729     1   NaN
9   2025-09-19 10:19:46  7011        買埋  3737     1  -8.0
10  2025-09-19 10:19:58  7011        売建  3737     1   NaN
11  2025-09-19 10:56:02  7011        買埋  3732     1   5.0
12  2025-09-19 10:56:10  7011        買建  3732     1   NaN
13  2025-09-19 10:56:34  7011        売埋  3732     1   0.0
14  2025-09-19 10:56:43  7011        売建  3732     1   NaN
15  2025-09-19 11:00:07  7011        買埋  3728     1   4.0
16  2025-09-19 11:00:10  7011        売建  3729     1   NaN
17  2025-09-19 11:05:44  7011        買埋  3730     1  -1.0
18  2025-09-19 11:05:52  7011        売建  3730     1   NaN
19  2025-09-19 11:08:02  7011        買埋  3728     1   2.0
20  2025-09-19 11:08:03  7011        買建  3728     1   NaN
21  2025-09-19 11:08:05  7011        売埋  3728     1   0.0
22  2025-09-19 11:08:26  7011        売建  3727     1   NaN
23  2025-09-19 11:18:59  7011        買埋  3723     1   4.0
24  2025-09-19 11:19:16  7011        売建  3721     1   NaN
25  2025-09-19 12:50:06  7011        買埋  3706     1  15.0
26  2025-09-19 12:50:10  7011        売建  3706     1   NaN
27  2025-09-19 12:53:10  7011        買埋  3710     1  -4.0
28  2025-09-19 12:53:17  7011        買建  3711     1   NaN
29  2025-09-19 12:53:21  7011        売埋  3711     1   0.0
30  2025-09-19 12:53:41  7011        売建  3708     1   NaN
31  2025-09-19 13:07:25  7011        買埋  3677     1  31.0
32  2025-09-19 13:07:44  7011        売建  3672     1   NaN
33  2025-09-19 13:14:47  7011        買埋  3631     1  41.0
34  2025-09-19 13:14:49  7011        売建  3630     1   NaN
35  2025-09-19 13:33:53  7011        買埋  3645     1 -15.0
36  2025-09-19 13:34:09  7011        売建  3649     1   NaN
37  2025-09-19 13:56:39  7011        買埋  3679     1 -30.0
38  2025-09-19 13:57:19  7011        売建  3676     1   NaN
39  2025-09-19 13:58:25  7011        買埋  3678     1  -2.0
40  2025-09-19 13:58:42  7011        売建  3674     1   NaN
41  2025-09-19 14:14:40  7011        買埋  3663     1  11.0
42  2025-09-19 14:15:04  7011        売建  3667     1   NaN
43  2025-09-19 14:16:31  7011        買埋  3662     1   5.0
44  2025-09-19 14:16:34  7011        売建  3662     1   NaN
45  2025-09-19 14:18:07  7011        買埋  3662     1   0.0
46  2025-09-19 14:18:26  7011        売建  3662     1   NaN
47  2025-09-19 14:24:07  7011        買埋  3670     1  -8.0
48  2025-09-19 14:24:28  7011        売建  3669     1   NaN
49  2025-09-19 14:33:28  7011        買埋  3670     1  -1.0
50  2025-09-19 14:33:31  7011        売建  3670     1   NaN
51  2025-09-19 14:46:41  7011        買埋  3657     1  13.0
52  2025-09-19 14:46:43  7011        売建  3655     1   NaN
53  2025-09-19 14:48:48  7011        買埋  3653     1   2.0
54  2025-09-19 14:48:55  7011        売建  3654     1   NaN
55  2025-09-19 15:24:59  7011  買埋(強制返済)  3689     1 -35.0
一株当りの損益 : 16.0 円
モデルへの報酬分布
n: 19387, mean: -0.000, stdev: 0.006
観測数 : 9

報酬分布

まずは損益 0, +1 の売買にペナルティをかけている分、分布に歯抜けがありますが、報酬を最大化するような分布にはなっていません。学習を重ねるとどうのように変化するか確認する必要があります。

観測値のトレンド

損益 0, +1 の売買にペナルティをかける ②

過去 51 日分のティックデータで学習させました。

推論結果(使用データ : 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:11  7011  売建  3715     1  NaN
3    2025-09-19 09:01:13  7011  買埋  3713     1  2.0
4    2025-09-19 09:01:15  7011  売建  3715     1  NaN
..                   ...   ...  ..   ...   ...  ...
279  2025-09-19 15:20:59  7011  買埋  3684     1  1.0
280  2025-09-19 15:21:01  7011  売建  3686     1  NaN
281  2025-09-19 15:21:05  7011  買埋  3685     1  1.0
282  2025-09-19 15:21:07  7011  売建  3687     1  NaN
283  2025-09-19 15:21:09  7011  買埋  3686     1  1.0

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

取引明細を全て文字で表示しても判断が大変なので、時系列で損益を確認できるようにしました。

14 時前の大きな損失が気になります。何回か推論を繰り返したところ、毎回の損益は少々異なるものの、概ねこの辺で大きな損失を出しています。

損失が大きくなる前に返済するようにペナルティを与えるようにした方が良いかもしれません。

報酬分布

今回も横軸 0 近辺でのスリット状の空白ができています。

観測値のトレンド

含損益のトレンドをみると、長く続く含み損の方が多いように見えます。

次のステップ

含み損が大きくなるまで建玉を返済しない状態については強制的に損切りさせる手もありますが、現時点ではペナルティで解消できるかどうか確認してみることにします。

参考サイト

  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 件のコメント:

コメントを投稿