EMA RSI Hidden Divergence Trend Mengikuti Strategi

Penulis:ChaoZhang, Tanggal: 2024-02-02 16:54:27
Tag:

img

Gambaran umum

Strategi ini membuka posisi panjang berdasarkan EMA crossover dan RSI sinyal divergensi bullish tersembunyi untuk mengidentifikasi awal tren naik. Kombinasi garis EMA, indikator RSI, dan harga penutupan K-line memberikan konfirmasi ganda untuk memastikan momentum naik. Strategi ini cocok untuk mengikuti tren jangka menengah dan panjang dan membuka posisi panjang setelah konsolidasi harga.

Logika Strategi

  1. Strategi EMA: Menggunakan salib emas EMA 50 periode dan EMA 250 periode untuk menentukan arah tren. Penutupan di atas EMA 50 memberikan sinyal panjang.

  2. RSI Hidden Divergence Strategy: RSI membentuk titik terendah yang lebih rendah sementara harga membentuk titik terendah yang lebih tinggi, menandakan pembalikan tren di awal.

  3. Strategi Penutupan K-line: Pergi panjang ketika harga penutupan berada di atas garis 50 EMA.

Kombinasi dari tiga strategi di atas mengidentifikasi awal tren naik dan membuka posisi panjang sesuai.

Analisis Keuntungan

  1. Menggunakan garis EMA untuk menentukan arah tren bersama dengan sinyal pembalikan RSI memungkinkan masuk awal pada awal tren.

  2. Konfirmasi ganda dari garis EMA, indikator RSI, dan harga penutupan garis K secara efektif menyaring sinyal palsu.

  3. Mengikuti tren jangka menengah dan panjang membuatnya cocok untuk mengidentifikasi tren naik baru setelah konsolidasi.

Analisis Risiko

  1. Tutup posisi ketika garis EMA memiliki salib kematian.

  2. Mengidentifikasi divergensi RSI yang tersembunyi membutuhkan pengalaman, pengaturan parameter yang tidak tepat dapat menyebabkan sinyal hilang atau salah.

  3. Parameter membutuhkan optimasi untuk instrumen perdagangan yang berbeda.

Arahan Optimasi

  1. Sesuaikan parameter EMA secara dinamis untuk akurasi penentuan tren yang lebih baik.

  2. Perbaiki parameter RSI untuk akurasi sinyal divergensi tersembunyi.

  3. Tambahkan mekanisme stop loss seperti ATR atau stop persentase untuk mengendalikan risiko.

  4. Mengembangkan strategi untuk posisi pendek untuk memperdagangkan tren menurun.

Kesimpulan

Strategi ini menggabungkan garis EMA untuk penentuan tren dan sinyal RSI untuk meningkatkan akurasi. Ini mengidentifikasi tren naik baru setelah konsolidasi. Dengan penyesuaian parameter yang tepat dan manajemen risiko, itu dapat mencapai hasil yang baik. Dibandingkan dengan strategi rata-rata bergerak sederhana, ini memiliki akurasi yang lebih tinggi dalam menangkap tren dengan tingkat kemenangan yang lebih baik. Secara keseluruhan ini adalah tren praktis mengikuti strategi.


/*backtest
start: 2024-01-25 00:00:00
end: 2024-02-01 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="EMA RSI ATR Hidden Div Strat", shorttitle="Hidden Div Strat", overlay = true, pyramiding = 0, max_bars_back=3000, calc_on_order_fills = false, commission_type =  strategy.commission.percent, commission_value = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital=5000, currency=currency.USD)

// Time Range
FromMonth=input(defval=1,title="FromMonth",minval=1,maxval=12)
FromDay=input(defval=1,title="FromDay",minval=1,maxval=31)
FromYear=input(defval=2020,title="FromYear",minval=2016)
ToMonth=input(defval=1,title="ToMonth",minval=1,maxval=12)
ToDay=input(defval=1,title="ToDay",minval=1,maxval=31)
ToYear=input(defval=9999,title="ToYear",minval=2017)
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>true

// Bar's time happened on/after start date?
afterStartDate = time >= start and time<=finish?true:false

//EMA'S
emasrc = close

len1 = input(50, minval=1, title="EMA1")
ema1 = ema(emasrc, len1)
col1 = color.white

len2 = input(250, minval=1, title="EMA2")
ema2 = ema(emasrc, len2)
col2 = color.yellow

//Plots
plot(ema1, title="EMA1", linewidth=1, color=col1)
plot(ema2, title="EMA2", linewidth=1, color=col2)

//Stoch
periodK = input(4, title="K", minval=1)
periodD = input(4, title="D", minval=1)
smoothK = input(3, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)

//Hidden Divergence Indikator

len = input(title="RSI Period", minval=1, defval=14)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=1)
lbL = input(title="Pivot Lookback Left", defval=19)
rangeUpper = input(title="Max of Lookback Range", defval=20)
rangeLower = input(title="Min of Lookback Range", defval=4)
hiddenBullColor = color.new(color.green, 80)
textColor = color.white
noneColor = color.new(color.white, 100)
osc = rsi(src, len)

plFound = na(pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(pivothigh(osc, lbL, lbR)) ? false : true
_inRange(cond) =>
	bars = barssince(cond == true)
	rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low

oscLL = osc[lbR] < valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Higher Low

priceHL = low[lbR] > valuewhen(plFound, low[lbR], 1)
hiddenBullCond = priceHL and oscLL and plFound

//buy Conditions
buyhiddenbull = hiddenBullCond[1] or hiddenBullCond[2] or hiddenBullCond[3] or hiddenBullCond[4] or hiddenBullCond[5] or hiddenBullCond[6] or hiddenBullCond[7] or hiddenBullCond[8] or hiddenBullCond[9] or hiddenBullCond[10]
emacondition = ema1 > ema2
upcondition = close[1] > ema1[1] and ema2[1] and close[2] > ema1[2] and ema2[2] and close[3] > ema1[3] and ema2[3]
crossup = k[0] >= d[0] and k[1] <= d[1]
longcondition = emacondition and upcondition and crossup and buyhiddenbull

if (afterStartDate)
    strategy.entry("Long", strategy.long, when = longcondition)

//TakeProfit, StopLoss lowest low
profitfactor = input(title="Profitfactor", type=input.float, step=0.1, defval=1.6)
loLen = input(title="Lowest Low Lookback", type=input.integer,
  defval=38, minval=2)
stop_level = lowest(low, loLen)[1]
bought = strategy.position_size[1] < strategy.position_size
barsbought = barssince(bought)

if strategy.position_size>0
    profit_level = strategy.position_avg_price + ((strategy.position_avg_price - stop_level[barsbought])*profitfactor)
    strategy.exit(id="TP/ SL", stop=stop_level[barsbought], limit=profit_level)

Lebih banyak