Strategi Penjejakan Ayunan Palang Emas EMA Berganda


Tarikh penciptaan: 2024-01-03 11:38:51 Akhirnya diubah suai: 2024-01-03 11:38:51
Salin: 0 Bilangan klik: 591
1
fokus pada
1621
Pengikut

Strategi Penjejakan Ayunan Palang Emas EMA Berganda

Gambaran keseluruhan

Strategi pengesanan gegaran gempa EMA Gold Cross adalah strategi yang menggunakan indikator EMA untuk mengenal pasti trend dan untuk mengesan dalam keadaan gegaran. Strategi ini menggabungkan pemikiran untuk mengesan trend dan menangkap gegaran, untuk mengesan garis panjang dalam keadaan yang kuat, untuk berdagang garis pendek dalam keadaan gegaran, untuk mendapatkan keuntungan yang lebih baik.

Prinsip Strategi

Strategi ini menggunakan EMA 20 kitaran sebagai penunjuk untuk menilai trend. Apabila harga naik melalui EMA, dianggap bahawa pasaran mula naik; Apabila harga turun melalui EMA, dianggap bahawa pasaran mula turun.

Apabila harga di atas memakai EMA, dengan harga tertinggi 20 periodhighest sebagai berhenti, dengan harga terendah selepas memakai EMA rendah sebagai berhenti rugi, buat masuk lebih banyak; apabila harga di bawah memakai EMA, dengan harga terendah 20 periodlowest sebagai berhenti, dengan harga terendah selepas memakai EMA tinggi sebagai berhenti rugi, buat masuk kosong.

Strategi ini juga akan menilai sama ada ADX lebih besar daripada 30. Ia hanya akan berdagang apabila trend cukup jelas, iaitu ADX lebih tinggi daripada 30. Ini dapat mengelakkan stop loss dalam keadaan goyah.

Semasa memegang kedudukan, trail stop akan disesuaikan dengan keadaan pasaran dalam masa nyata untuk mengunci lebih banyak keuntungan.

Analisis kelebihan

Strategi ini menggabungkan kelebihan trend-following dan perdagangan goyah, untuk mendapatkan keuntungan yang lebih besar dalam keadaan yang sedang maju, tetapi juga untuk mendapatkan keuntungan yang lebih stabil dalam keadaan yang goyah, dengan daya adaptasi yang lebih kuat.

Penggunaan EMA juga menjadikan parameter strategi lebih sedikit, mengurangkan risiko pengoptimuman berlebihan, dan dengan itu memastikan kestabilan strategi.

Analisis risiko

Risiko utama strategi ini adalah bahawa lebih banyak kerugian boleh berlaku apabila guncangan meningkat. Ini adalah apabila peranan ADX menjadi jelas. Apabila nilai ADX rendah, perdagangan akan ditutup untuk mengelakkan kerugian apabila tidak ada trend yang jelas.

Di samping itu, menetapkan titik berhenti yang munasabah juga penting. Tetapan titik berhenti yang terlalu besar boleh meningkatkan kerugian tunggal; tetapan titik berhenti yang terlalu kecil mungkin terlalu sensitif dan meningkatkan kebarangkalian berhenti. Di sini perlu mencari keseimbangan antara sasaran keuntungan dan risiko berhenti.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Pilihan kitaran EMA. Anda boleh menguji lebih banyak parameter kitaran EMA untuk mencari kombinasi parameter terbaik.

  2. Parameter ADX boleh dioptimumkan. Siklus ADX dan nilai had ADX boleh mencuba tetapan yang berbeza.

  3. Algoritma Stop Loss boleh diperbaiki, seperti pengenalan Stop Loss Dinamik.

  4. Anda boleh mempertimbangkan untuk menggabungkannya dengan penunjuk lain, seperti KDJ, MACD, dan lain-lain, untuk membentuk strategi pengesahan pelbagai penunjuk.

ringkaskan

Strategi pengesanan gegaran silang emas EMA ganda secara keseluruhan adalah strategi yang sangat praktikal. Ia menggabungkan ciri-ciri strategi trend dan gegaran, boleh digunakan untuk pengesanan garis panjang dan boleh digunakan untuk perdagangan garis pendek.

Kod 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()