【Protra】売買ルールにトレンド判定を使用する その1

売買ルールにトレンド判定を盛り込む方法を考えます。

Utilityの関数化と同様に、外部に出して汎用的なコードにします。

本記事で使用しているコードは、別記事での内容を踏まえたものとなっており、そちらを事前に ご覧になられることをお勧めします。
投資予算に制限を加える
共通コードを関数化して可読性を向上させる その2
共通コードを関数化して可読性を向上させる その3
【免責事項】
・本ブログの内容において、正当性を保証するものではありません。
・本ブログを利用して損失を被った場合でも一切の責任を負いません。
・最終的な決定は、ご自身の判断(自己責任)でお願い致します。

トレンド判定

検証に使用した売買ルールは、以下の逆張り手法です。

◆買い:以下を満たしたとき、翌日の始値が買う
・終値と移動平均(5日)との乖離率が-7%以下

◆売り:以下のいずれかを満たしたとき、翌日の始値で売る
・終値と移動平均(5日)との乖離率が0%以上
・購入から10日経過


トレンド判定にはいくつか手法がありますが、今回は「株価位置」を使用します。

過去 x日の最高値,最安値に対して、現在の株価がどの程度の位置にあるかを確認します。株価位置のイメージは以下の通り。

例えば、「現在の株価が最高値,最安値の中間値より大きい場合、現在その株価は上昇トレンドにある」と判断します。

「株価位置」を実装する

「株価が上昇傾向にあるときに購入」を実装していきます。

【Protra】共通コードを関数化して可読性を向上させる」のUtility.ptと同じく、トレンド判定ルールについても、 Protra\libに以下のコードをTrendCheck.ptを作成しました。

Tilib のHighLowを使用しています。やっていることは単純で、過去 75日の最高値と最安値を検索しているだけです。

27行目でしきい値を計算。ここでは、最高値と最安値の中間価をしきい値としています。

最終的に30行目で、当日の終値がしきい値より大きければ、1を返すようにしています。


続いて、ストラテジ本文。

20行目で、「TrendCheck」をインポートしています。

67-73行目でトレンド判定。stpflgという変数でフラグ管理しています。これは他の判定条件を追加したときに、一律にstpflgを使用することを見越してです。

71行目、「75日< 上場からの期間」 としているのは、過去日数を参照するときに上場から75日後でないと、最高値,最安値が計算されないためです。

90行目の買い条件にstpflgを追加。 なお、この売買ルールでは買い条件にのみトレンド判定を使用しています。

過去株価の参照に時間を要するため、実行時間は大幅に伸びる点に注意です。

効果の検証

トレンド判定の効果を検証します。予算は無制限、対象銘柄は売上上位500銘柄とします。

はじめに、トレンド判定なし。 

続いて、「当日の終値が、過去75日の最高値と最安値の中間値より高い場合、上昇トレンドと判断」を盛り込んだ場合です。

条件が厳しくなる分トレード数は減少し、それに伴い純利益も減少します。

一方で、ドローダウンが大きく緩和されていることがわかります。ただ勝敗率はあまり変わりないようです。つまりトレンド判定を導入したことで「大きく下落する株価」を避けることができています。