Strategi Pengesanan Trend Silang MACD EMA

Penulis:ChaoZhang, Tarikh: 2024-02-18 15:17:36
Tag:

img

Ringkasan

Strategi ini menentukan arah trend dengan mengira persilangan antara penunjuk MACD dan purata bergerak garis isyaratnya, dan menilai kekuatan trend semasa dengan penunjuk EMA untuk mengesan trend. Ia menjadi panjang apabila garis MACD memecahkan garis isyarat ke atas dan menjadi pendek apabila memecahkan ke bawah. Garis EMA juga boleh menilai kekuatan trend untuk menapis pecah palsu.

Logika Strategi

Inti strategi ini adalah untuk menentukan arah trend dan masa kemasukan berdasarkan penunjuk MACD. Persalinan antara garis MACD dan garis isyarat menunjukkan pembalikan dalam trend harga. Oleh itu, kedudukan panjang dan pendek ditentukan mengikut arah pecah. Khususnya, apabila harga penutupan berada di atas garis EMA dan garis MACD menembusi garis isyarat dari bawah, pergi panjang; apabila harga penutupan berada di bawah garis EMA dan garis MACD menembusi garis isyarat dari atas, pergi pendek.

Garis EMA berfungsi untuk membantu menilai trend. Jika harga di atas garis EMA, ia menunjukkan trend menaik. Pada masa ini, kejayaan dari MACD di bawah mungkin membentuk isyarat salib emas. Jika harga di bawah garis EMA, ia menunjukkan trend menurun. Pada masa ini, kejayaan dari atas MACD mungkin membentuk isyarat salib kematian. Panjang EMA juga menentukan tahap penilaian trend jangka menengah hingga panjang.

Dengan cara ini, kita boleh memasuki pasaran dengan cara yang tepat pada masanya apabila harga mula berbalik untuk membentuk trend baru, mencapai kesan trend tracking.

Analisis Kelebihan

Strategi ini menggabungkan dua keadaan penilaian, dengan mengambil kira kedua-dua arah trend harga dan menggunakan penunjuk untuk menentukan masa kemasukan tertentu, mengelakkan risiko pecah palsu, dan meningkatkan kebolehpercayaan strategi.

Penggunaan garis EMA juga membolehkan strategi untuk menapis kesan turun naik jangka pendek dan mengunci trend jangka sederhana dan jangka panjang ke tahap tertentu.

Di samping itu, strategi menetapkan syarat untuk kedua-dua panjang dan pendek, yang boleh digunakan untuk pasar lembu dan bear kite, dengan itu meningkatkan kebolehsesuaian strategi.

Analisis Risiko

Risiko utama strategi ini adalah bahawa penunjuk MACD itu sendiri mempunyai kebarangkalian tinggi untuk salah menilai isyarat Fakeout. Pada ketika ini, fungsi tambahan garis EMA diperlukan, tetapi kegagalan masih boleh berlaku dalam keadaan pasaran khas.

Di samping itu, strategi menggunakan faktor keuntungan untuk menetapkan syarat berhenti kerugian dan mengambil keuntungan, yang melibatkan beberapa subjektiviti. tetapan yang tidak betul juga boleh mempengaruhi prestasi strategi.

Akhirnya, strategi hanya menetapkan saiz kedudukan kepada 100% daripada ekuiti akaun tanpa mempertimbangkan isu pengurusan dana, yang juga menimbulkan beberapa risiko dalam perdagangan langsung.

Arahan pengoptimuman

Arah pengoptimuman utama untuk strategi ini termasuk:

  1. Meningkatkan penunjuk lain untuk penilaian untuk membentuk gabungan penunjuk berbilang untuk mengelakkan lagi kebarangkalian MACD menghasilkan isyarat yang salah.

  2. Panjang garis EMA boleh dioptimumkan pelbagai parameter untuk mencari parameter optimum untuk menilai arah trend.

  3. Parameter MACD juga boleh dioptimumkan lagi untuk mencari nilai yang paling tepat untuk menentukan masa pembalikan.

  4. Tambah modul pengurusan modal. Sebagai contoh, faktor keuntungan boleh digunakan sebagai input dinamik, dan berhenti slippage juga boleh ditetapkan.

  5. Uji kesan pada pelbagai jenis kontrak, seperti mata wang kripto, niaga hadapan indeks, dan lain-lain untuk mencari jenis perdagangan yang paling sesuai.

