RSIとMACDのデュアルフィルタリングを使用したダイナミックストップロストレンドフォロー戦略

RSI MACD SL (Stop Loss) TA (Technical Analysis)
作成日: 2025-02-20 16:50:43 最終変更日: 2025-02-20 16:50:43
コピー: 0 クリック数: 289
2
フォロー
319
フォロワー

RSIとMACDのデュアルフィルタリングを使用したダイナミックストップロストレンドフォロー戦略 RSIとMACDのデュアルフィルタリングを使用したダイナミックストップロストレンドフォロー戦略

概要

この戦略は,MACDとRSIの二重指数フィルタリングに基づくトレンド追跡システムであり,ダイナミックストップメカニズムを統合している.この戦略は,主にMACDの交差信号によって取引機会を生成し,RSIを二次確認として使用し,リスクを制御するためにパーセンテージストップを導入している.戦略の核心は,技術指標の組み合わせを使用して取引信号の信頼性を高め,ダイナミックストップによって利益を保護することです.

戦略原則

戦略はMACD ((12,26,9) とRSI ((14)) を主要な指標として採用している.入場信号は同時に2つの条件を満たす必要がある:MACD金叉とRSIが超売り領域 ((デフォルト40以下) で多行,MACDデフォルトとRSIが超買い領域 ((デフォルト59以上) で空行.システムはまた,3%のダイナミックストップロスを設定し,価格が設定されたパーセントを超えて不利な方向に移動すると,自動で平行してリスクを制御する.さらに,戦略には,特定の取引時間範囲を設定する時間をフィルターする.

戦略的優位性

  1. ダブル指標のフィルタリングにより,取引信号の信頼性が向上し,偽信号が減少する.
  2. ダイナミック・ストップ・メカニズムは,取引毎のリスクを効果的にコントロールします.
  3. 戦略のパラメータは,異なる市場条件に応じて柔軟に調整できます.
  4. タイムフィルター機能により,特定の時間帯で取引を行うことができます.
  5. 資金管理に有利な資金保有率を採用

戦略リスク

  1. 波動的な市場では,頻繁に取引信号が発生し,取引コストが増加する可能性があります.
  2. 固定パーセンテージ・ストップは,波動性の高い市場において,早めの平仓につながる可能性があります.
  3. MACDは遅滞の指標として,急速な市場で重要な価格動きを逃す可能性があります.
  4. RSIの値の設定は,異なる市場に対して最適化する必要があります.
  5. 取引コストと滑り点は,戦略の実績に影響を与える可能性があります.

戦略最適化の方向性

  1. 波動率指標を導入して,ストップ・ローズ・パーセンテージを動的に調整する.
  2. トレンド強度フィルターを追加し,波動的な市場での過度取引を避ける.
  3. 利潤を守るため,移動式ストップを追加することを検討してください.
  4. RSIとMACDのパラメータ設定を最適化して,異なる市場周期に適応させる.
  5. 取引量分析と信号信頼性の向上

要約する

これは,構造が整った,論理が明確なトレンド追跡戦略である.MACDとRSIの組み合わせを使用することで,取引信号の質を効果的に向上させる.動的ストップダメージの設計は,リスクを制御するのに役立ちます.この戦略は,トレンドが明確である市場で使用するのに適していますが,特定の市場の特徴に応じてパラメータの設定を調整する必要があります.推奨された最適化方向によって,戦略の安定性と信頼性がさらに向上することができます.

ストラテジーソースコード
/*backtest
start: 2025-02-13 10:00:00
end: 2025-02-19 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BNB_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © eagle916
//@version=5
strategy("EAG MACD + RSI Strategy",overlay=true, initial_capital = 300, default_qty_value = 10, default_qty_type = "percent_of_equity", commission_type=strategy.commission.percent, commission_value=0.1)


// Input para el RSI
rsi_length = input.int(14, title="RSI Length", minval=1)
rsi_overbought = input.int(59, title="RSI Overbought Level", minval=1, maxval=100)
rsi_oversold = input.int(40, title="RSI Oversold Level", minval=1, maxval=100)

// Input para el MACD
macd_length = input.int(12, title="MACD Length", minval=1)
macd_overbought = input.int(26, title="MACD Overbought Level", minval=1, maxval=100)
macd_signal = input.int(9, title="MACD Signal Level", minval=1, maxval=100)

// Input para el porcentaje de pérdida (stop loss)
stop_loss_percent = input.float(3.0, title="Porcentaje de Stop Loss (%)", minval=0.1, step=0.1)

// Calcular RSI
rsi_value = ta.rsi(close, rsi_length)

// Calcular MACD
[macdLine, signalLine, _] = ta.macd(close, macd_length, macd_overbought, macd_signal)
macd_crossup = ta.crossover(macdLine, signalLine)   // Cruce al alza del MACD
macd_crossdown = ta.crossunder(macdLine, signalLine) // Cruce a la baja del MACD

// Condiciones de compra y venta
buy_condition = macd_crossup and rsi_value <= rsi_oversold
sell_condition = macd_crossdown and rsi_value >= rsi_overbought


// Registrar precio de entrada
var float entry_price = na
if strategy.position_size == 0
    entry_price := na

// Mostrar señales de compra y venta en la gráfica principal
plotshape(series=buy_condition, title="Señal de Compra", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") // Compra debajo de la vela
plotshape(series=sell_condition, title="Señal de Venta", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") // Venta encima de la vela

// Órdenes de estrategia
if buy_condition 
    strategy.entry("Compra", strategy.long)
    entry_price := close
if sell_condition 
    strategy.entry("Venta", strategy.short)
    entry_price := close

// Calcular el precio de stop loss
long_stop_loss = entry_price * (1 - stop_loss_percent / 100)
short_stop_loss = entry_price * (1 + stop_loss_percent / 100)

// Cerrar posición si el precio va en contra el porcentaje definido por el usuario
if strategy.position_size > 0 and close < long_stop_loss
    strategy.close("Compra", comment="Stop Loss Compra")

if strategy.position_size < 0 and close > short_stop_loss
    strategy.close("Venta", comment="Stop Loss Venta")