Strategi pelacakan keseimbangan panjang-pendek MACD


Tanggal Pembuatan: 2023-10-17 16:15:53 Akhirnya memodifikasi: 2023-10-17 16:15:53
menyalin: 0 Jumlah klik: 704
1
fokus pada
1617
Pengikut

Strategi pelacakan keseimbangan panjang-pendek MACD

Ringkasan

Strategi ini adalah strategi pelacakan tren yang menggunakan indikator MACD untuk mengidentifikasi arah polygonal. Strategi ini menghasilkan garis utama MACD dengan menghitung perbedaan antara rata-rata bergerak cepat dan rata-rata bergerak lambat. Strategi ini menggunakan garis utama MACD dan garis sinyal untuk menghasilkan sinyal beli dengan persilangan emas, dan untuk menghasilkan sinyal jual dengan persilangan mati.

Prinsip Strategi

Kode pertama mengatur waktu untuk memulai pengembalian untuk menguji kinerja historis dari strategi.

Kemudian adalah perhitungan indikator MACD, termasuk pengaturan panjang rata-rata bergerak cepat, rata-rata bergerak lambat dan MACD rata-rata. Garis cepat lebih sensitif dan garis lambat lebih stabil.

Berdasarkan sinyal multipel dan kosong, mencatat waktu terakhir menghasilkan sinyal. Ketika garis cepat dan garis lambat terjadi persimpangan, konfirmasi dan catat sinyal beli / jual, maka Anda dapat membuka posisi.

Setelah masuk, terus melacak harga tertinggi dan terendah dari posisi tersebut. Tetapkan persentase stop loss dan keluar dari stop loss ketika kerugian mencapai persentase tersebut.

Keunggulan Strategis

  1. Indikator MACD dapat mengidentifikasi tren secara efektif, dan merupakan salah satu indikator klasik analisis teknis.

  2. Desain diferensial dari rata-rata cepat dan lambat, dapat menangkap dinamika dan arah perubahan harga lebih awal.

  3. Dengan menggunakan efek penyaringan garis rata, beberapa sinyal palsu dapat disaring.

  4. Strategi ini menambahkan mekanisme stop loss untuk mengendalikan risiko.

Risiko Strategis

  1. Indikator MACD mudah menghasilkan sinyal palsu, indikator itu sendiri dapat mengoptimalkan ruang terbatas.

  2. Pengaturan titik penangguhan yang tidak tepat mungkin terlalu aktif atau konservatif, yang perlu dioptimalkan untuk varietas yang berbeda.

  3. Posisi jumlah tetap dapat menyebabkan leverage terlalu tinggi, dan Anda dapat mempertimbangkan untuk menetapkan ambang risiko sesuai dengan ukuran dana.

  4. Reasonabilitas pilihan jendela waktu retrospektif perlu diverifikasi, untuk menghindari overfitting.

Optimasi Strategi

  1. Mengoptimalkan kombinasi parameter garis rata-rata, menemukan parameter optimal untuk penyesuaian varietas yang berbeda.

  2. Tambahkan filter indikator lain, seperti K-line, Blink, RSI, dan lain-lain untuk memverifikasi sinyal.

  3. Efektivitas dari berbagai stop loss dapat dinilai berdasarkan indikator seperti penarikan, rasio Sharp.

  4. Mengoptimalkan strategi stop loss, seperti move stop loss, and hang stop loss.

  5. Cobalah untuk mengatur posisi dinamis berdasarkan perubahan dana, volatilitas, dll.

Meringkaskan

Strategi keseimbangan MACD adalah strategi pelacakan tren yang didasarkan pada indikator teknis klasik. Ini memiliki kemampuan menangkap yang sensitif terhadap dinamika perubahan harga dan dapat disesuaikan dengan baik dengan berbagai varietas melalui pengoptimalan parameter.

Kode Sumber Strategi
/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("MACD BF", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Component Code Start ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true

///////////////  MACD Component - Default settings for one day. /////////////// 
fastLength = input(12) // 72 for 4hr
slowlength = input(26) // 156 for 4 hr
MACDLength = input(12)  // 12 for 4hr

MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

long = crossover(delta, 0) 
short = crossunder(delta, 0) 

last_long = long ? time : nz(last_long[1])
last_short = short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal = short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = long_signal ? time : nz(last_long_signal[1])
last_short_signal = short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low = not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

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

/////////////// Strategy Component /////////////// 
// Strategy Entry
if testPeriod()
    strategy.entry("Long Entry",  strategy.long, when=long_signal)
    strategy.entry("Short Entry", strategy.short, when=short_signal)

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) // LONG SL
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) // SHORT SL

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

// Strategy SL Exit
if testPeriod()
    strategy.exit("Long SL", "Long Entry", stop=long_sl, when=since_longEntry > 1)
    strategy.exit("Short SL", "Short Entry", stop=short_sl, when=since_shortEntry > 1)

//plot(strategy.equity, title="equity", color=blue, linewidth=2, style=areabr)