
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.
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.
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.
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.
Strategi ini dapat dioptimalkan dalam beberapa hal:
Uji rasio stop loss line di bawah pengaturan parameter yang berbeda untuk menemukan kombinasi parameter yang lebih baik;
Cobalah untuk mengatur Stop Loss Line sebagai perubahan dinamis, dan lakukan penyesuaian sesuai dengan tingkat fluktuasi pasar;
Menambahkan penilaian indikator lainnya, memperkenalkan lebih banyak variabel pada Stop Loss Basis, dan meningkatkan fleksibilitas strategi;
mengoptimalkan parameter periodik dari moving average untuk menemukan pengaturan periodik yang optimal untuk harga yang halus.
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.
/*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))