
Diese Strategie basiert auf dem Keltner-Kanal-Indikator und entwickelt eine Rücknahme-Trading-Strategie. Die Strategie vergleicht die Beziehung zwischen dem Preis und dem Auf- und Abgang des Keltner-Kanals, um zu beurteilen, wann der Preis sich umdrehen kann, und um geeignete Positionen zu machen.
Diese Strategie verwendet die Keltner-Kanal-Indikatoren, um die Preisentwicklung zu bestimmen. Die Keltner-Kanal besteht aus einer Mittellinie und einer durchschnittlichen realen Breite (ATR). Die Kanaloberfläche ist gleich dem N-fachen der ATR plus die Mittellinie; die Unterbahn ist gleich dem N-fachen der ATR minus die Mittellinie.
Die Strategie beurteilt außerdem die Chance auf einen Rückzug, wenn der Preis die Kanalgrenze erneut berührt oder durchbricht. Zum Beispiel, wenn der Preis nach einem Anstieg die Unterbahn durchbricht, ohne die Oberbahn zu berühren, wieder fällt und die Unterbahn berührt. Dies ist eine Gelegenheit, mehrere Rückzüge zu machen.
Es handelt sich um eine Strategie, bei der der Preis zurückgezogen wird.
Die Hauptrisiken dieser Strategie sind:
Gegenmaßnahmen:
Diese Strategie kann in folgenden Bereichen optimiert werden:
Die Strategie integriert die Methoden der Trendbeurteilung und der Rücknahme von Geschäften und hat einen einzigartigen Vorteil bei der Erfassung von Umkehrungen. Durch die Anpassung der Parameter und die Erweiterung der Funktionen können die Stabilität und die Profitabilität der Strategie weiter verbessert werden.
/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Keltner bounce from border. No repaint. (by Zelibobla)", shorttitle="Keltner border bounce", overlay=true)
price = close
// build Keltner
keltnerLength = input(defval=200, minval=1, title="Keltner EMA Period Length")
keltnerATRLength = input(defval=200, minval=1, title="Keltner ATR Period Length (the same as EMA length in classic Keltner Channels)")
keltnerDeviation = input(defval=8, minval=1, maxval=15, title="Keltner band width (in ATRs)")
closeOnEMATouch = input(type=bool, defval=false, title="Close trade on EMA touch? (less drawdown, but less profit and higher commissions impact)")
enterOnBorderTouchFromInside = input(type=bool, defval=false, title="Enter on border touch from inside? (by default from outside, which is less risky but less profitable)")
SL = input(defval=50, minval=0, maxval=10000, title="Stop loss in ticks (leave zero to skip)")
EMA = sma(price, keltnerLength)
ATR = atr(keltnerATRLength)
top = EMA + ATR * keltnerDeviation
bottom = EMA - ATR * keltnerDeviation
buyEntry = crossover(price, bottom)
sellEntry = crossunder(price, top)
plot(EMA, color=aqua,title="EMA")
p1 = plot(top, color=silver,title="Keltner top")
p2 = plot(bottom, color=silver,title="Keltner bottom")
fill(p1, p2)
tradeSize = input(defval=1, minval=1, title="Trade size")
if ( enterOnBorderTouchFromInside and crossunder(price, bottom) )
strategy.entry("BUY", strategy.long, qty=tradeSize, comment="BUY")
else
if( crossover(price, bottom) )
strategy.entry("BUY", strategy.long, qty=tradeSize, comment="BUY")
if( crossover(price,EMA) and closeOnEMATouch )
strategy.close("BUY")
if( 0 != SL )
strategy.exit("EXIT BUY", "BUY", qty=tradeSize, loss=SL)
strategy.exit("EXIT SELL", "SELL", qty=tradeSize, loss=SL)
if( enterOnBorderTouchFromInside and crossover(price, bottom) )
strategy.entry("SELL", strategy.long, qty=tradeSize, comment="SELL")
else
if ( crossunder(price, top) )
strategy.entry("SELL", strategy.short, qty=tradeSize, comment="SELL")
if( crossunder(price, EMA) and closeOnEMATouch )
strategy.close("SELL")