Strategi mengikut arah aliran berdasarkan penunjuk MACD


Tarikh penciptaan: 2023-11-16 17:42:09 Akhirnya diubah suai: 2023-11-16 17:42:09
Salin: 6 Bilangan klik: 677
1
fokus pada
1617
Pengikut

Strategi mengikut arah aliran berdasarkan penunjuk MACD

Gambaran keseluruhan

Strategi ini menggunakan indikator MACD untuk mengenal pasti arah trend dan mengunci keuntungan dengan stop loss dinamik.

Prinsip Strategi

  1. Hitung indikator garis cepat, garis perlahan dan MACD. Garis cepat menggunakan purata bergerak indeks 12 kitaran, garis perlahan menggunakan purata bergerak indeks 26 kitaran. MACD adalah perbezaan antara garis cepat dan garis perlahan.

  2. Setting buy-in line and sell-out line menghasilkan isyarat beli apabila MACD melalui buy-in line; menghasilkan isyarat jual apabila MACD melalui sell-out line

  3. Tetapkan hentian dinamik selepas membuka kedudukan, ikuti garis hentian. Nilai awal garis hentian adalah 95% daripada harga pembukaan kedudukan, untuk mengunci keuntungan apabila harga bergerak ke garis hentian.

  4. Apabila isyarat berhenti atau membalikkan isyarat berlaku, maka ia akan melonggarkan.

Analisis kelebihan

  1. Menggunakan penunjuk MACD untuk mengenal pasti arah trend, trend boleh dijejaki dengan berkesan.

  2. Mekanisme Hentikan Kerugian Dinamis boleh terus mengunci keuntungan dan mengelakkan kerugian daripada berkembang.

  3. Strategi logiknya mudah difahami, mudah difahami dan sesuai untuk pelaksanaan automatik transaksi kuantitatif.

Analisis risiko

  1. Indeks MACD terlewat dan mungkin terlepas perubahan trend jangka pendek.

  2. Terlalu lemah mungkin terlepas sebahagian keuntungan, terlalu ketat mungkin terlambat.

  3. Masalah parameter tuning, parameter MACD dan garis jual beli perlu terus diuji dan dioptimumkan.

  4. Berkesan dalam keadaan trend, risiko kerugian dalam keadaan gegaran.

Arah pengoptimuman

  1. Mengoptimumkan parameter MACD untuk mencari kombinasi parameter terbaik.

  2. Uji pelbagai jenis penangguhan, seperti penangguhan skor, penangguhan ATR dan sebagainya.

  3. Menambah syarat penapisan untuk mengelakkan perdagangan yang salah dengan menggunakan petunjuk lain, seperti Bollinger Bands, RSI dan sebagainya.

  4. Menggabungkan indikator penghakiman trend, mengenal pasti trend dan keadaan gegaran, parameter strategi penyesuaian dinamik.

ringkaskan

Strategi ini mempunyai pemikiran keseluruhan yang jelas, menggunakan indikator MACD untuk mengesan trend, dan menggunakan stop loss dinamik untuk mengunci keuntungan, dapat mengesan trend dengan berkesan. Namun, indikator MACD mempunyai masalah ketinggalan, dan tetapan titik stop loss juga perlu dioptimumkan. Langkah seterusnya akan terus menguji parameter, mengoptimumkan mekanisme stop loss, dan memfilter dengan indikator lain, menjadikan strategi lebih sesuai untuk keadaan yang berbeza, meningkatkan kestabilan strategi.

Kod sumber strategi
/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle = "EURUSD MACD", title = "EURUSD MACD")
fastMA = input(title="Fast moving average",  defval = 12, minval = 7)
slowMA = input(title="Slow moving average",  defval = 26, minval = 7)
lastColor = yellow
[currMacd,_,_] = macd(close[0], fastMA, slowMA, 9)
[prevMacd,_,_] = macd(close[1], fastMA, slowMA, 9)
plotColor = currMacd > 0 ? currMacd > prevMacd ? lime : green : currMacd < prevMacd ? maroon : red
plot(currMacd, style = histogram, color = plotColor, linewidth = 3)
plot(0, title = "Zero line", linewidth = 1, color = gray)

//MACD
// Getting inputs
fast_length = input(title="Fast Length",  defval=12)
slow_length = input(title="Slow Length",  defval=26)
src = input(title="Source",  defval=close)
signal_length = input(title="Signal Smoothing",  minval = 1, maxval = 50, defval =9)
sma_source = input(title="Simple MA(Oscillator)", type=bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=bool, defval=false)

// 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=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)
///END OF MACD

//Long and Close Long Lines
linebuy = input(title="Enter Long", type=float, defval=-0.0002)
linesell = input(title="Close Long", type=float, defval=0.0001)

//Plot Long and Close Long Lines
plot(linebuy,color=green),plot(linesell,color=red)


//Stop Loss Input
sl_inp = input(0.05, title='Stop Loss %', type=float)/100


//Order Conditions
longCond = crossover(currMacd, linebuy)
exitLong = crossover(currMacd, linesell)
stop_level = strategy.position_avg_price * (1 - sl_inp)


//Order Entries
strategy.entry("long", strategy.long,  when=longCond==true)
strategy.close("long", when=exitLong==true)
strategy.exit("Stop Loss", stop=stop_level)