(楽天証券の口座で取引する前提で)デイトレ自動売買を実現するには、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 のアプリの書き直しが必要になるので、すぐに移行ができませんが、進捗を本ブログでアップデートしていきます。
参考サイト


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