RMI Trend Sync Strategy

Penulis:ChaoZhang, Tarikh: 2024-01-16 14:10:25
Tag:

img

Ringkasan

Strategi RMI Trend Sync secara berkesan menggabungkan kekuatan Indeks Momentum Relatif (RMI) dan penunjuk Super Trend untuk merealisasikan integrasi analisis momentum dan penghakiman trend. Dengan memantau trend perubahan harga dan tahap momentum pasaran secara serentak, strategi menentukan trend pasaran dari perspektif yang lebih komprehensif.

Prinsip Strategi

Indeks Momentum Relatif (RMI)

RMI adalah versi dipertingkatkan Indeks Kekuatan Relatif (RSI). Ia menggabungkan lebih banyak ciri perubahan harga seperti arah dan besar untuk mengukur momentum pasaran dengan lebih tepat.

Kaedah Pengiraan RMI

Kaedah pengiraan RMI adalah: mula-mula mengira keuntungan purata dan kerugian purata dalam tempoh tertentu. Tidak seperti RSI, RMI menggunakan perubahan antara harga penutupan semasa dan harga penutupan sebelumnya, dan bukannya pertumbuhan positif dan negatif yang mudah. Kemudian membahagikan keuntungan purata dengan kerugian purata dan menormalkan nilai untuk sesuai dalam skala 0-100.

Penghakiman Momentum

Strategi ini menggunakan nilai purata RMI dan MFI untuk membandingkan dengan ambang momentum positif dan negatif yang ditetapkan terlebih dahulu untuk menentukan tahap momentum pasaran semasa untuk keputusan kemasukan dan keluar.

Indikator Super Trend

Indikator Super Trend dikira berdasarkan jangka masa yang lebih tinggi, yang dapat memberikan penilaian mengenai trend utama. Ia secara dinamik menyesuaikan parameter berdasarkan ATR turun naik sebenar untuk mengenal pasti pembalikan trend dengan berkesan.
Strategi ini juga menggabungkan Purata Bergerak Bertimbang Volume (VWMA) untuk meningkatkan lagi keupayaannya untuk mengesan perubahan trend yang penting.

Pilihan Arah Perdagangan

Strategi ini membolehkan memilih perdagangan panjang, pendek atau dua hala. Fleksibiliti ini membolehkan peniaga menyesuaikan diri dengan pandangan pasaran dan selera risiko mereka.

Analisis Kelebihan

Menggabungkan analisis momentum dan trend

Berbanding dengan strategi yang hanya bergantung pada petunjuk momentum atau trend, strategi ini mencapai pengenalan trend pasaran yang lebih tepat melalui penggabungan kekuatan RMI dan Super Trend.

Analisis Pelbagai Jangka Masa

Penggunaan RMI dan Super Trend dalam jangka masa yang berbeza membawa kepada pemahaman yang lebih tepat mengenai kedua-dua trend jangka pendek dan jangka panjang.

Stop Loss Masa Nyata

Mekanisme stop loss masa nyata berdasarkan Super Trend dapat dengan berkesan mengehadkan kerugian setiap perdagangan.

Arah Dagangan Fleksibel

Pilihan antara perdagangan panjang, pendek atau dua hala membolehkan strategi ini disesuaikan dengan persekitaran pasaran yang berbeza.

Analisis Risiko

Pengoptimuman Parameter yang Sukar

Pengoptimuman untuk parameter seperti RMI dan Super Trend agak rumit. tetapan yang tidak sesuai boleh melemahkan prestasi strategi.

Hentikan Kerugian terlalu ketat

Menjadi terlalu sensitif terhadap turun naik kecil boleh menyebabkan pemicu stop loss yang berlebihan.

Penyelesaian: Luangkan julat stop loss dengan sewajarnya atau gunakan kaedah stop loss lain berdasarkan turun naik.

Arahan pengoptimuman

Kesesuaian Cross Asset

Memperluas aset yang berkenaan dan mengenal pasti arah pengoptimuman parameter untuk aset yang berbeza, untuk membolehkan replikasi yang lebih luas di lebih banyak pasaran.

Penghentian Kehilangan Dinamik

Memasukkan mekanisme stop loss dinamik untuk mengesan gelombang swing semasa dengan lebih baik dan mengurangkan stop loss yang berlebihan yang disebabkan oleh retracements kecil.

Keadaan penapis tambahan

Tambah pertimbangan dari lebih banyak penunjuk sebagai keadaan penapis untuk mengelakkan memasuki kedudukan tanpa isyarat yang jelas.

Kesimpulan

Melalui gabungan RMI dan Super Trend yang bijak, strategi ini merealisasikan penilaian keadaan pasaran yang tepat. Ia juga cemerlang dalam kawalan risiko. Dengan pengoptimuman mendalam, dipercayai bahawa prestasinya di lebih banyak aset dan jangka masa akan menjadi semakin luar biasa.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
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/
// @ presentTrading

