Range Breakout Momentum nach Strategie


Erstellungsdatum: 2023-09-14 15:10:46 zuletzt geändert: 2023-09-14 15:10:46
Kopie: 0 Klicks: 715
1
konzentrieren Sie sich auf
1617
Anhänger

Strategieprinzip

Die Strategie kombiniert Spanne, Dynamik und Trend-Tracking, um kurzfristige Trends zu erfassen. Die spezifischen Regeln der Strategie sind:

  1. Berechnen Sie die Preisspanne (die Differenz zwischen den Höhen und den Tiefen) für einen bestimmten Zeitraum und berechnen Sie die Preisspanne mit einem Smoothed Range-Indikator. Dieser Indikator kann die Expansion und Kontraktion der Preisentwicklung bestimmen.

  2. Berechnung von Dynamikindikatoren innerhalb eines bestimmten Zeitraums, wie z. B. der Hull-Kurve. Die Hull-Kurve ist sehr effektiv bei der Bestimmung der Richtung und Stärke von kurzfristigen Trends.

  3. Wenn die Farbe des Glattspektrums (wie von Rot auf Grün) ändert, zeigt dies an, dass der Bereich zu erweitern beginnt und mit der Hull-Kurve einverstanden ist (wie Hull-Kurve nach oben).

  4. Wenn die Farbe des Flachbereichs (wie von grün auf rot) ändert, zeigt dies an, dass der Bereich zu schrumpfen beginnt, und die Hull-Kurve ist mit der Hull-Kurve (wie die Hull-Kurve nach unten) verbunden.

  5. Ein Trend-Tracking-Stop-Mechanismus, wie z.B. ein Rückschritt der Hull-Kurve, wird hinzugefügt.

Durch die Bandbreite-Indikator zu beurteilen, Bewegung Ausdehnung, Dynamik-Indikator zu beurteilen, Richtung, kann schnell zu erfassen, kurzfristige Trend-Chancen. Tracking Stop-Loss-Risiko zu kontrollieren.

Strategische Vorteile

  • Die Analyse der Marktentwicklung in Kombination mit verschiedenen Indikatoren
  • Die Reichweite bestimmt den Ausbreitungsort, die Dynamik die Richtung.
  • Schnelle Vermittlung von Short-Line-Möglichkeiten und schnelle Umlaufmöglichkeiten

Strategisches Risiko

  • Schwachstellen, die schnell beseitigt werden müssen
  • Zu häufige Transaktionen können zu hohen Kosten führen
  • Kurzfristige Positionen sind nicht so effektiv wie langfristige Positionen.

Zusammenfassen

Die Strategie verwendet eine Kombination aus verschiedenen technischen Indikatoren, um kurzfristige Trendchancen schnell zu erfassen. Die Operationsfrequenz ist höher als bei einer langfristigen Strategie und kann kurzfristige Preisschwankungen erfassen. Es sind jedoch strenge Stop-Loss-Mechanismen erforderlich, um das Risiko zu kontrollieren.