Kesimpulan

Secara keseluruhannya, strategi Pemantauan Trend Crossover MACD EMA ini agak mudah dan praktikal. Ia memastikan kebolehpercayaan isyarat melalui keadaan penunjuk berganda dan kunci keuntungan melalui kaedah stop loss dan mengambil keuntungan yang munasabah. Ruang pengoptimuman utama terletak pada pemilihan parameter, kombinasi penunjuk, pengurusan modal, dll. Dengan pengoptimuman dan ujian lanjut, dipercayai bahawa strategi ini boleh menjadi salah satu strategi pemantauan trend yang paling cekap.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="MACD EMA Strategy", shorttitle="MACD EMA 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 = 100, 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

// STEP 2:
// See if this bar's time happened on/after start date
afterStartDate = true

//EMA
emasrc = close
res = input(title="EMA Timeframe", type=input.resolution, defval="15")
len1 = input(title="EMA Length", type=input.integer, defval=206)
col1 = color.yellow
// Calculate EMA
ema1 = ema(emasrc, len1)
emaSmooth = security(syminfo.tickerid, res, ema1, barmerge.gaps_on, barmerge.lookahead_off)
// Draw EMA
plot(emaSmooth, title="EMA", linewidth=1, color=col1)

//MACD
fast_length = input(title="Fast Length", type=input.integer, defval=15)
slow_length = input(title="Slow Length", type=input.integer, defval=24)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=true)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=true)
zeroline = 0

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
//plot(macd, title="MACD", color=col_macd, transp=0)
//plot(signal, title="Signal", color=col_signal, transp=0)
//plot(zeroline, title="Zero Line", color=color.black, transp=0)

///////////////////////////LONG////////////////////////////////////////////////////////////////////

enablelong = input(true, title="Enable long?")

//Long Signal
upcondition = close > emaSmooth and close[1] > emaSmooth[1]
macdunderhis = macd < zeroline
macdcrossup = crossover(macd, signal)

longcondition = upcondition and macdunderhis and macdcrossup

//strategy buy long
if (longcondition) and (afterStartDate) and strategy.opentrades < 1 and (enablelong == true)
    strategy.entry("long", strategy.long)

//////////////////////////////////////SHORT//////////////////////////////////////////////////////////////////////////////////

enableshort = input(true, title="Enable short?")

//Short Signal
downcondition = close < emaSmooth and close[1] < emaSmooth[1]
macdoverhis = macd > zeroline
macdcrosunder = crossunder(macd, signal)

shortcondition = downcondition and macdoverhis and macdcrosunder

//strategy buy short
if (shortcondition) and (afterStartDate) and strategy.opentrades < 1 and (enableshort == true)
    strategy.entry("short", strategy.short)


//////////////////////////////////////EXIT CONDITION//////////////////////////////////////////////////////////////////////////////////
bought = strategy.position_size[1] < strategy.position_size
sold = strategy.position_size[1] > strategy.position_size
barsbought = barssince(bought)
barssold = barssince(sold)
//////LOWEST LOW//////
//Lowest Low LONG
profitfactorlong = input(title="ProfitfactorLong", type=input.float, step=0.1, defval=1.9)
loLen = input(title="Lowest Low Lookback", type=input.integer,
  defval=46, minval=2)
stop_level_long = lowest(low, loLen)[1]

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

//Lowest Low SHORT
profitfactorshort = input(title="ProfitfactorShort", type=input.float, step=0.1, defval=2.1)
highLen = input(title="highest high lookback", type=input.integer,
  defval=25, minval=2)
stop_level_short = highest(high, highLen)[1]

if strategy.position_size<0 
    profit_level_short = strategy.position_avg_price - ((stop_level_short[barssold] - strategy.position_avg_price)*profitfactorshort)
    strategy.exit(id="TP/ SL", stop=stop_level_short[barssold], limit=profit_level_short)
    
//PLOTT TP SL
plot(stop_level_long, title="SL Long", linewidth=1, color=color.red)
plot(stop_level_short, title="SL Short", linewidth=1, color=color.red)

Lebih lanjut