2025-03-10

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

(楽天証券の口座で取引する前提で)デイトレ自動売買を実現するには、Windows / Excel 上で マーケットスピード II RSS(以下、単に RSS と呼びます)を利用することがまずは確実な方法だと考え、Windows / Excel / VBA を使って自動売買のためのマクロを作ってリアルタイムの取引シミュレーションを始めています。

自動売買システムの開発状況は、参考サイト [2] にまとめてあります。

今日の Dry Run (2025-03-10)

評価用の銘柄は、「三菱UFJフィナンシャルG (8306)」に固定しています。この銘柄を評価用に選んだ理由は、出来高が多く(= 板が厚く)、試験運用を始めるときに使えそうな価格帯の株価と判断しているからです。

ティックデータと Parabolic SAR

RSS から取得したティックデータと1分足の OHLC データから Excel VBA のマクロが算出した Parabolic SAR(以降 PSAR と呼びます)を、事後に Python の自作シミュレータ・アプリで読み込んでプロットしたものです。

売買履歴(シミュレーション)

売買単位は 100 株で、ナンピン(難平)無しにこの 100 株だけで建玉を売買するという想定です。

VBA マクロが書き込んだ Excel 上の売買履歴のシートを Python で読み込んで HTML のテーブルに変換しました。

注文番号 時刻 売買 金額 損益 最大益 最大損 備考
1 09:11:02 売建 191,950 建玉, period = 2, slope =2.0, IQR =2.00
1 09:13:02 買埋 192,550 -600 0 -600 返済, period = 3
2 09:14:02 買建 192,750 建玉, period = 1, slope =2.0, IQR =4.50
2 09:22:01 売埋 192,050 -700 50 -750 返済, period = 8
3 09:35:01 買建 192,500 建玉, period = 1, slope =1.0, IQR =1.00
3 09:54:01 売埋 192,500 0 400 -350 返済, period = 19
4 10:03:01 買建 192,950 建玉, period = 1, slope =0.5, IQR =1.00
4 10:21:01 売埋 192,750 -200 50 -250 返済, period = 18
5 10:23:01 売建 192,650 建玉, period = 2, slope =1.0, IQR =0.63
5 10:31:01 買埋 192,800 -150 50 -200 返済, period = 9
6 10:37:01 買建 192,900 建玉, period = 6, slope =0.5, IQR =0.50
6 10:45:01 売埋 192,800 -100 100 -150 返済, period = 13
7 10:57:01 買建 193,050 建玉, period = 1, slope =0.5, IQR =0.50
7 11:09:01 売埋 193,000 -50 100 -100 返済, period = 12
8 11:19:01 買建 193,200 建玉, period = 3, slope =1.0, IQR =0.50
8 11:29:50 売埋 193,350 150 300 -50 強制(前引け前), period = 13
9 12:35:01 買建 193,500 建玉, period = 1, slope =0.5, IQR =0.50
9 12:36:01 売埋 193,400 -100 50 -100 返済, period = 1
10 12:37:01 売建 193,300 建玉, period = 1, slope =1.0, IQR =1.00
10 12:42:01 買埋 193,500 -200 0 -300 返済, period = 5
11 12:51:01 売建 193,250 建玉, period = 1, slope =1.0, IQR =1.25
11 13:06:01 買埋 193,350 -100 200 -100 返済, period = 15
12 13:07:01 買建 193,400 建玉, period = 1, slope =0.5, IQR =1.00
12 13:16:01 売埋 193,200 -200 50 -250 返済, period = 9
13 13:17:01 売建 193,100 建玉, period = 1, slope =1.0, IQR =1.00
13 13:34:01 買埋 193,000 100 250 -150 返済, period = 17
14 13:38:01 売建 192,850 建玉, period = 1, slope =0.5, IQR =0.50
14 13:42:01 買埋 193,000 -150 50 -150 返済, period = 4
15 13:43:01 買建 193,000 建玉, period = 1, slope =0.5, IQR =0.50
15 13:49:01 売埋 192,850 -150 0 -150 返済, period = 6
16 13:54:01 売建 192,750 建玉, period = 5, slope =1.0, IQR =0.50
16 13:59:01 買埋 192,900 -150 0 -200 返済, period = 9
17 14:00:01 買建 192,950 建玉, period = 1, slope =0.5, IQR =0.00
17 14:10:01 売埋 192,950 0 200 -100 返済, period = 10
18 14:16:01 売建 192,900 建玉, period = 6, slope =1.0, IQR =1.00
18 14:29:01 買埋 192,900 0 200 -50 返済, period = 18
19 14:32:01 売建 192,500 建玉, period = 1, slope =0.5, IQR =1.50
19 15:02:01 買埋 192,250 250 400 -100 返済, period = 30
20 15:05:01 買建 192,350 建玉, period = 3, slope =1.0, IQR =1.00
20 15:15:01 売埋 192,550 200 200 0 返済, period = 12
21 15:16:01 売建 192,550 建玉, period = 1, slope =0.5, IQR =0.50
21 15:17:01 買埋 192,550 0 50 -50 返済, period = 1
22 15:22:01 買建 192,450 建玉, period = 1, slope =0.5, IQR =0.50
22 15:23:01 売埋 192,300 -150 0 -150 返済, period = 1
--- --- --- 実現損益 -2,300 --- --- ---

