Strategi Mengikuti Tren MACD EMA Golden Cross


Tanggal Pembuatan: 2024-02-18 15:17:36 Akhirnya memodifikasi: 2024-02-18 15:17:36
menyalin: 0 Jumlah klik: 760
1
fokus pada
1617
Pengikut

Strategi Mengikuti Tren MACD EMA Golden Cross

Ringkasan

Strategi ini menentukan arah tren dengan menghitung MACD dan garis sinyal rata-rata bergerak yang bersilang, dan digabungkan dengan indikator EMA untuk menilai kekuatan tren saat ini, untuk memungkinkan pelacakan tren. Ketika garis MACD dari bawah ke atas menerobos garis sinyal, lebih banyak, dari atas ke bawah menerobos kosong, sementara garis EMA juga dapat menilai kekuatan tren dan memfilter terobosan palsu.

Prinsip Strategi

Strategi ini didasarkan pada arah tren dan waktu masuk MACD. Garis MACD menunjukkan bahwa tren harga telah berbalik, jadi lebih banyak penarikan dilakukan berdasarkan arah penarikan. Logika penarikan khusus adalah, ketika harga close out lebih tinggi dari rata-rata EMA dan garis MACD dari bawah menembus garis sinyal, lebih banyak; ketika harga close out lebih rendah dari rata-rata EMA dan garis MACD dari atas menembus garis sinyal.

Peran EMA adalah untuk membantu menilai tren, jika harga lebih tinggi dari EMA menunjukkan tren naik, maka MACD yang lebih rendah dapat membuat sinyal silang emas yang bekerja; jika harga lebih rendah dari EMA menunjukkan tren turun, maka MACD yang lebih tinggi dapat menghasilkan sinyal silang mati. Panjang EMA juga menentukan jangka menengah dan panjang dari penilaian tren.

Dengan cara di atas, Anda dapat masuk ke dalam arena tepat waktu ketika harga mulai berbalik dan membentuk tren baru, untuk mencapai efek pelacakan tren.

Analisis Keunggulan

Strategi ini menggabungkan kondisi penilaian ganda, baik dengan mempertimbangkan arah tren harga, dan menggunakan indikator untuk menilai waktu masuk tertentu, menghindari risiko terobosan palsu, meningkatkan keandalan strategi. Dibandingkan dengan penggunaan indikator MACD tunggal, strategi ini dapat lebih akurat menilai dimulainya tren baru.

Penggunaan rata-rata EMA juga memungkinkan strategi untuk memfilter sebagian dari efek dari fluktuasi jangka pendek, mengunci tren garis tengah dan panjang. Ini sangat membantu dalam memainkan efek pembalikan penilaian indikator MACD.

Selain itu, strategi yang mengatur kondisi over dan under pada saat yang sama dapat diterapkan pada situasi pasar lotere yang bergejolak, yang juga meningkatkan fleksibilitas strategi.

Analisis risiko

Risiko utama dari strategi ini adalah bahwa indikator MACD sendiri memiliki probabilitas lebih tinggi untuk menilai Fakeout, dan sinyal dapat salah diidentifikasi. Pada saat ini, fungsi tambahan dari EMA rata-rata diperlukan, tetapi dalam situasi khusus, kemungkinan gagal.

Selain itu, strategi ini menggunakan rasio untung-rugi untuk mengatur kondisi stop loss, yang memiliki tingkat subjektivitas tertentu, dan jika tidak diatur dengan benar, itu akan mempengaruhi efektivitas strategi.

Akhirnya, strategi ini hanya mengatur jumlah posisi terbuka untuk 100% dari ekuitas akun, tanpa mempertimbangkan masalah pengelolaan dana, yang juga memiliki risiko tertentu di real-time.

Arah optimasi

Strategi ini memiliki beberapa optimasi utama:

  1. Menambahkan penilaian indikator lain, membentuk beberapa kombinasi indikator, dapat lebih jauh menghindari kemungkinan MACD mengirimkan sinyal yang salah. Misalnya, KDJ, BOLL, dan sebagainya dapat dipertimbangkan.

  2. Panjang garis rata-rata EMA dapat dioptimalkan dalam beberapa kombinasi untuk menemukan parameter terbaik untuk menentukan arah tren.

  3. Parameter MACD juga dapat dioptimalkan lebih lanjut untuk menemukan nilai parameter yang paling akurat untuk menentukan waktu pembalikan.

  4. Menambahkan modul manajemen uang, seperti rasio untung-rugi dapat digunakan sebagai input dinamis, juga dapat mengatur stop loss titik geser dan sebagainya.

  5. Uji efek dari berbagai jenis kontrak untuk mencari jenis perdagangan yang paling cocok. Misalnya, cryptocurrency, indeks saham, dan lain-lain.

Meringkaskan

Strategi pelacakan tren silang emas MACD EMA ini relatif sederhana dan praktis secara keseluruhan, memastikan keandalan sinyal dengan penilaian indikator ganda, mengatur cara stop loss yang masuk akal untuk mengunci keuntungan. Ruang optimasi utama adalah dalam pemilihan parameter, kombinasi indikator, manajemen dana, dll. Jika pengujian lebih lanjut dioptimalkan, yakin bahwa strategi ini dapat menjadi salah satu strategi pelacakan tren yang efisien.

Kode Sumber Strategi
/*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)