Strategi Pelacakan Osilasi Golden Cross EMA Ganda


Tanggal Pembuatan: 2024-01-03 11:38:51 Akhirnya memodifikasi: 2024-01-03 11:38:51
menyalin: 0 Jumlah klik: 591
1
fokus pada
1621
Pengikut

Strategi Pelacakan Osilasi Golden Cross EMA Ganda

Ringkasan

Strategi ini menggunakan indikator EMA untuk mengidentifikasi tren dan melakukan pelacakan pada saat pergerakan yang bergoyang. Strategi ini menggabungkan strategi pelacakan tren dan penangkapan goyang untuk melakukan pelacakan garis panjang pada saat pergerakan yang kuat dan perdagangan garis pendek pada saat pergerakan yang bergoyang untuk mendapatkan keuntungan yang lebih baik.

Prinsip Strategi

Strategi ini menggunakan 20 siklus EMA sebagai indikator untuk menilai tren. Ketika harga melewati EMA, dianggap bahwa pasar mulai naik; Ketika harga melewati EMA, dianggap bahwa pasar mulai turun.

Ketika harga di atas memakai EMA, dengan harga tertinggi 20 periode tertinggi sebagai stop stop, dengan harga terendah setelah memakai EMA rendah sebagai stop loss, melakukan masuk lebih banyak; ketika harga di bawah memakai EMA, dengan harga terendah 20 periode rendah sebagai stop stop, dengan harga terendah setelah memakai EMA tinggi sebagai stop loss, melakukan masuk kosong.

Strategi juga menilai apakah ADX lebih besar dari 30. Perdagangan hanya dilakukan ketika tren cukup jelas, yaitu ketika ADX lebih tinggi dari 30. Ini dapat mencegah terjadinya stop loss dalam situasi yang bergolak.

Pada saat memegang posisi, trail stop akan disesuaikan dengan kondisi pasar secara real-time untuk mengunci lebih banyak keuntungan.

Analisis Keunggulan

Strategi ini menggabungkan keunggulan dari trend tracking dan shock trading untuk menghasilkan keuntungan yang lebih besar dalam situasi yang sedang tren, tetapi juga untuk mendapatkan keuntungan yang lebih stabil dalam situasi yang bergolak, dan memiliki kemampuan beradaptasi yang lebih kuat.

Aplikasi EMA juga membuat parameter strategi lebih sedikit, mengurangi risiko optimasi berlebihan, sehingga menjamin stabilitas strategi.

Analisis risiko

Risiko utama dari strategi ini adalah kemungkinan terjadi lebih banyak stop loss ketika guncangan meningkat. Pada saat ini, peran ADX menjadi jelas. Ketika nilai ADX rendah, perdagangan ditutup untuk menghindari kerugian ketika tidak ada tren yang jelas.

Selain itu, pengaturan stop loss yang masuk akal juga penting. Penetapan stop loss yang terlalu besar dapat meningkatkan kerugian tunggal. Penetapan stop loss yang terlalu kecil mungkin terlalu sensitif dan meningkatkan probabilitas stop loss. Di sini perlu ditemukan keseimbangan antara tujuan keuntungan dan risiko stop loss.

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Pilihan siklus EMA. Anda dapat menguji lebih banyak parameter siklus EMA untuk menemukan kombinasi parameter yang optimal.

  2. Parameter ADX dapat dioptimalkan. Periode ADX dan nilai terendah ADX dapat mencoba pengaturan yang berbeda.

  3. Algoritma Stop Loss dapat ditingkatkan, misalnya dengan memperkenalkan Stop Loss Dinamis.

  4. Anda dapat mempertimbangkan untuk menggabungkan indikator lain, seperti KDJ, MACD, dan lain-lain, untuk membentuk strategi verifikasi multi-indikator.

Meringkaskan

Strategi pelacakan getaran silang emas EMA ganda secara keseluruhan adalah strategi yang sangat praktis. Ini menggabungkan karakteristik strategi tren dan getaran, yang dapat digunakan untuk pelacakan garis panjang maupun untuk perdagangan garis pendek.

Kode Sumber Strategi
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Linda Raschke's Holy Grail", shorttitle="RHG", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true)
adxlen = input(14, title="ADX period")
adxMin = input(30)
dilen = adxlen
f_highest(_src, _length)=>
    _adjusted_length = _length < 1 ? 1 : _length
    _value = _src
    for _i = 0 to (_adjusted_length-1)
        _value := _src[_i] >= _value ? _src[_i] : _value
    _return = _value

f_lowest(_src, _length)=>
    _adjusted_length = _length < 1 ? 1 : _length
    _value = _src
    for _i = 0 to (_adjusted_length-1)
        _value := _src[_i] <= _value ? _src[_i] : _value
    _return = _value

dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

emaLength = input(20)
curEma = ema(close, emaLength)
highPeriod = input(20)
d = na

takeProfitLong = highest(high, highPeriod) 
stopLossLong = f_lowest(low, barssince(low >= curEma))

if strategy.position_size == 0
    if adx(dilen, adxlen) <= adxMin or high < curEma 
        strategy.cancel("Long")
    if adx(dilen, adxlen) > adxMin and low < curEma and high > curEma and curEma > curEma[highPeriod / 2] and curEma > curEma[highPeriod] and takeProfitLong > high
        strategy.order("Long", strategy.long, stop = high)
        strategy.exit("Exit", "Long", limit = takeProfitLong, stop = stopLossLong)
        d := high

takeProfitShort = lowest(low, highPeriod) 
stopLossShort = f_highest(high, barssince(high <= curEma))

if strategy.position_size == 0
    if adx(dilen, adxlen) <= adxMin or low > curEma 
        strategy.cancel("Short")
    if adx(dilen, adxlen) > adxMin and high > curEma and low < curEma and curEma < curEma[highPeriod / 2] and curEma < curEma[highPeriod] and takeProfitShort < low
        strategy.order("Short", strategy.short, stop = low)
        strategy.exit("Exit", "Short", limit = takeProfitShort, stop = stopLossShort)
        d := low


strategy.close("Exit")

plot(d == high ? stopLossLong : d == low ? stopLossShort : na, style = circles, linewidth = 4, color = red)
plot(d == high ? takeProfitLong : d == low ? takeProfitShort : na, style = circles, linewidth = 4, color = green)
plot(d, style = circles, linewidth = 4, color = yellow)
plot(curEma, color = black, linewidth = 2)  

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()