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.
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.
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.
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.
Arah pengoptimuman utama untuk strategi ini termasuk:
Meningkatkan penunjuk lain untuk penilaian untuk membentuk gabungan penunjuk berbilang untuk mengelakkan lagi kebarangkalian MACD menghasilkan isyarat yang salah.
Panjang garis EMA boleh dioptimumkan pelbagai parameter untuk mencari parameter optimum untuk menilai arah trend.
Parameter MACD juga boleh dioptimumkan lagi untuk mencari nilai yang paling tepat untuk menentukan masa pembalikan.
Tambah modul pengurusan modal. Sebagai contoh, faktor keuntungan boleh digunakan sebagai input dinamik, dan berhenti slippage juga boleh ditetapkan.
Uji kesan pada pelbagai jenis kontrak, seperti mata wang kripto, niaga hadapan indeks, dan lain-lain untuk mencari jenis perdagangan yang paling sesuai.
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)