スーパートレンドMACD定量戦略
概要
本戦略は、スーパートレンド指標とMACD指標の潜在的なトレンド反転シグナルを総合的に活用し、RSI指標の買われすぎ・売られすぎシグナルと組み合わせることで、比較的安定かつ効率的なポジション構築および決済シグナル体系を形成しています。戦略名は「スーパートレンドMACD定量戦略」です。
戦略の原理
本戦略の核となるロジックは、スーパートレンド指標とMACD指標をポジション構築シグナルの判定基準として総合的に活用することにあります。
スーパートレンド部分では、スーパートレンド指標の方向転換を潜在的な反転シグナルとして採用します。スーパートレンドの方向が上から下に転換した場合に買いシグナルが発生し、下から上に転換した場合に売りシグナルが発生します。
MACD部分では、より低い時間足(日足)におけるMACD指標の傾きとゼロラインクロスを利用して潜在的な反転の機会を判断します。MACDの傾きの絶対値が大きく(閾値を超え)、かつ傾きが同方向で上昇を維持している場合にシグナルが発生します。MACD指標がゼロラインをクロスした場合も補助的なシグナルが発生します。MACD部分のシグナルはスーパートレンド部分よりも平滑です。
ポジション構築シグナルについては、スーパートレンドシグナルとMACDシグナルが同一方向である場合にのみ、ポジション構築の指示を出します。
さらに、決済部分ではRSI指標の買われすぎ・売られすぎシグナルも導入しています。RSIが80より大きい場合は売りシグナル、20より小さい場合は買いシグナルが発生し、反転タイミングの判断を補助します。
優位性分析
本戦略の最大の優位性は、指標シグナルの多様性にあります。異なる指標が互いに補完し合うことで、全体のシグナルがより安定し信頼性が高まります。
スーパートレンドの反転シグナルは比較的力強い短期トレンドを捉えることができ、MACDの傾きは中長期のトレンドの強さを判断して誤った反転に惑わされるのを防ぎます。そしてRSIはレンジ相場において買われすぎ・売られすぎの最適なポジション構築・決済タイミングを提示します。複数の指標シグナルを重ねることで、ノイズとなるトレードをフィルタリングし、勝率を高めることができます。
また、戦略の時間足設定も合理的です。スーパートレンドは時間足、MACD指標は日足を使用することで、取引頻度を確保しつつ、トレンド判断の安定性も両立しています。
リスク分析
本戦略の主なリスクは、指標間で矛盾するシグナルが発生する確率が比較的高いことです。例えば、スーパートレンドが偽の反転を発生させ、MACDシグナルが同期して発生しない場合があります。このような場合、不要な損失が発生する可能性があります。
また、RSI指標を決済タイミングの判断に用いることで、ポジションの保有期間を最大化できない場合があります(早すぎる決済や遅すぎる決済)。
最後に、MACDの傾きの閾値を大きく設定しすぎると、弱い反転の機会を逃す可能性があります。
最適化の方向性
本戦略は以下の点からさらなる最適化が可能です。
-
損切りメカニズムの導入。損失が一定割合を超えた場合に損切りを行う。
-
MACD傾きの判定に動的な閾値を導入。市場の変動が大きい場合は傾きの閾値を高く、安定している場合は低くする。
-
RSI指標による決済判断に、戻りの条件を追加。RSIが80を超えた後、明確な戻りが一度発生してから決済を検討する。
-
MACDに出来高を加えてテストし、シグナルの信頼性が向上するか確認する。
-
自動パラメータチューニングを試み、最適な設定を見つける。
まとめ
「スーパートレンドMACD定量戦略」は複数の指標を組み合わせてポジション構築・決済シグナルを提供します。その利点はシグナルが安定しており勝率が比較的高く、パラメータ最適化によってさらに向上させることができる点です。リスクと最適化の方向性も主にパラメータ設定のオーバーフィッティングの問題に集中しています。総じて、本戦略は実戦における応用価値が非常に高いと言えます。
/*backtest
start: 2022-12-19 00:00:00
end: 2023-12-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("SuperTrend.MACD Strategy", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100000, pyramiding=5, process_orders_on_close=true)
- 1

