Strategi Dagangan Robot MACD

Penulis:ChaoZhang, Tarikh: 2023-12-18 17:30:15
Tag:

img

Ringkasan

Strategi ini dipanggil Strategi Dagangan Robot MACD. Ia menentukan masa membeli dan menjual di pasaran dengan mengira hubungan antara garis cepat dan garis perlahan penunjuk MACD, dan menggunakan stop loss untuk mengawal risiko.

Prinsip Strategi

Strategi ini terutamanya dibangunkan berdasarkan indikator MACD. Indikator MACD terdiri daripada garis pantas dan garis perlahan. Garis pantas adalah purata bergerak jangka pendek dan garis perlahan adalah purata bergerak jangka panjang. Hubungan antara kedua-duanya mencerminkan keadaan membeli dan menjual di pasaran. Apabila garis pantas melintasi di atas garis perlahan, ia adalah isyarat beli, dan apabila ia melintasi di bawah, ia adalah isyarat jual.

Dalam strategi ini, garis pantas dan garis perlahan dikira menggunakan algoritma EMA masing-masing, dan tempoh boleh disesuaikan. Untuk meningkatkan kualiti isyarat, garis isyarat ditambahkan, yang menggunakan algoritma EMA untuk meluruskan nilai MACD lagi.

Apabila menentukan masa membeli, periksa bukan sahaja salib emas garis cepat dan perlahan, tetapi juga sama ada nilai mutlak MACD lebih besar daripada garis beli yang disesuaikan.

Apabila menentukan masa penjualan, persilangan kematian garis cepat dan perlahan dan garis isyarat positif dikehendaki dipenuhi pada masa yang sama, maka isyarat jual dikeluarkan untuk menutup kedudukan.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan penunjuk MACD untuk menentukan isyarat perdagangan dengan kebolehpercayaan yang tinggi
  2. Meningkatkan garis isyarat meningkatkan kualiti isyarat
  3. Penghentian kerugian yang beransur-ansur mengawal risiko dengan berkesan
  4. Baris beli yang boleh disesuaikan menyesuaikan kepekaan strategi
  5. Semua syarat berdasarkan pengiraan penunjuk, tidak dipengaruhi oleh faktor luaran

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko:

  1. Indikator MACD tertinggal, mungkin terlepas peluang perdagangan jangka pendek
  2. Tetapan titik stop loss yang tidak betul boleh menyebabkan kerugian yang tidak perlu
  3. Parameter Tuning memerlukan banyak masa untuk ujian dan pelarasan
  4. Kesan kos urus niaga dan kelalaian

Risiko ini boleh dikurangkan dengan menyesuaikan parameter dengan sewajarnya, menggabungkan penunjuk lain, dll.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan ke arah berikut:

  1. Gabungkan dengan penunjuk lain untuk menapis isyarat, seperti KDJ, RSI, dll.
  2. Tambah algoritma pembelajaran mesin untuk menentukan titik masuk dan keluar
  3. Gunakan stop loss dinamik dan bukannya stop loss statik
  4. Uji dan mengoptimumkan parameter MACD dan garis beli
  5. Pertimbangkan kesan kos urus niaga untuk menyesuaikan strategi

Kesimpulan

Secara keseluruhan, ini adalah strategi trend-mengikuti dengan kebolehpercayaan yang tinggi. Dengan menilai trend melalui penunjuk MACD dan mengawal risiko dengan kehilangan berhenti, pulangan pelaburan yang stabil dapat diperoleh.


/*backtest
start: 2022-12-11 00:00:00
end: 2023-12-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle = "GBPUSD MACD", title = "GBPUSD 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.00045)
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, signal) and signal > 0
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)

Lebih lanjut