RSI Wパターンブレイクアウト戦略


作成日: 2023-09-17 18:24:17 最終変更日: 2023-09-17 18:24:17
コピー: 0 クリック数: 879
1
フォロー
1617
フォロワー

概要

この戦略は,RSI指標のW形を識別し,トレンド判断条件と組み合わせて,低価格,高価格の突破操作を実現する.通常のRSI超値,超値の判断と比較して,W形を識別することは,購入のタイミングをより明確に定着させることができる.

戦略原則

  1. RSI ((5)) を用いてW形を判断し,潜在的買い機会を見つけます。W形が超売り領域に出現すると,即日逆転を予告します。

  2. EMA20上では,EMA50をトレンドとして判断し,入場の大方向として判断する.

  3. W形が認識され,上昇傾向にあるとき,購入する.

  4. RSIが20を下回ると,既にポジションを持っている人は,さらにポジションを上げることができます.

  5. RSIが75を突破すると,オーバーバイの領域を表示し,ストップアウトを行う.

  6. 8%のストップポイントを設定し,そのポイントを超えるとストップアウトを行う.

優位分析

  1. W形状認識は入学の確実性を高めます

  2. 逆転の機会を逃さないために,トレンドを考慮してフィルター信号の無効性を判断します.

  3. RSIパラメータは5日間にわたるショートラインの機会を捕捉するように設定されています.

  4. ストップ・ストップ・ポイントを設定して,リスクをコントロールできます.

リスク分析

  1. W形状の認識はパラメータ設定に依存し,形状を誤認または誤判する可能性がある.

  2. 逆転の兆候として, 罠にかけられる危険性があります.

  3. RSIは偽の突破を起こす可能性があり,適切なフィルター信号が必要です.

  4. ストップポイントが大きすぎると,早めにストップする可能性があります.

最適化の方向

  1. 異なるRSI周期パラメータをテストし,最適なパラメータの組み合わせを見つけます.

  2. 形状判定条件を増やし,識別精度を向上させる.

  3. 他の指標と組み合わせた信号フィルタリングにより,誤った取引を減らす.

  4. ストップポジションを動的に調整し,ストップ戦略を最適化する.

  5. ストップ・ストップ戦略の最適化,利潤を保証する前提で保有周期の延長.

要約する

この戦略は,RSI W形を利用して効率的な反転突破操作を実現する.しかし,さらなる最適化パラメータ設定が必要であり,他の技術指標に付随して信号フィルタリングを行うことで,戦略の安定性と収益性のレベルを向上させる.

ストラテジーソースコード
/*backtest
start: 2023-08-17 00:00:00
end: 2023-09-16 00:00:00
period: 3h
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/
// © mohanee

//@version=4
strategy(title="RSI W Pattern strategy", pyramiding=2, shorttitle="RSI W Pattern", overlay = false)

//Strategy Rules
//ema20 is above ema50
//RSI5 making W pattern in oversold area  or just below 70 level  , you can define the value for parameter buyRsiEntry --- dont go beyond 70
//Exit when RSI reaches 75 

len = input(title="RSI Period", minval=1, defval=5)
buyRsiEntry = input(title="look for W pattern bottom edges well below RSI level (BUY) ", minval=10, defval=65, maxval=70)
//numberOfBars = input(title="Number of Bars in W pattern ", minval=4, defval=4, maxval=6)

emaL = input(title="Long Term EMA", minval=1, defval=50, maxval=200)
emaS = input(title="Short Term EMA", minval=1, defval=20, maxval=200)

stopLoss = input(title="Stop Loss %", minval=1, defval=8, maxval=10)

//rsiWp1=false

myRsi = rsi(close,len)

//longEmaVal=ema(close,emaL)
//shortEmaVal=ema(close,emaS)

entryEma=ema(close,5)  // This is used as filetr for BUY


isEma20AboveEma50=ema(close,emaS)>ema(close,emaL) ? true : false 

//W Pattern
//rsiWp1 =  myRsi>myRsi[1] and myRsi>=30 and myRsi[1]<myRsi[2] and myRsi[2]>myRsi[3]  and myRsi[3]<myRsi[4] //This is published one
rsiWp1 =    myRsi>myRsi[1] and myRsi>=30 and myRsi[1]<myRsi[2] and myRsi[2]>myRsi[3]  and myRsi[3]<myRsi[4] and (low[1]<=low[4] or low[3]<=low[4] ) // looking for recent low

//rsiWp1 =  myRsi>myRsi[1] and myRsi>=30 and myRsi[1]<myRsi[2] and myRsi[2]>myRsi[3]  and myRsi[3]<myRsi[4]  //Ths one has 92% win rate and 4.593 prfit factor

//long condition filters
//1. ema20 > ema50
//2. Rsi5 has W pattern
//3. current RSI <= 65 (parameter buyRsiEntry)  (dont go beyond 70 , becuase that is already overbought area)
//4. current price low/close is below 5 ema --- looking for pullback  -- Optional
longCondition =  isEma20AboveEma50 and rsiWp1   and (myRsi<=buyRsiEntry  and myRsi>=30)  
//and (low<entryEma or close<entryEma)  --- if this optional required , add it to above condition

patternText=" W "

barcolor(longCondition?color.yellow:na)

//initial entry
strategy.entry("RSI_W_LE", comment="Buy" , long=true, when=longCondition  )

//legging in to existing 
strategy.entry("RSI_W_LE",comment="Add", long=true, when=strategy.position_size>0 and crossover(myRsi,10 ))

//calculate stoploss value
stopLossValue=strategy.position_avg_price -  (strategy.position_avg_price*stopLoss/100) 


rsiPlotColor=longCondition ?color.yellow:color.purple


plot(myRsi, title="RSI", linewidth=2, color=color.purple)
//    plot(myRsi, title="RSI", linewidth=2, color=rsiWp1?color.yellow:color.purple)
    //plot(myRsi[1], title="RSI", linewidth=2, color=rsiWp1==true?color.yellow:color.purple)
    //plot(myRsi[2], title="RSI", linewidth=2, color=rsiWp1?color.yellow:color.purple)
    //plot(myRsi[3], title="RSI", linewidth=2, color=rsiWp1?color.yellow:color.purple)
    //plot(myRsi[4], title="RSI", linewidth=2, color=rsiWp1?color.yellow:color.purple)
    


hline(40, title="Middle Line", color=color.blue, linestyle=hline.style_dashed)
obLevel = hline(75, title="Overbought", color=color.red, linestyle=hline.style_dashed)
osLevel = hline(30, title="Oversold", color=color.purple, linestyle=hline.style_dashed)
fill(obLevel, osLevel, title="Background", color=#9915FF, transp=90)


plotshape(
	 longCondition ? myRsi[1] : na,
	 offset=-1,
	 title="W Pattern",
	 text=patternText,
	 style=shape.labelup,
	 location=location.absolute,
	 color=color.purple,
	 textcolor=color.yellow,
	 transp=0
	 )	 
	 
bgcolor(strategy.position_size>0?color.green:na, transp=40, title='In Long Position')

//take profit or close when RSI reaches 75    
takeProfit=crossover(myRsi,75)

//close when RSi reaches profit level 
strategy.close("RSI_W_LE", comment="TP Exit", qty=strategy.position_size,when=crossover(myRsi,75) and close>strategy.position_avg_price )


//close everything when stoploss hit  
longCloseCondition=close<(strategy.position_avg_price - (strategy.position_avg_price*stopLoss/100)  ) //or crossunder(myRsi,30)
strategy.close("RSI_W_LE", comment="SL Exit", qty=strategy.position_size,when=longCloseCondition )