
Strategi ini berdasarkan reka bentuk Kaufman Adaptive Moving Average (KAMA) yang membolehkan anda menyesuaikan kedudukan dagangan secara dinamik dan mengikuti trend pasaran secara automatik. Fungsi utama strategi ini termasuk:
Dengan menggunakan ciri-ciri ini, strategi cuba mendapatkan keuntungan tambahan dari trend sambil mengawal risiko.
Strategi ini berdasarkan kerja Kaufman dalam penunjuk purata bergerak yang beradaptasi. KAMA secara dinamik menyesuaikan berat dan kelancaran purata dengan mengira nisbah pergerakan harga dan kadar turun naik, untuk bertindak balas lebih cepat terhadap perubahan harga.
Apabila KAMA melintasi garisan stop loss ke bawah, ia menunjukkan trend berbalik dan menghasilkan isyarat beli; apabila KAMA melintasi garisan stop loss ke bawah, ia menunjukkan trend berbalik dan menghasilkan isyarat jual. Setelah memasuki kedudukan, strategi akan mengira jarak berhenti yang dinamik berdasarkan ATR dan menubuhkan garisan stop loss. Apabila KAMA bergerak ke arah yang menguntungkan, garisan stop loss juga akan mengikuti dan memindahkan garisan stop loss ke kedudukan yang lebih menguntungkan untuk mengunci lebih banyak keuntungan.
Dengan cara ini, strategi dapat mengikuti aliran dan bergerak secara beransur-ansur sehingga garis berhenti dipicu atau isyarat pembalikan dipicu dan posisi ditutup.
Strategi ini mempunyai kelebihan berbanding strategi purata bergerak tradisional:
Secara keseluruhannya, strategi ini bertindak balas dengan cepat dan boleh dikawal, dan merupakan tipikal strategi trend-following.
Strategi ini mempunyai beberapa risiko:
Risiko ini boleh dikawal dengan mengoptimumkan jarak hentian, menetapkan peratusan hentian maksimum dan sebagainya. Ia juga boleh digabungkan dengan petunjuk lain sebagai pengesahan untuk mengelakkan perdagangan yang salah.
Strategi ini boleh dioptimumkan untuk:
Sebagai contoh, anda boleh menguji penambahan MACD sebagai penunjuk pengesahan tambahan, dan pada masa yang sama KAMA Goldfork, juga meminta MACDDif juga positif dan diperluas. Ini dapat menyaring beberapa isyarat palsu dan mengelakkan pembukaan kedudukan berulang yang tidak perlu.
Strategi ini berfungsi dengan lancar secara keseluruhan, menggunakan trend tracking stop loss yang dinamik, dan memaksimumkan keuntungan trend. Kebolehan menyesuaikan diri KAMA juga membolehkan strategi mengikuti perubahan pesat pasaran. Dengan pengoptimuman tertentu, strategi ini boleh menjadi program pengesanan trend yang cekap, sesuai untuk operasi garis panjang dan tengah.
/*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)