//@version=5
strategy("RMI Trend Sync - Strategy [presentTrading]", shorttitle = "RMI Sync [presentTrading]", overlay=true )

// ---> Inputs --------------
// Add Button for Trading Direction
tradeDirection = input.string("Both", "Select Trading Direction", options=["Long", "Short", "Both"])

// Relative Momentum Index (RMI) Settings
Length = input.int(21, "RMI Length", group = "RMI Settings")
pmom = input.int(70, "Positive Momentum Threshold", group = "RMI Settings")
nmom = input.int(30, "Negative Momentum Threshold", group = "RMI Settings")
bandLength = input.int(30, "Band Length", group = "Momentum Settings")
rwmaLength = input.int(20, "RWMA Length", group = "Momentum Settings")


// Super Trend Settings
len = input.int(10, "Super Trend Length", minval=1, group="Super Trend Settings")
higherTf1 = input.timeframe('480', "Higher Time Frame", group="Super Trend Settings")
factor = input.float(3.5, "Super Trend Factor", step=.1, group="Super Trend Settings")
maSrc = input.string("WMA", "MA Source", options=["SMA", "EMA", "WMA", "RMA", "VWMA"], group="Super Trend Settings")
atr = request.security(syminfo.tickerid, higherTf1, ta.atr(len))
TfClose1 = request.security(syminfo.tickerid, higherTf1, close)

// Visual Settings
filleshow = input.bool(true, "Display Range MA", group = "Visual Settings")
bull = input.color(#00bcd4, "Bullish Color", group = "Visual Settings")
bear = input.color(#ff5252, "Bearish Color", group = "Visual Settings")

// Calculation of Bar Range
barRange = high - low

// RMI and MFI Calculations
upChange = ta.rma(math.max(ta.change(close), 0), Length)
downChange = ta.rma(-math.min(ta.change(close), 0), Length)
rsi = downChange == 0 ? 100 : upChange == 0 ? 0 : 100 - (100 / (1 + upChange / downChange))
mf = ta.mfi(hlc3, Length)
rsiMfi = math.avg(rsi, mf)

// Momentum Conditions
positiveMomentum = rsiMfi[1] < pmom and rsiMfi > pmom and rsiMfi > nmom and ta.change(ta.ema(close,5)) > 0
negativeMomentum = rsiMfi < nmom and ta.change(ta.ema(close,5)) < 0

// Momentum Status
bool positive = positiveMomentum ? true : negativeMomentum ? false : na
bool negative = negativeMomentum ? true : positiveMomentum ? false : na

// Band Calculation
calculateBand(len) =>
    math.min(ta.atr(len) * 0.3, close * (0.3/100)) * 4 

band = calculateBand(bandLength)

// Range Weighted Moving Average (RWMA) Calculation
calculateRwma(range_, period) =>
    weight = range_ / math.sum(range_, period)
    sumWeightedClose = math.sum(close * weight, period)
    totalWeight = math.sum(weight, period)
    sumWeightedClose / totalWeight

rwma = calculateRwma(barRange, rwmaLength)
colour = positive ? bull : negative ? bear : na
rwmaAdjusted = positive ? rwma - band : negative ? rwma + band : na

max = rwma + band
min = rwma - band

longCondition       = positive and not positive[1]
shortCondition      = negative and not negative[1]

longExitCondition   = shortCondition
shortExitCondition  = longCondition

// Dynamic Trailing Stop Loss

vwma1 = switch maSrc
    "SMA"  => ta.sma(TfClose1*volume, len) / ta.sma(volume, len)
    "EMA"  => ta.ema(TfClose1*volume, len) / ta.ema(volume, len)
    "WMA"  => ta.wma(TfClose1*volume, len) / ta.wma(volume, len)

upperBand = vwma1 + factor * atr
lowerBand = vwma1 - factor * atr
prevLowerBand = nz(lowerBand[1])
prevUpperBand = nz(upperBand[1])
float superTrend = na
int direction = na
superTrend := direction == -1 ? lowerBand : upperBand

longTrailingStop = superTrend - atr * factor
shortTrailingStop = superTrend + atr * factor

// Strategy Order Execution
if (tradeDirection == "Long" or tradeDirection == "Both")
    strategy.entry("Long", strategy.long, when = longCondition)
    strategy.exit("Exit Long", "Long", when=longExitCondition, stop = longTrailingStop)
if (tradeDirection == "Short" or tradeDirection == "Both")
    strategy.entry("Short", strategy.short, when =shortCondition)
    strategy.exit("Exit Short", "Short", when=shortExitCondition, stop = shortTrailingStop)

Lebih lanjut