2つの移動平均RSIインジケーターの組み合わせ逆転戦略

作者: リン・ハーンチャオチャン開催日:2023年11月10日 18:01:09
タグ:

img

概要

この戦略は,二重移動平均,相対強度指数 (RSI) とパラボリックSAR (PSAR) を組み合わせ,価格逆転点を特定し,それに応じて購入・販売決定を行う.これは逆転取引戦略に属します.

原則

この戦略は主に以下の技術指標を用いて価格転換点を決定しています

  1. ダブル・ムービング・アベア:高速移動平均 (MA・スピードライン) とスロームービング・平均 (MA・スピードライン) を計算する.高速線がスローラインを越えると牛市場が伸び,高速線がスローラインを下回ると熊市場が伸びる.

  2. RSI インディケーター: RSI は,平均的な閉店利益と平均的な閉店損失を計算することによって,過買いと過売り状態を判断します. RSI 70 以上の値は過買いゾーン,30 未満は過売りゾーンを示します.

  3. PSAR インディケーター:パラボリック SAR はトレンド方向を示します.価格の下のSAR ポイントは牛市場を示し,価格上の SAR ポイントは熊市場を示します.

  4. ADX インディケーター: ADX は,指向的な動きを計算することによってトレンドの強さを測定する. ADX 20 以上の値はトレンド市場を示し,20 未満は統合を示します.

購入・販売シグナルの論理は次のとおりです

購入シグナル: 急速なMAは遅いMAを上回り,RSIは30を下回る (過売れ),SARは価格を上回り,ADXは20を下回る.

セールシグナル: 急速なMAは遅いMAを下回り,RSIは70以上 (過剰購入),SARは価格を下回り,ADXは20以上.

買い・売りシグナルが出ると,それぞれ 10% の株式を保有するポジションを 取る.逆転シグナルが失敗すると,タイミングでポジションを閉じる.

利点

  • デュアルMAは主要なトレンド方向を決定し,RSIとSARは誤った信号をフィルタリングし,逆転点を正確に識別することができます.

  • 複数の指標を組み合わせることで 単一の指標から誤った信号が 来るのを防ぎます

  • ストップ・ロスは過剰なリスクを回避します

  • シンプルで明快なロジックで 簡単に実行できます

  • 上昇傾向と下落傾向の両方に有効です

リスク と 解決策

  • ダブルMAsは誤ったブレイクアウトがある可能性があります.より長いMA期間またはボリンジャー帯を追加することを検討して真のブレイクアウトを確認します.

  • RSIのパラメータを細かく調整し,RSIの信号を確認するために他の指標を追加します.

  • ADXが20を下回ると取引を中止し,方向性のない市場での逆転取引を避けるか ADX期間を短縮します.

  • SetStringryストップ損失は不必要な損失を引き起こす可能性があります.市場の変動に基づいて合理的なストップ損失を設定します.

  • 高い取引頻度.低取引頻度に MA 期間を調整する.

改善

  • 最適な組み合わせを見つけるために,異なる MA 期間をテストします.

  • RSIのパラメータをテストして,過買い/過売を判断する.

  • 論理を豊かにするために,ボリンジャー帯,KDJなどの他の指標を追加します.

  • ダイナミックストップ・ロスを設定する

  • ポジションサイズを追加して 傾向をよく追います

  • ADX パラメータをテストして,トレンド強度を決定する最良の値を見つけます.

  • オートストップ損失機能を追加します

結論

この戦略は,デュアルMAを使用して主要なトレンド方向を特定し,追加の信号フィルタリングのためにRSI,SARを使用します.パラメータ最適化後に逆転点を効果的に決定し,逆転の周りのトレンドを捕捉することができます.実際は,適切なストップ損失と継続的なパラメータ最適化によるリスク管理が重要です.全体として,この戦略は明確な論理と簡単な操作で指標を組み合わせ,信頼性の高い逆転取引戦略です.


/*backtest
start: 2023-10-10 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//Based on Senpai BO 3
strategy(title="Senpai_Strat_3", shorttitle="Senpai_Strat_3", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
src = close

//psar
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
psar = sar(start, increment, maximum)


//ADX Init
adxlen = input(30, title="ADX Smoothing")	
dilen = input(30, title="DI Length")	
dirmov(len) =>	
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]
	
adx(dilen, adxlen) => 	
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]
	
[sig, up, down] = adx(dilen, adxlen)	


// BB Init
source = close
length = input(50, minval=1)
mult = input(0.5, title="Mult Factor", minval=0.001, maxval=50)
alertLevel=input(0.1)
impulseLevel=input(0.75)
showRange = input(false, type=bool)


//RSI CODE
up1 = rma(max(change(src), 0), 14)
down1 = rma(-min(change(src), 0), 14)
rsi = down1 == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up1 / down1))


//BB CODE
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev
bbr = source>upper?(((source-upper)/(upper-lower))/10): source<lower?(((source-lower)/(upper-lower))/10) : 0.05
bbi = bbr - nz(bbr[1]) 

//////////////////// Algo

//if (rsi>50 and n1>n2)
   //strategy.exit("Close", "Short")
  // strategy.entry("Long", strategy.long)
//if (rsi<50 and n2>n1)
   //strategy.exit("Close", "Long")
//   strategy.entry("Short", strategy.short)

//col = ma30 > ma50 > ma200 and rsi <=53?lime: ma50 < ma200  and rsi >= 60?red : silver
//short1 =  sig<18.5 and high>=upper and rsi>=70 and psar<close = 100%
//long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close = 100%
short1 =  sig<18.5 and high>=upper and rsi>=70 and psar<close
long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close

//Entry

long = long1[1] == 0 and long1 == 1
short = short1[1] == 0 and short1 == 1
longclose = long[3] == 1
shortclose = short[3] == 1
strategy.entry("short", strategy.short,qty = 10, when=short)
strategy.entry("long", strategy.long,qty=10, when=long)
strategy.close("long",when=longclose)
strategy.close("short",when=shortclose)



/////////////////////
///PLOT

plot(long,"long",color=green,linewidth=1)
plot(short,"short",color=red,linewidth=1)
plot(longclose,"close",color=blue,linewidth=1)
plot(shortclose,"close",color=orange,linewidth=1)


//plot(short,"short",color=red,linewidth=1)
//

//strategy.exit(id="long",qty = 100000,when=longclose)
//strategy.exit(id="short",qty = 100000,when=shortclose)

//strategy.exit(id="Stop", profit = 20, loss = 100)

もっと