
Die Strategie basiert auf dem Kaufman Adaptive Moving Average (KAMA) Design und kann die Handelsposition dynamisch anpassen und automatisch die Markttrends verfolgen. Die Hauptfunktionen der Strategie sind:
Durch die Verwendung dieser Funktionen versucht die Strategie, zusätzliche Gewinne aus dem Trend zu erzielen und gleichzeitig das Risiko zu kontrollieren.
Die Strategie basiert auf der Arbeit von Kaufman Adaptive Moving Average Indicator. KAMA berechnet die Werte der Preisbewegungen und der Schwankungen und passt dynamisch die Gewichte und die Gleitlänge der Mittelwerte an, um schneller auf Preisänderungen zu reagieren.
Wenn die KAMA die Downward-Stop-Linie überschreitet, gibt es einen Trendwechsel, der ein Kaufsignal erzeugt. Wenn die KAMA die Downward-Stop-Linie überschreitet, gibt es einen Trendwechsel, der ein Verkaufssignal erzeugt. Nach dem Eintritt in die Position berechnet die Strategie eine dynamische Stopp-Distanz basierend auf der ATR und erstellt eine Stop-Line.
Auf diese Weise kann die Strategie den Trend verfolgen und die Stop-Line schrittweise bewegen, bis die Stop-Line ausgelöst wird oder ein Umkehrsignal ausgelöst wird.
Die Strategie hat folgende Vorteile gegenüber herkömmlichen Moving Average Strategien:
Insgesamt ist die Strategie schnell und beherrschbar und typisch für Trend-Tracking-Strategien.
Die Strategie birgt auch einige Risiken:
Diese Risiken können durch die Optimierung der Stop-Loss-Distanz, die Einstellung des maximalen Stop-Loss-Prozentsatzes und andere Methoden kontrolliert werden. Sie können auch in Verbindung mit anderen Indikatoren als Bestätigung verwendet werden, um falsche Geschäfte zu vermeiden.
Die Optimierungsmöglichkeiten der Strategie umfassen:
So kann beispielsweise getestet werden, dass MACD als Hilfsbestätigungsindikator hinzugefügt wird, während KAMA Goldfork verlangt, dass MACDDif positiv und erweitert wird. Dies kann einige falsche Signale filtern und unnötige Wiederholungen der Position vermeiden.
Die Strategie funktioniert als Ganzes reibungslos und nutzt dynamische Stop-Loss-Tracking-Trends, um Trendgewinne zu maximieren. Die Anpassungsfähigkeit der KAMA-Indikatoren ermöglicht es der Strategie, mit den schnellen Veränderungen des Marktes Schritt zu halten. Mit einer gewissen Optimierung kann die Strategie zu einem effizienten Trend-Tracking-Programm werden, das für mittlere und lange Linien geeignet ist.
/*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)