Strategi ini dirancang berdasarkan Kaufman Adaptive Moving Average (KAMA) untuk menyesuaikan posisi perdagangan secara dinamis dan melacak tren pasar secara otomatis.
Melalui penerapan fungsi-fungsi ini, strategi berusaha untuk mendapatkan keuntungan tambahan dari tren sambil mengendalikan risiko.
Strategi ini bekerja berdasarkan indikator Kaufman Adaptive Moving Average. KAMA menghitung rasio momentum harga terhadap volatilitas untuk menyesuaikan secara dinamis berat dan kelancaran rata-rata bergerak, yang memungkinkannya untuk merespons perubahan harga lebih cepat.
Ketika KAMA melintasi di atas garis stop loss ke bawah, itu menunjukkan pembalikan tren dan memicu sinyal beli. Ketika KAMA melintasi di bawah garis stop loss ke atas, itu menunjukkan pembalikan tren dan memicu sinyal jual. Setelah memasuki posisi, strategi menghitung jarak stop loss dinamis berdasarkan ATR dan menetapkan garis stop loss yang menguntungkan. Ketika KAMA bergerak ke arah yang menguntungkan, garis stop loss juga menyesuaikan sesuai, bergerak ke posisi yang lebih menguntungkan untuk mengunci lebih banyak keuntungan.
Dengan cara ini, strategi dapat melacak tren, secara bertahap memindahkan garis stop loss sampai dipicu atau sinyal terbalik dipicu untuk menutup posisi.
Dibandingkan dengan strategi rata-rata bergerak tradisional, strategi ini memiliki keuntungan berikut:
Secara umum, strategi ini responsif, dapat dikontrol, dan sistem pelacakan tren yang khas.
Strategi ini juga membawa beberapa risiko:
Untuk mengelola risiko ini, metode seperti mengoptimalkan jarak stop loss dan menetapkan persentase stop loss maksimum dapat digunakan.
Arah-arah yang mungkin untuk mengoptimalkan strategi meliputi:
Sebagai contoh, MACD dapat ditambahkan sebagai indikator konfirmasi tambahan, yang mengharuskan MACD Dif positif dan berkembang di samping salib emas KAMA. Ini dapat menyaring beberapa sinyal palsu dan menghindari entri berulang yang tidak perlu.
Dengan menggunakan stop loss dinamis untuk melacak tren dan memaksimalkan keuntungan tren, ditambah dengan kemampuan penyesuaian indikator KAMA untuk dengan cepat merespons perubahan pasar yang cepat, strategi ini dapat menjadi sistem pelacakan tren yang efisien setelah beberapa optimasi, cocok untuk perdagangan jangka menengah hingga panjang.
/*backtest start: 2024-01-26 00:00:00 end: 2024-02-25 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("THMA - Bharath Vc Improved", overlay=true, process_orders_on_close=true) // Function to calculate pips with higher precision getPips(price) => difc = syminfo.mintick hlpips = price / difc math.round(hlpips / syminfo.mintick) * syminfo.mintick // Inputs buyMess = input.string("Buy Message","Buy Alert Message") sellMess = input.string("Sell Message","Sell Alert Message") buyExitMessage = input.string("Buy Exit","Buy Exit Alert Message" ) sellExitMessage = input.string("Sell Exit","Sell Exit Alert Message" ) tmf = input.timeframe("", "Timeframe") length = input(title='Length', defval=14) fastLength = input(title='Fast EMA Length', defval=2) slowLength = input(title='Slow EMA Length', defval=30) src = input(title='Source', defval=close) highlight = input(title='Highlight ?', defval=true) awaitBarConfirmation = input(title='Await Bar Confirmation ?', defval=true) // Function to calculate the TMA gettma() => mom = math.abs(ta.change(src, length)) volatility = math.sum(math.abs(ta.change(src)), length) er = volatility != 0 ? mom / volatility : 0 fastAlpha = 2 / (fastLength + 1) slowAlpha = 2 / (slowLength + 1) alpha = math.pow(er * (fastAlpha - slowAlpha) + slowAlpha, 2) kama = 0.0 kama := alpha * src + (1 - alpha) * nz(kama[1], src) await = awaitBarConfirmation ? barstate.isconfirmed : true maColor = highlight ? kama > kama[1] and await ? color.green : color.red : color.new(color.purple, 0) thma = kama hma_dif = (thma - thma[2])/2 colour = hma_dif > 0 ? color.green : color.red isGreen = hma_dif > 0 [thma, isGreen, colour] // Dynamic pip size based on ATR to adapt better to smaller timeframes pips = ta.atr(14) * 0.1 // Main execution logic var float psl = na var int lastSignal = 0 var float lastPsl = na [thma, isGreen, colour] = request.security(syminfo.tickerid, tmf, gettma(), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off) plot(thma, title='KAMA', linewidth=2, color=colour) if ta.crossover(thma, psl) and strategy.position_size < 0 strategy.exit("Sell Exit", stop=thma, alert_message=sellExitMessage) if ta.crossunder(thma, psl) and strategy.position_size > 0 strategy.exit("Buy Exit", stop=thma, alert_message=buyExitMessage) if isGreen and strategy.position_size <= 0 if na(psl) psl := close + getPips(pips) strategy.entry("Buy", strategy.long, alert_message=buyMess) lastSignal := 1 if not isGreen and strategy.position_size >= 0 if na(psl) psl := close - getPips(pips) strategy.entry("Sell", strategy.short, alert_message=sellMess) lastSignal := -1 if (thma >= lastPsl or na(lastPsl)) and thma > psl psl := psl + getPips(pips) lastPsl := psl if (thma <= lastPsl or na(lastPsl)) and thma < psl psl := psl - getPips(pips) lastPsl := psl plot(psl, title="Position Stop Level", style=plot.style_stepline, color=color.blue) plot(lastPsl, title="Last Position Stop Level", style=plot.style_cross, color=color.red)