Strategi ini direka berdasarkan Kaufman Adaptive Moving Average (KAMA) untuk menyesuaikan kedudukan dagangan secara dinamik dan mengesan trend pasaran secara automatik. Fungsi utama strategi termasuk:
Melalui aplikasi fungsi ini, strategi cuba mendapatkan keuntungan tambahan dari trend sambil mengawal risiko.
Strategi ini berfungsi berdasarkan penunjuk Kaufman Adaptive Moving Average. KAMA mengira nisbah momentum harga kepada turun naik untuk menyesuaikan secara dinamik berat dan kelancaran purata bergerak, yang membolehkannya bertindak balas dengan lebih cepat terhadap perubahan harga.
Apabila KAMA melintasi di atas garis stop loss ke bawah, ia menunjukkan pembalikan trend dan mencetuskan isyarat beli. Apabila KAMA melintasi di bawah garis stop loss ke atas, ia mencadangkan pembalikan trend dan mencetuskan isyarat jual. Selepas memasuki kedudukan, strategi mengira jarak stop loss dinamik berdasarkan ATR dan menetapkan garis stop loss yang menguntungkan.
Dengan cara ini, strategi boleh mengesan trend, secara beransur-ansur memindahkan garis stop loss sehingga ia dicetuskan atau isyarat terbalik dicetuskan untuk menutup kedudukan.
Berbanding dengan strategi purata bergerak tradisional, strategi ini mempunyai kelebihan berikut:
Secara amnya, strategi ini responsif, boleh dikawal, dan sistem penjejakan trend biasa.
Strategi ini juga membawa beberapa risiko:
Untuk menguruskan risiko ini, kaedah seperti mengoptimumkan jarak stop loss dan menetapkan peratusan stop loss maksimum boleh digunakan.
Arah yang mungkin untuk mengoptimumkan strategi termasuk:
Sebagai contoh, MACD boleh ditambah sebagai penunjuk pengesahan tambahan, yang memerlukan MACD Dif positif dan berkembang bersama salib emas KAMA. Ini boleh menapis beberapa isyarat palsu dan mengelakkan kemasukan berulang yang tidak perlu.
Operasi keseluruhan strategi ini lancar. Dengan menggunakan stop loss dinamik untuk mengesan trend dan memaksimumkan keuntungan trend, ditambah dengan kemampuan penunjuk KAMA untuk bertindak balas dengan cepat terhadap perubahan pasaran yang cepat, strategi ini boleh menjadi sistem penjejakan trend yang cekap selepas beberapa pengoptimuman, sesuai 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)