Strategi Indikator Reverasal

Penulis:ChaoZhang, Tanggal: 2023-12-13 14:45:51
Tag:

img

Gambaran umum

Ini adalah strategi perdagangan revasal berdasarkan beberapa indikator teknis. Ini menggabungkan CCI, indikator Momentum, RSI dan indikator lain untuk mengidentifikasi peluang perdagangan jangka panjang dan pendek yang potensial. Strategi ini menghasilkan sinyal perdagangan ketika indikator menunjukkan sinyal overbought / oversold dan harga menarik kembali.

Logika Strategi

Sinyal perdagangan strategi berasal dari indikator khusus yang disebut Edri Extreme Points Buy & Sell. Ini memperhitungkan CCI, indikator Momentum dan crossover RSI. Logika spesifik adalah:

Kondisi sinyal panjang:

  1. Indikator Edri Extreme Points Buy & Sell memicu sinyal beli, yaitu CCI melintasi di atas 0 atau Momentum melintasi di atas 0, dan RSI berada di bawah tingkat oversold.
  2. Harga menarik kembali ke atau di bawah EMA 100 periode.

Kondisi sinyal pendek:

  1. Indikator Edri Extreme Points Buy & Sell memicu sinyal jual, yaitu CCI melintasi di bawah 0 atau Momentum melintasi di bawah 0, dan RSI berada di atas tingkat overbought.
  2. Harga menarik kembali ke atau di atas EMA 100 periode.

Strategi ini juga dapat dikonfigurasi untuk menemukan divergensi bullish/bearish yang teratur, menghasilkan sinyal perdagangan hanya ketika RSI menyimpang secara signifikan dari harga.

Ketika sinyal perdagangan dipicu, strategi menetapkan stop loss pada harga masuk ± 2ATR, mengambil keuntungan pada harga masuk ± 4ATR. Ini memungkinkan stop loss yang wajar dan mengambil kisaran keuntungan berdasarkan volatilitas pasar.

Analisis Keuntungan

  1. Menggabungkan beberapa indikator menghindari sinyal palsu dari satu indikator.
  2. Gaya trading reversal menangkap peluang jangka menengah di pasar range bound.
  3. Stop loss dan take profit berbasis ATR dapat menyesuaikan posisi berdasarkan volatilitas pasar.
  4. Menemukan divergensi menghindari pembukaan posisi tanpa tingkat overbought / oversold yang ekstrim.

Analisis Risiko

  1. Parameter indikator yang tidak tepat dapat menyebabkan peluang yang hilang atau terlalu banyak sinyal yang salah.
  2. Trading reversal dapat menyebabkan stop loss berturut-turut di pasar tren.
  3. ATR memiliki efek keterlambatan dan tidak dapat memperbarui stop loss/take profit tepat waktu di pasar yang bergerak cepat.

Solusi:

  1. Backtest dan mengoptimalkan parameter indikator untuk menemukan kombinasi terbaik.
  2. Pertimbangkan untuk menangguhkan strategi ketika tren kuat.
  3. Kombinasi dengan metode stop loss lainnya seperti stop loss bergerak atau stop loss kontrarian.

Arahan Optimasi

  1. Uji kombinasi parameter yang berbeda dari CCI, panjang momentum, parameter RSI, ATR multiplier dll.
  2. Tambahkan kondisi penyaringan lainnya seperti pola harga, perubahan volume dll.
  3. Sesuaikan aturan ukuran posisi seperti rasio posisi berbasis ATR.
  4. Tetapkan template parameter untuk produk dan jangka waktu yang berbeda.
  5. Pertimbangkan untuk menambahkan pelacakan tren untuk menangguhkan perdagangan pembalikan di pasar tren.

Ringkasan

Strategi ini terutama bekerja untuk pasar yang terikat rentang, menangkap pembalikan jangka menengah untuk keuntungan yang relatif stabil. Ini membantu mengidentifikasi rentang harga jangka pendek dan menghasilkan sinyal perdagangan berdasarkan beberapa indikator. Dengan optimasi dan manajemen risiko yang tepat, kelebihannya dapat dimanfaatkan secara efektif. Masih menyadari kelemahan intrinsik dari perdagangan pembalikan, kemungkinan kerugian berkelanjutan dalam tren yang kuat. Secara keseluruhan strategi ini cocok untuk investor dengan beberapa pengalaman kuantitatif dan manajemen risiko.