Strategiequellcode
/*backtest
start: 2023-01-01 00:00:00
end: 2023-04-30 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © flygalaxies

// Strategy based on the Follow Line Indicator by Dreadblitz, Hull Suite by InSilico and Range Filter Buy and Sell 5 min by guikroth
// Designed for the purpose of back testing
// Strategy:
//  - When the Range Filter Color Changes, And the HULL Suite is in that direction, Enter In that direction
//  - e.g Range Filter Changes color from red to green, and Hull Suite is in Green. Enter Long
//  - e.g Range Filter Changes color from green to red, and Hull Suite is in red. Enter Short
//
// Credits:
// Hull Suite by InSilico  https://www.tradingview.com/u/InSilico/
// Range Filter Buy and Sell 5 min https://www.tradingview.com/u/guikroth/
// Follow Line Indicator by Dreadblitz https://www.tradingview.com/u/Dreadblitz/
// Follow line not used at this moment

//@version=5
strategy("Follow The Ranging Hull", overlay=true, initial_capital = 50000)




////////////////////
// COLOR INPUTS ///
//////////////////
rngFilterColorUp = input.color(title="Range Filter Color Up", defval = color.green, group="Color")
rngFilterColorDown = input.color(title="Range Filter Color Up", defval = color.red, group="Color")
hullColorUp = input.color(title="Hull Color Up", defval = color.green, group="Color")
hullColorDown = input.color(title="Hull Color Up", defval = color.red, group="Color")
fliColorUp = input.color(title="Follow Line Color Up", defval = color.green, group="Color")
fliColorDown = input.color(title="Follow Line Color Up", defval = color.red, group="Color")
    

///////////////////////////
// Range Filter INPUTS ///
/////////////////////////
src = input(defval=ohlc4, title="Source", group="Range Filter")
per = input.int(defval=33, minval=1, title="Sampling Period", group="Range Filter")
mult = input.float(defval=2.1, minval=0.1, title="Range Multiplier", group="Range Filter", step=0.1)

/////////////////////////
// Hull Suite INPUTS ///
///////////////////////
srcHull = input(close, title="Source", group="Hull Suite")
modeSwitch = input("Ehma", title="Hull Variation", options=["Hma", "Thma", "Ehma"], group="Hull Suite")
length = input(55, title="Length(180-200 for floating S/R , 55 for swing entry)")
switchColor = input(true, "Color Hull according to trend?", group="Hull Suite")
visualSwitch  = input(true, title="Show as a Band?", group="Hull Suite")
thicknesSwitch = input(1, title="Line Thickness", group="Hull Suite")
transpSwitch = input.int(40, title="Band Transparency",step=5, group="Hull Suite")

//////////////////////////
// FOLLOW LINE INPUTS ///
////////////////////////
BBperiod      = input.int(defval = 21, title = "BB Period", minval = 1)
BBdeviations  = input.float(defval = 1.00, title = "BB Deviations", minval = 0.1, step=0.05)
UseATRfilter  = input.bool(defval = true, title = "ATR Filter")
ATRperiod     = input.int(defval = 5, title = "ATR Period", minval = 1)
hl            = input.bool(defval = false, title = "Hide Labels")

//////////////////////////
// Range Filter Logic ///
////////////////////////

smoothrng(x, t, m) =>
    wper = t * 2 - 1
    avrng = ta.ema(math.abs(x - x[1]), t)
    smoothrng = ta.ema(avrng, wper) * m
    smoothrng
smrng = smoothrng(src, per, mult)

rngfilt(x, r) =>
    rngfilt = x
    rngfilt := x > nz(rngfilt[1]) ? x - r < nz(rngfilt[1]) ? nz(rngfilt[1]) : x - r : 
       x + r > nz(rngfilt[1]) ? nz(rngfilt[1]) : x + r
    rngfilt
filt = rngfilt(src, smrng)

upward = 0.0
upward := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1])
downward = 0.0
downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 : nz(downward[1])

filtcolor = upward > 0 ? rngFilterColorUp : downward > 0 ? rngFilterColorDown : color.orange

filtplot = plot(filt, color=filtcolor, linewidth=3, title="Range Filter")

////////////////////////
// Hull Suite Logic ///
//////////////////////


HMA(_srcHull, _length) =>  ta.wma(2 * ta.wma(_srcHull, _length / 2) - ta.wma(_srcHull, _length), math.round(math.sqrt(_length)))
EHMA(_srcHull, _length) =>  ta.ema(2 * ta.ema(_srcHull, _length / 2) - ta.ema(_srcHull, _length), math.round(math.sqrt(_length)))
THMA(_srcHull, _length) =>  ta.wma(ta.wma(_srcHull,_length / 3) * 3 - ta.wma(_srcHull, _length / 2) - ta.wma(_srcHull, _length), _length)

Mode(modeSwitch, src, len) =>
      modeSwitch == "Hma"  ? HMA(src, len) :
      modeSwitch == "Ehma" ? EHMA(src, len) : 
      modeSwitch == "Thma" ? THMA(src, len/2) : na

_hull = Mode(modeSwitch, src, int(length))
HULL =  _hull
MHULL = HULL[0]
SHULL = HULL[2]

hullColor = switchColor ? (HULL > HULL[2] ? hullColorUp : hullColorDown) : #ff9800
Fi1 = plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
Fi2 = plot(visualSwitch ? SHULL : na, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)

fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)


/////////////////////////
// Follow Line Logic ///
///////////////////////
BBUpper=ta.sma (close,BBperiod)+ta.stdev(close, BBperiod)*BBdeviations
BBLower=ta.sma (close,BBperiod)-ta.stdev(close, BBperiod)*BBdeviations

TrendLine = 0.0
iTrend = 0.0
buy = 0.0
sell = 0.0

BBSignal = close>BBUpper? 1 : close<BBLower? -1 : 0

if BBSignal == 1 and UseATRfilter == 1
    TrendLine:=low-ta.atr(ATRperiod)
    if TrendLine<TrendLine[1] 
        TrendLine:=TrendLine[1]
if BBSignal == -1 and UseATRfilter == 1
    TrendLine:=high+ta.atr(ATRperiod)
    if TrendLine>TrendLine[1]
        TrendLine:=TrendLine[1]
if BBSignal == 0 and UseATRfilter == 1
    TrendLine:=TrendLine[1]
//
if BBSignal == 1 and UseATRfilter == 0
    TrendLine:=low
    if TrendLine<TrendLine[1] 
        TrendLine:=TrendLine[1]
if BBSignal == -1 and UseATRfilter == 0
    TrendLine:=high
    if TrendLine>TrendLine[1]
        TrendLine:=TrendLine[1]
if BBSignal == 0 and UseATRfilter == 0
    TrendLine:=TrendLine[1]
//
iTrend:=iTrend[1]
if TrendLine>TrendLine[1] 
    iTrend:=1
if TrendLine<TrendLine[1] 
    iTrend:=-1
//
buy:=iTrend[1]==-1 and iTrend==1 ? 1 : na
sell:=iTrend[1]==1 and iTrend==-1? 1 : na
//
plot(TrendLine, color=iTrend > 0? fliColorUp : fliColorDown ,style=plot.style_line,linewidth=2,transp=0,title="Trend Line") 
plotshape(buy == 1 and hl == false? TrendLine-ta.atr(8) :na, text='💣', style= shape.labelup, location=location.absolute, color=color.blue, textcolor=color.white, offset=0, transp=0,size=size.auto)
plotshape(sell == 1 and hl == false ?TrendLine+ta.atr(8):na, text='🔨', style=shape.labeldown, location=location.absolute, color=color.red, textcolor=color.white, offset=0, transp=0,size=size.auto)



if(true)
    // RANGE FILTER ENTRY LONG WITH HULL
    // if(filtcolor[1] == rngFilterColorDown and filtcolor == rngFilterColorUp)
    strategy.entry("rngFiltLong", strategy.long, when = buy == 1 and hl == false)
    // RANGE FILTER ENTRY SHORT WITH HULL
    // if(filtcolor[1] == rngFilterColorUp and filtcolor == rngFilterColorDown)
    strategy.entry("rngFiltShort", strategy.short, when = sell == 1 and hl == false)
        
    
    // strategy.close("rngFiltLong", when = HULL < HULL[2] )
    // strategy.close("rngFiltShort", when = HULL > HULL[2] )