EMA RSI Trend Divergensi Tersembunyi Mengikut Strategi

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

img

Ringkasan

Strategi ini membuka kedudukan panjang berdasarkan penyambungan EMA dan isyarat divergensi menaik yang tersembunyi untuk mengenal pasti permulaan trend menaik. Gabungan garis EMA, penunjuk RSI, dan harga penutupan K-line memberikan pengesahan berganda untuk memastikan momentum menaik. Strategi ini sesuai untuk mengikuti trend jangka menengah dan panjang dan membuka kedudukan panjang selepas penyatuan harga.

Logika Strategi

  1. Strategi EMA: Menggunakan salib emas EMA 50 tempoh dan EMA 250 tempoh untuk menentukan arah trend. Penutupan di atas 50 EMA memberikan isyarat panjang.

  2. RSI Hidden Divergence Strategy: RSI membentuk tahap terendah yang lebih rendah sementara harga membentuk tahap terendah yang lebih tinggi, menandakan pembalikan trend pada permulaan.

  3. Strategi Penutupan Garis K: Pergi panjang apabila harga penutupan berada di atas garis 50 EMA.

Gabungan tiga strategi di atas mengenal pasti permulaan trend menaik dan membuka kedudukan panjang.

Analisis Kelebihan

  1. Menggunakan garis EMA untuk menentukan arah trend bersama dengan isyarat pembalikan RSI membolehkan kemasukan awal pada permulaan trend.

  2. Pengesahan berganda dari garis EMA, penunjuk RSI, dan harga penutupan garis K berkesan menapis isyarat palsu.

  3. Mengikuti trend jangka menengah dan panjang menjadikannya sesuai untuk mengenal pasti trend menaik baru selepas penyatuan.

Analisis Risiko

  1. Tutup kedudukan apabila garis EMA mempunyai salib kematian.

  2. Mengenali perbezaan RSI yang tersembunyi memerlukan pengalaman, penyesuaian parameter yang tidak betul boleh menyebabkan isyarat yang hilang atau salah.

  3. Parameter perlu dioptimumkan untuk instrumen perdagangan yang berbeza.

Arahan pengoptimuman

  1. Sesuaikan parameter EMA secara dinamik untuk ketepatan penentuan trend yang lebih baik.

  2. Sempurnakan parameter RSI untuk ketepatan isyarat divergensi tersembunyi yang lebih baik.

  3. Tambah mekanisme stop loss seperti ATR atau peratusan berhenti untuk mengawal risiko.

  4. Membangunkan strategi untuk kedudukan pendek untuk memperdagangkan trend menurun.

Kesimpulan

Strategi ini menggabungkan garis EMA untuk penentuan trend dan isyarat RSI untuk meningkatkan ketepatan. Ia mengenal pasti trend menaik baru selepas penyatuan. Dengan penyesuaian parameter yang betul dan pengurusan risiko, ia dapat mencapai hasil yang baik. Berbanding dengan strategi purata bergerak yang mudah, ia mempunyai ketepatan yang lebih tinggi dalam menangkap trend dengan kadar kemenangan yang lebih baik. Secara keseluruhan, ia adalah trend praktikal yang 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 lanjut