Strategi mengikuti tren berdasarkan MOST dan KAMA


Tanggal Pembuatan: 2024-02-29 11:04:38 Akhirnya memodifikasi: 2024-02-29 11:04:38
menyalin: 3 Jumlah klik: 697
1
fokus pada
1617
Pengikut

Strategi mengikuti tren berdasarkan MOST dan KAMA

Ringkasan

Strategi ini menggunakan kombinasi dari beberapa moving average seperti SMA, EMA, KAMA, untuk mengidentifikasi arah tren harga, dan mendesain strategi untuk mengikuti tren yang berjalan berdasarkan penembusan harga untuk mengatur stop loss. Ketika harga naik, trails the upper band sebagai stop loss; ketika harga turun, trails the lower limit sebagai stop loss. Keuntungan dari strategi ini adalah kombinasi dari beberapa moving average yang dapat meluruskan data harga, mengidentifikasi tren.

Prinsip Strategi

Strategi ini menggunakan KAMA sebagai indikator dasar untuk menentukan arah tren, karena KAMA lebih sensitif terhadap perubahan harga dan dapat mengidentifikasi pergeseran lebih awal. Strategi ini juga mencakup kombinasi dari SMA, EMA, dan beberapa jenis rata-rata bergerak lainnya yang dapat memfilter harga dan mengidentifikasi arah tren utama.

Stop loss strategi yang diatur berdasarkan harga itu sendiri dan rata-rata bergerak. Secara khusus, stop loss yang dilacak ke atas untuk rata-rata bergerak ditambah satu persen sebagai penyangga; stop loss yang dilacak ke bawah untuk rata-rata bergerak dikurangi satu persen sebagai penyangga. Hal ini dapat dicapai ketika harga terjadi reversal, segera berhenti.

Kondisi untuk masuk adalah, melakukan plus ketika harga dari bawah ke atas menerobos garis stop loss atas; dan melakukan minus ketika harga dari atas ke bawah menerobos garis stop loss bawah.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah bahwa melalui kombinasi dari beberapa moving averages, dapat meningkatkan akurasi penilaian tren dan mengurangi sinyal palsu. Pada saat yang sama, stop loss strategi ini didasarkan pada perubahan dinamika moving averages dan dapat disesuaikan dengan harga real-time untuk menanggapi kejadian yang tidak terduga.

Selain itu, dibandingkan dengan strategi indikator tunggal, strategi ini menggabungkan keunggulan dari strategi pelacakan tren dan strategi penembusan. Dalam situasi tren, keuntungan maksimal dapat diperoleh; dan dalam situasi goyangan, kerugian dapat dikurangi dengan pengaturan stop loss.

Analisis risiko

Risiko utama dari strategi ini adalah bahwa pengaturan stop loss mungkin terlalu longgar dan tidak dapat dihentikan pada waktu yang tepat. Ini karena rasio penarikan dari stop loss diatur secara tetap, dan jika ada perubahan drastis dalam situasi, tidak dapat memperbarui stop loss pada waktu yang tepat dapat menyebabkan kerugian yang lebih besar.

Selain itu, Moving Average sendiri sangat lambat dan tidak dapat bereaksi langsung terhadap perubahan harga. Hal ini juga dapat menyebabkan tidak dapat berhenti pada waktu yang tepat ketika pasar berbalik dengan cepat.

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Uji rasio stop loss line di bawah pengaturan parameter yang berbeda untuk menemukan kombinasi parameter yang lebih baik;

  2. Cobalah untuk mengatur Stop Loss Line sebagai perubahan dinamis, dan lakukan penyesuaian sesuai dengan tingkat fluktuasi pasar;

  3. Menambahkan penilaian indikator lainnya, memperkenalkan lebih banyak variabel pada Stop Loss Basis, dan meningkatkan fleksibilitas strategi;

  4. mengoptimalkan parameter periodik dari moving average untuk menemukan pengaturan periodik yang optimal untuk harga yang halus.

Meringkaskan

Strategi ini secara keseluruhan cukup kuat, dengan berbagai kombinasi moving average untuk menentukan arah tren, dan merancang mekanisme pelacakan stop loss yang dinamis, yang bertujuan untuk melacak operasi tren. Kelebihan adalah dapat mengurangi sinyal palsu, dengan mengendalikan risiko stop loss; Kelemahannya adalah bahwa garis stop loss mungkin terlalu lebar dan tidak dapat berhenti dengan cepat.

Kode Sumber Strategi
/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Atlantean Trend Signal BUY SELL Strategy', overlay=true)

ma_length = input.int(title='Moving Average Length', minval=1, defval=3)
percent = input.float(3.3, 'STOP LOSS Percent', step=0.1, minval=0)
src = input(title='Source', defval=close)
mav = input.string(title="Moving Average Type", defval="KAMA", options=["SMA", "EMA", "WMA", "DEMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "HULL", "TILL", "KAMA"])
T3a1 = 0.7
_type = false //input(false, title='Activate Moving Average Screening Mode')
_type1 = false //input(false, title='Activate Moving Average Color Change Screening Mode')
activateScreener = input.bool(false, title="Activate Screener?")
showsignallabels = input(title='Show Signal Labels?', defval=true)

Var_Func(src, ma_length) =>
    valpha = 2 / (ma_length + 1)
    vud1 = src > src[1] ? src - src[1] : 0
    vdd1 = src < src[1] ? src[1] - src : 0
    vUD = math.sum(vud1, 9)
    vDD = math.sum(vdd1, 9)
    vCMO = nz((vUD - vDD) / (vUD + vDD))
    VAR = 0.0
    VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1])
    VAR

