モメント インディケーター RSI リバーサル 取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-03 12:09:48
タグ:

img

概要

この戦略では,まず ADX と SMA をより高いタイムフレームで計算し,トレンドの方向性と変化を特定します.その後,RSI は,より低いタイムフレームで計算され,取引信号を生成するために過剰購入および過剰販売条件を特定します.

戦略の論理

  1. ADXが上昇すると,トレンドが強くなってきます.

  2. 高い時間枠におけるSMAは,トレンドの方向性を判断する.上昇するSMAは価格上昇を表し,低下するSMAは価格減少を表します.

  3. RSIは低時間枠で過買い・過売り状態を判断します. 限界値以上のRSIは過買い,限界値以下のRSIは過売りです.

  4. ADXが上昇し,SMAが上昇し,RSIが低タイムフレームで過買いすると,上昇傾向が強くなっていると考えられます.ここでショートします.

  5. ADXが上昇し,SMAが下がり,RSIが低タイムフレームで過売れると,下落傾向が強くなると考えられます.ここでロングします.

利点分析

  1. トレンド判断と逆転取引を組み合わせて 主要なトレンドの逆転機会を把握できます

  2. タイムフレームの指標を利用し 信号の信頼性を高めます

  3. RSI戦略は理解し実行するのが簡単です

リスク分析

  1. 誤ったRSIシグナルが起こり 取引を損なう可能性があります 誤った信号を減らすためにパラメータを最適化できます

  2. 主要なサイクル傾向判断は誤りになり,戦略は市場の状況に適さない.傾向判断のためにより多くの指標を考慮することができます.

  3. トランザクションコストによる収益性に影響を与える潜在的に高い取引頻度.取引数を減らすためにRSIパラメータを調整することができます.

オプティマイゼーションの方向性

  1. RSIとADX,SMAパラメータの最適なマッチを見つけるために,より多くのパラメータ組み合わせをテストします.

  2. ストップ・ロスのメカニズムを追加し,単一の取引損失を制御します.

  3. 波動性が低い場合,ポジションサイズを減らすため波動性指標を考慮する.

  4. 前回の高値を突破したときにショートに入れるような 特定のエントリーとアウトプートの価格を最適化します

結論

この戦略は,主要トレンド内のローカル逆転を見つけるために,トレンド判断と逆転信号を組み合わせます.RSIのみを使用すると比較して,より信頼性が高く,罠にはまりないようにします.全体的には,誤った信号を減らすために投資家に適した比較的保守的な戦略です.さらなるパラメータテストとメカニズム最適化は戦略のパフォーマンスを向上させることができます.


/*backtest
start: 2022-12-27 00:00:00
end: 2024-01-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("RSI scalping", overlay=true)

CustSession 	= input(defval=true,title= "Custom Resolution / TF ? ",type=bool)
SessionTF0	= input(title="Custom Resolution / TF", defval="180")
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
length = input(7, title= "RSI length")
overSold = input( 28, title= "RSI oversold" )
overBought = input( 68, title= "RSI overbought" )

RSI = rsi(close, 7)

res		=	CustSession ? SessionTF0 : period

o = request.security(syminfo.tickerid, res, open)
c = request.security(syminfo.tickerid, res, close)
l = request.security(syminfo.tickerid, res, low)
h = request.security(syminfo.tickerid, res, high)

 // ADX higher time frame
dirmov(len) =>
	up = change(h)
	down = -change(l)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
    truer = request.security(syminfo.tickerid, res, tr)
	truerange = rma(truer, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, 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)

sig = adx(dilen, adxlen)

// SMA higher time frame
len = input(20, minval=1, title="SMA HTF Length")
smma = 0.0
smma := na(smma[1]) ? sma(c, len) : (smma[1] * (len - 1) + c) / len

ADXrising = (sig > sig[1]) and (sig[1] > sig[2]) and (sig[2]  > sig[3]) and (sig > 15)
SMAdrop= (smma < smma[1]) and (smma[1] < smma[2]) and (smma[2] < smma[3])
SMArising = (smma > smma[1]) and (smma[1] > smma[2]) and (smma[2] > smma[3])
longCondition = crossover(RSI, overBought) and ADXrising and SMArising
shortCondition = crossunder(RSI, overSold) and SMAdrop and ADXrising 

if (longCondition)
    strategy.entry("Long entry", strategy.long)

if (shortCondition)
    strategy.entry("Short Entry", strategy.short)

もっと