Penulis:ChaoZhang, Tanggal: 2024-01-23 11:22:02
Tag:

img

Gambaran umum

Strategi ini adalah strategi perdagangan otomatis berdasarkan crossover rata-rata bergerak ganda dari indikator teknis MACD. Ini memanfaatkan crossover garis sinyal MACD untuk menentukan arah tren untuk mengikuti tren.

Logika Strategi

Strategi ini memanfaatkan logika ini untuk pergi panjang pada salib emas dan posisi dekat pada salib kematian; atau pergi pendek pada salib kematian dan posisi dekat pada salib emas untuk secara otomatis mengikuti tren. Sementara itu, strategi juga menilai apakah garis MACD absolut positif atau negatif untuk menghindari sinyal palsu dan memastikan benar-benar menangkap titik pembalikan tren.

Keuntungan dari Strategi

  • Memanfaatkan crossover rata-rata bergerak ganda untuk menentukan arah tren secara akurat dan menangkap pembalikan tren
  • Indikator teknis MACD mengurangi sinyal palsu dan meningkatkan kualitas sinyal
  • Fleksibilitas untuk pergi panjang atau pendek atau hanya panjang/pendek
  • Parameter yang dapat disesuaikan memenuhi lingkungan pasar yang berbeda

Risiko dari Strategi

  • Indikator MACD rentan terhadap sinyal palsu selama konsolidasi pasar
  • Parameter perlu disesuaikan dengan benar untuk menghindari terlalu sensitif atau inert

Pengurangan Risiko:

  • Gabungkan dengan indikator lain untuk menyaring sinyal
  • Tune parameter ke frekuensi perdagangan yang lebih rendah
  • Hanya mengadopsi strategi ketika tren jelas

Bidang Peningkatan

Strategi dapat ditingkatkan dari aspek berikut:

  1. Menggabungkan indikator lain seperti KDJ, Bollinger Bands dll untuk mengkonfirmasi sinyal dan menyaring sinyal palsu

  2. Memperbaiki mekanisme masuk, misalnya menambahkan filter breakout untuk menghindari entri dini atau terlambat

  3. Mengoptimalkan pengaturan parameter, menyesuaikan periode baris cepat dan lambat berdasarkan kerangka waktu dan rezim pasar yang berbeda

  4. Tambahkan stop loss untuk mengendalikan kerugian perdagangan tunggal

  5. Ekspansi ke produk lain seperti forex, mata uang kripto dll

Ringkasan


/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DeMindSET

//@version=4
strategy("MACD Trend Follow Strategy", overlay=false)
// Getting inputs
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"]) 
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
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=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.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=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)
//
Bull= macd > signal
Bear= macd < signal
ConBull=macd>0
ConBear=macd<0
//
Green= Bull and ConBull
Red= Bear and ConBear
Yellow= Bull and ConBear
Blue= Bear and ConBull
//
bcolor = Green ? color.green : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2019, title = "From Year", minval = 1920)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

if LSB == "Long only" and Green
    strategy.entry("L",true)
if LSB == "Long only" and Red
    strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Green
    strategy.entry("L",true)
if LSB == "Both" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Green
    strategy.close("S",qty_percent=100,comment="TP Short")


Lebih banyak