VAR = Var_Func(src, ma_length)
DEMA = 2 * ta.ema(src, ma_length) - ta.ema(ta.ema(src, ma_length), ma_length)

Wwma_Func(src, ma_length) =>
    wwalpha = 1 / ma_length
    WWMA = 0.0
    WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1])
    WWMA

WWMA = Wwma_Func(src, ma_length)

// KAMA Calculation
Kama_Func(src, ma_length) =>
    xvnoise = math.abs(src - src[1])
    nfastend = 0.666
    nslowend = 0.0645
    nsignal = math.abs(src - src[ma_length])
    nnoise = math.sum(xvnoise, ma_length)
    nefratio = nnoise != 0 ? nsignal / nnoise : 0
    nsmooth = math.pow(nefratio * (nfastend - nslowend) + nslowend, 2)
    nAMA = 0.0
    nAMA := nz(nAMA[1]) + nsmooth * (src - nz(nAMA[1]))
    nAMA

Zlema_Func(src, ma_length) =>
    zxLag = ma_length / 2 == math.round(ma_length / 2) ? ma_length / 2 : (ma_length - 1) / 2
    zxEMAData = src + src - src[zxLag]
    ZLEMA = ta.ema(zxEMAData, ma_length)
    ZLEMA

ZLEMA = Zlema_Func(src, ma_length)

Tsf_Func(src, ma_length) =>
    lrc = ta.linreg(src, ma_length, 0)
    lrc1 = ta.linreg(src, ma_length, 1)
    lrs = lrc - lrc1
    TSF = ta.linreg(src, ma_length, 0) + lrs
    TSF

TSF = Tsf_Func(src, ma_length)

HMA = ta.wma(2 * ta.wma(src, ma_length / 2) - ta.wma(src, ma_length), math.round(math.sqrt(ma_length)))

T3e1 = ta.ema(src, ma_length)
T3e2 = ta.ema(T3e1, ma_length)
T3e3 = ta.ema(T3e2, ma_length)
T3e4 = ta.ema(T3e3, ma_length)
T3e5 = ta.ema(T3e4, ma_length)
T3e6 = ta.ema(T3e5, ma_length)
T3c1 = -T3a1 * T3a1 * T3a1
T3c2 = 3 * T3a1 * T3a1 + 3 * T3a1 * T3a1 * T3a1
T3c3 = -6 * T3a1 * T3a1 - 3 * T3a1 - 3 * T3a1 * T3a1 * T3a1
T3c4 = 1 + 3 * T3a1 + T3a1 * T3a1 * T3a1 + 3 * T3a1 * T3a1
T3 = T3c1 * T3e6 + T3c2 * T3e5 + T3c3 * T3e4 + T3c4 * T3e3

getMA(src, ma_length) =>
    ma = 0.0
    ma := switch mav
        'SMA' => ta.sma(src, ma_length)
        'EMA' => ta.ema(src, ma_length)
        'WMA' => ta.wma(src, ma_length)
        'DEMA' => DEMA
        'TMA' => ta.sma(ta.sma(src, math.ceil(ma_length / 2)), math.floor(ma_length / 2) + 1)
        'VAR' => VAR
        'WWMA' => WWMA
        'ZLEMA' => ZLEMA
        'TSF' => TSF
        'HULL' => HMA
        'TILL' => T3
        'KAMA' => Kama_Func(src, ma_length)
    ma
ALL = getMA(src, ma_length)
exMov = ALL
fark = exMov * percent * 0.01
longStop = exMov - fark
longStopPrev = nz(longStop[1], longStop)
longStop := exMov > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = exMov + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := exMov < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and exMov > shortStopPrev ? 1 : dir == 1 and exMov < longStopPrev ? -1 : dir
MOST = dir == 1 ? longStop : shortStop
cro = _type and _type1 ? ta.crossover(exMov, exMov[1]) : _type ? ta.crossover(close, exMov) : ta.crossover(exMov, MOST)
cru = _type and _type1 ? ta.crossunder(exMov, exMov[1]) : _type ? ta.crossunder(close, exMov) : ta.crossunder(exMov, MOST)
direction = 0
direction := cro ? 1 : cru ? -1 : direction[1]
col1 = exMov > exMov[1]
col3 = exMov < exMov[1]
colorM = col1 and _type and _type1 ? color.rgb(14, 241, 52) : col3 and _type and _type1 ? color.red : color.new(#00bcd4, 0)
if (cro)
    strategy.entry('LONG', strategy.long)
if (cru)
    strategy.close('LONG')

plot(_type ? na : MOST, color=color.new(color.maroon, 0), linewidth=3, title='MOST')
plot(exMov, color=colorM, linewidth=2, title='exMov')
plotshape(cro and showsignallabels, title='BUY', text='BUY', location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.new(#00bcd4, 0), textcolor=color.new(color.white, 0))
plotshape(cru and showsignallabels, title='SELL', text='SELL', location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.new(#e91e63, 0), textcolor=color.new(color.white, 0))