MACDとRSIに基づくトレンドフォロー反転戦略


作成日: 2023-12-18 17:53:38 最終変更日: 2023-12-18 17:53:38
コピー: 0 クリック数: 660
1
フォロー
1621
フォロワー

MACDとRSIに基づくトレンドフォロー反転戦略

概要

この戦略は,MACD,EMA,RSIの3つの指標を統合して,トレンドを追跡し,反転取引を行う.MACDが信号線を上方に通過し,閉店価格がEMA平均線より高いときに買入シグナルを生成し,MACDが信号線を下方に破って,閉店価格がEMA平均線より低いときに売出シグナルを生成し,トレンドをキャプチャする.また,RSIが超買い超売り領域に達すると,反転取引を行う.

戦略原則

  1. MACDdiffsとEMAを計算する.
   fastMA = ema(close, fast)  
   slowMA = ema(close, slow)
   macd = fastMA - slowMA
   signal = sma(macd, 9)
   ema = ema(close, input(200))
  1. 買い信号を生成:MACD差値 ((macd-signal) が0軸を横切って,閉盘価格はEMA平均線より高い.
   delta = macd - signal 
   buy_entry= close>ema and delta > 0
  1. 販売シグナルを生成:MACD差値の下0軸破れ,閉盘価格はEMA平均線より低い.
   sell_entry = close<ema and delta<0 
  1. RSIが超買い超売り領域に入ると,反転取引を行う.
   if (rsi > 70 or rsi < 30)
       reversal := true

優位分析

  1. トレンドフォローと反転取引を組み合わせて,主要トレンドを追跡し,反転点で利益を得ることができます.
  2. MACDを使って,主要トレンドの方向を判断し,偽の突破を避ける.
  3. EMAのフィルターで部分的な騒音が消える
  4. RSI指標は,反転のポイントを判断し,戦略の利益の余地を増強する.

リスク分析

  1. 逆転取引は大きなトレンドの市場では損失を招く可能性があります.
  2. パラメータを正しく設定しない場合,取引頻度やスライドポイントコストが増加します.
  3. 逆転信号が遅れて,最適な入場時間を逃す可能性があります.

解決策は

  1. パラメータを最適化して,最適なパラメータの組み合わせを見つけます.
  2. 逆転取引のRSI値を適切に調整する.
  3. 損失を抑えるため,ストップを追加することを検討してください.

最適化の方向

  1. 異なる長さのEMA平均線パラメータをテストする.
  2. MACDパラメータを最適化して,最適なパラメータの組み合わせを見つけます.
  3. 異なる反転RSI値をテストする.
  4. 他の指標の組み合わせを考慮する.

要約する

この戦略は,MACD,EMA,RSIの指標を総合的に使用し,トレンド追跡と反転取引の有機的な組み合わせを実現します. MACDは主要なトレンドの方向を判断し,EMAは波浪のノイズ,RSIの指標は反転点の位置を捕捉します. この多指標の組み合わせは,市場動向をより正確に判断し,誤った取引を減らすと同時に,利益の確率を高めることができます.

ストラテジーソースコード
/*backtest
start: 2023-11-17 00:00:00
end: 2023-12-17 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mbuthiacharles4

//Good with trending markets
//@version=4
strategy("CHARL MACD EMA RSI")

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)

ema = ema(close, input(200))

rsi = rsi(close, input(14))
//when delta > 0  and close above ema buy

delta = macd - signal

buy_entry= close>ema and delta > 0
sell_entry = close<ema and delta<0 
var bought = false
var sold = false
var reversal = false
if (buy_entry and bought == false and rsi <= 70) 
    strategy.entry("Buy",true , when=buy_entry)
    bought := true
    
strategy.close("Buy",when= delta<0 or rsi > 70)
if (delta<0 and bought==true)
    bought := false

//handle sells

if (sell_entry and sold == false and rsi >= 30)
    strategy.entry("Sell",false , when=sell_entry)
    sold := true

strategy.close("Sell",when= delta>0 or rsi < 30)
if (delta>0 and sold==true)
    sold := false
    
if (rsi > 70 or rsi < 30)
    reversal := true
    placing = rsi > 70 ? high :low
    label.new(bar_index, placing, style=label.style_flag, color=color.blue, size=size.tiny)
if (reversal == true)
    if (rsi < 70 and sold == false and delta < 0)
        strategy.entry("Sell",false , when= delta < 0)
        sold := true
        reversal := false
    else if (rsi > 30 and bought == false and delta > 0)
        strategy.entry("Buy",true , when= delta > 0)
        bought := true
        reversal := false