今回は、テクニカル指標 MACDを検証してみたいと思います。
・投資予算に制限を加える
・共通コードを関数化して可読性を向上させる その2
・共通コードを関数化して可読性を向上させる その3
・本ブログの内容において、正当性を保証するものではありません。
・本ブログを利用して損失を被った場合でも一切の責任を負いません。
・最終的な決定は、ご自身の判断(自己責任)でお願い致します。
MACDを活用した売買ポイントの検証
こちらのページでも紹介されている通り、MACD売買ポイントは一般に以下とされます。
◆買い:先行するMACDが、遅行する同平均(SIGNAL)を上抜く
◆売り:先行するMACDが、遅行する同平均(SIGNAL)を下抜く
これをProtraで、以下のように記述しました。
◆買い:以下を満たしたとき、翌日の始値が買う
・MACD(5-20) > signal(9)となったとき
◆売り:以下のいずれかを満たしたとき、翌日の始値で売る
・MACD(5-20) < signal(9)となったとき
●予算無制限、対象銘柄:売上上位500銘柄
結果はこちら。
取引回数が尋常じゃないほど多いですね。MACDの買いシグナルはしょっちゅう生じているためです。またリーマンショックの影響を顕著に受けています。このままでは、とてもじゃないですが使用できません。
続いて こちらで示されている、ダイバージェンス現象をコードに取り入れてみます。そのままの条件を入れると コードが複雑になるため、少し改変して以下のようにしました。
◆買い:以下を満たしたとき、翌日の始値が買う
・MACD(5-20) > signal(9)となったとき かつ
・上記のとき直近の同条件時より、MACDの値が大きい場合 かつ
・上記のとき直近の同条件時より、終値が小さい場合
◆売り:以下のいずれかを満たしたとき、翌日の始値で売る
・MACD(5-20) < signal(9)となったとき
●予算無制限、対象銘柄:売上上位500銘柄
スパゲッティコード化してきました…。
74-95行目の追加部分は、以下のような処理がされています。
- MACDがSignalを 初めて上抜きしたとき、
$buyflag[i]
に1が入る。
$recordflag[i]には、この日のMACDの値を入れています。
また2.以降、この日の終値を参照するため、$dayflagに0を入れています。 - ifを抜けたところで、$dayflagに+1しています。
- $buyflag[i]が1で、MACDがSignalを上抜きしたときに、1回目の上抜き日と比較し、MACDの値が大きい かつ 終値が小さい 場合にstpflag1に1を入れます(買い条件)。
$buyflag[i]は0に戻します。 - $buyflag[i]が1で、MACDがSignalを上抜きしたときでも、3.の条件を満たさない場合は、この日を基準点とするため、$recordflag[i]と$dayflag[i]をリセットします。
結果がこちら。多少改善したものの、あまり傾向は変わらないようです。
買いシグナル:1回目と2回目の期間に制限を加えたり、両日の終値の変化率にしきい値を設けるような調整はできそうです。
また勝ちトレードの平均期間が20日以上に対し、負けトレードは約10日となっています。この辺りに改善のヒントがありそうです。
おまけ
売条件,トレンド条件を調整すると、わりと右肩上がりの利益が得られます。(オーバーフィッティングに注意)