/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-02 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/
// © MagicStrategies

//@version=5
strategy("Reversal Indicator Strategy", overlay = true)

// Input settings
ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum'], tooltip='CCI or Momentum will be the final source of the Entry signal if selected.')
ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length')
useDivergence = input.bool(true, title='Find Regular Bullish/Bearish Divergence', tooltip='If checked, it will only consider an overbought or oversold condition that has a regular bullish or bearish divergence formed inside that level.')
rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level', tooltip='Adjusting the level to extremely high may filter out some signals especially when the option to find divergence is checked.')
rsiOversold = input.int(35, minval=1, title='RSI Oversold Level', tooltip='Adjusting this level extremely low may filter out some signals especially when the option to find divergence is checked.')
rsiLength = input.int(14, minval=1, title='RSI Length')
plotMeanReversion = input.bool(false, 'Plot Mean Reversion Bands on the chart', tooltip='This function doesn\'t affect the entry of signal but it suggests buying when the price is at the lower band, and then sell it on the next bounce at the higher bands.')
emaPeriod = input(200, title='Lookback Period (EMA)')
bandMultiplier = input.float(1.8, title='Outer Bands Multiplier', tooltip='Multiplier for both upper and lower bands')


// CCI and Momentum calculation
momLength = ccimomCross == 'Momentum' ? ccimomLength : 10
mom = close - close[momLength]
cci = ta.cci(close, ccimomLength)
ccimomCrossUp = ccimomCross == 'Momentum' ? ta.cross(mom, 0) : ta.cross(cci, 0)
ccimomCrossDown = ccimomCross == 'Momentum' ? ta.cross(0, mom) : ta.cross(0, cci)

// RSI calculation
src = close
up = ta.rma(math.max(ta.change(src), 0), rsiLength)
down = ta.rma(-math.min(ta.change(src), 0), rsiLength)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
oversoldAgo = rsi[0] <= rsiOversold or rsi[1] <= rsiOversold or rsi[2] <= rsiOversold or rsi[3] <= rsiOversold
overboughtAgo = rsi[0] >= rsiOverbought or rsi[1] >= rsiOverbought or rsi[2] >= rsiOverbought or rsi[3] >= rsiOverbought

// Regular Divergence Conditions
bullishDivergenceCondition = rsi[0] > rsi[1] and rsi[1] < rsi[2]
bearishDivergenceCondition = rsi[0] < rsi[1] and rsi[1] > rsi[2]

// Entry Conditions
longEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition)
shortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition)


// Mean Reversion Indicator
meanReversion = plotMeanReversion ? ta.ema(close, emaPeriod) : na
stdDev = plotMeanReversion ? ta.stdev(close, emaPeriod) : na
upperBand = plotMeanReversion ? meanReversion + stdDev * bandMultiplier : na
lowerBand = plotMeanReversion ? meanReversion - stdDev * bandMultiplier : na


// Plotting
plotshape(longEntryCondition, title='BUY', style=shape.triangleup, text='B', location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(shortEntryCondition, title='SELL', style=shape.triangledown, text='S', location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)

plot(upperBand, title='Upper Band', color=color.new(color.fuchsia, 0), linewidth=1)
plot(meanReversion, title='Mean', color=color.new(color.gray, 0), linewidth=1)
plot(lowerBand, title='Lower Band', color=color.new(color.blue, 0), linewidth=1)

// Entry signal alerts
alertcondition(longEntryCondition, title='BUY Signal', message='Buy Entry Signal')
alertcondition(shortEntryCondition, title='SELL Signal', message='Sell Entry Signal')
alertcondition(longEntryCondition or shortEntryCondition, title='BUY or SELL Signal', message='Entry Signal')

ema100 = ta.ema(close, 100)
plot(ema100, color=color.red)

// Define trading signals based on the original indicator's entry conditions
// Buy if long condition is met and price has pulled back to or below the 100 EMA
longCondition  = longEntryCondition and close <= ema100
// Sell if short condition is met and price has pulled back to or above the 100 EMA
shortCondition = shortEntryCondition and close >= ema100

// Strategy Entries
if longCondition
    strategy.entry("Buy", strategy.long)
if shortCondition
    strategy.entry("Sell", strategy.short)

Lebih banyak