今日の損益は -2,300 円でマイナスでした。

今日の 8306 の株価は、高値 1,938.0 円、安値 1,928.0 円で 20.0 円差でした。暫定で決めた良し悪しの尺度を算出しました。

本日の Dry Run の成績

実現損益 -2,300 ÷ (20.0 × 100 ) × 100 = -115.0 %

Dry Run のパラメータ

今回試したパラメータは下記の通りです。

建玉の売買条件
条件 説明
建玉を持つ diff > 0
建玉の返済 PSAR のトレンド反転で建玉を返済。損切・利確条件は無し。

diff は PSAR トレンドが反転した時にドテン売買をした場合の含み損益。実際にはドテン売買をせずに、1 分後以降に売買するかどうかを判定する指標に利用する。

週末にパラメータの組み合わせを探した結果、今日はシンプルなパラメータ設定で確認しましたが、損切無しでは利益がでません。いや、損切条件も評価しているのですが、効率的な損切は難しいです。😭

方針の変更

RSS では専用の関数を使えば四本値データを Excel ファイルに流し込んでくれるので、これを利用して PSAR を算出してトレンド反転のタイミングを建玉売買に利用、さらに RSS からティックデータも取得できるので、この情報で利確・損切を秒単位で判定、というアプローチでした。

トレンドへの反応を早くするために 1 分足の四本値を使っていましたが、例えば 10:00 の四本値が確定するのは 10:01 より後になります。VBA アプリでは 10:01:01 に四本値を読み取って、平均足、PSAR などを算出しています。1 分程度の遅れは大したことがないと思っていましたが、PSAR のデフォルトのパラメータでは、そうでもなさそうだということも判ってきました。

それでは、パラメータをチューニングするのか?

まあ、当然パラメータ・チューニングはすべきなのですが…、その前に、そもそも四本値データでなければ PSAR を算出できないのだろうか、と疑問を持ってしまいました。

ティックデータ(厳密には 1 秒間隔で取得しているデータ)があるので、このデータだけで PSAR 相当の算出ができれば、四本値データを取得するためのタイミングを考慮する必要がなくなり、システム全体がシンプルになります。なにより、ティックデータから算出するのですからレスポンスが良くなるはずです。

PSAR を使い始めたころは、四本値データを利用できるのであれば、公開されている PSAR のプログラムを転用して PSAR を算出していました。しかし、毎日使っていると何をどうやって算出しているのかがさすがに腹落ちしてきます。そうなるとティックデータでも同等な算出ができそうだということが判ってきます。あとは手間を惜しむか惜しまないかです。

ということで、今日はティックデータだけで PSAR 相等の算出ができるプログラムを Python で作っていました。

とりあえず期待した通りの動作をするプログラム(クラス)ができたので、ちょっと極端なパラメータで、今日のティックデータのログから算出した例を示しました(下図)。PSAR の AF(Acceleration Factor, 加速因数)の挙動を見たかったので、下段に AF のトレンドをプロットしています。

自動売買をするのなら、トレンド追従を追求しすぎず、最初はこのぐらい大らかなところから始めた方が無難なのかもしれません。😜

パラメータのチューニングや現行の VBA のアプリの書き直しが必要になるので、すぐに移行ができませんが、進捗を本ブログでアップデートしていきます。

参考サイト

  1. マーケットスピード II RSS | 楽天証券のトレーディングツール
  2. 私の株日記: 自動売買への道 (2025-02-21)
にほんブログ村 株ブログ 株日記へ
PVアクセスランキング にほんブログ村

0 件のコメント:

コメントを投稿