楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で利用できる マーケットスピード II RSS を活用して Python であれこれ取り組んでいます。この「自動売買への道」のトピックでは、プログラミングの話題にも踏み込んで、日々の活動をまとめていきます。
デイトレ用自作アプリ
以下は株価に関連する情報の流れを示しています。
楽天証券では、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 近辺でのスリット状の空白ができています。
観測値のトレンド
含損益のトレンドをみると、長く続く含み損の方が多いように見えます。
次のステップ
含み損が大きくなるまで建玉を返済しない状態については強制的に損切りさせる手もありますが、現時点ではペナルティで解消できるかどうか確認してみることにします。
参考サイト
- マーケットスピード II RSS | 楽天証券のトレーディングツール
- マーケットスピード II RSS 関数マニュアル
- 注文 | マーケットスピード II RSS オンラインヘルプ | 楽天証券のトレーディングツール
- Gymnasium Documentation
- Stable-Baselines3 Docs - Reliable Reinforcement Learning Implementations
- PyTorch documentation
- PythonでGUIを設計 | Qtの公式Pythonバインディング
- Python in Excel alternative: Open. Self-hosted. No limits.
- Book - xlwings Documentation










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