Die Ressourcen sind geladen. Beförderung...

SR-Ausbruchstrategie

Schriftsteller:ChaoZhang, Datum: 2024-05-15 16:30:14
Tags:

img

Übersicht

Die SR-Breakout-Strategie ist eine auf Basis des Breakout-Finder-Indikators von LonesomeTheBlue entwickelte Support- und Resistance-Breakout-Strategie. Die Hauptidee dieser Strategie besteht darin, lange oder kurze Signale zu generieren, indem beurteilt wird, ob der Schlusskurs durch das Support- oder Widerstandsniveau bricht. Die Standard-Einstellungen basieren auf dem 8-Stunden-Candlestick-Chart, aber es gibt mehr optimale Parameter-Einstellungen auf dem 4-Stunden-Candlestick-Chart. Diese Strategie verwendet die Pivothigh- und Pivotlow-Funktionen, um Support- und Widerstandsniveaus zu bestimmen, und verwendet die höchsten und niedrigsten Preise, um Breakouts zu bestimmen.

Strategieprinzip

  1. Verwenden Sie die Pivothigh- und Pivotlow-Funktionen, um die Höchst- und Tiefstände über einen bestimmten Zeitraum zu berechnen und in Arrays zu speichern.
  2. Der aktuelle Schlusskurs wird dann als bullischer Ausbruch beurteilt und ein Long-Signal erzeugt.
  3. Der aktuelle Schlusskurs wird dann als Bären-Breakout beurteilt und ein Kurzsignal erzeugt.
  4. Nach der Erstellung eines Handelssignals berechnen Sie die Stop-Loss- und Take-Profit-Preise auf der Grundlage der festgelegten Stop-Loss- und Take-Profit-Kennzahlen und setzen die entsprechenden Stop-Loss- und Take-Profit-Orders.
  5. Zeichnen Sie den entsprechenden Ausbruchbereich entsprechend der Ausbruchrichtung.

Strategische Vorteile

  1. Der Support- und Widerstandsbruch ist eine klassische Handelsstrategie mit einer gewissen praktischen Basis.
  2. Durch die Verwendung der Pivothigh- und Pivotlow-Funktionen zur Berechnung von Unterstützungs- und Widerstandsniveaus können Ausbruchchancen relativ genau erfasst werden.
  3. Die Code-Struktur dieser Strategie ist klar, und durch die Speicherung von Höhen und Tiefen in Arrays, ist es bequem für Backtesting und Optimierung.
  4. Es werden Stop Loss und Take Profit eingestellt, wodurch Risiken relativ gut kontrolliert werden können.

Strategische Risiken

  1. Die Strategie des Unterstützungs- und Widerstands-Break-outs funktioniert in unruhigen Märkten schlecht und ist anfällig für häufige falsche Breakouts.
  2. Festgelegte Stop-Loss- und Take-Profit-Verhältnisse können sich möglicherweise nicht an unterschiedliche Marktbedingungen anpassen, was zu einem Ungleichgewicht von Risiko und Rendite führt.
  3. Diese Strategie berücksichtigt nur Preisfaktoren und berücksichtigt keine anderen wichtigen Indikatoren wie das Handelsvolumen, das einige wichtige Signale verpassen kann.

Strategieoptimierung

  1. Es sollte in Betracht gezogen werden, mehr technische Indikatoren wie Handelsvolumen, MACD usw. einzuführen, um die Genauigkeit und Zuverlässigkeit der Signale zu verbessern.
  2. Für Stop Loss und Take Profit sollten Sie einen Trailing Stop oder eine dynamische Stop Loss und Take Profit-Ratio verwenden, um sich besser an die unterschiedlichen Marktbedingungen anzupassen.
  3. Überlegen Sie, Filterbedingungen wie Trendfilterung, Volatilitätsfilterung usw. einzuführen, um falsche Ausbrüche in unbeständigen Märkten zu reduzieren.
  4. Überlegen Sie, ob Sie Unterstützungs- und Widerstandsniveaus optimieren möchten, z. B. indem Sie Anpassungsperioden verwenden, Fibonacci-Level einführen usw.

Zusammenfassung

Die SR-Breakout-Strategie ist eine Handelsstrategie, die auf der klassischen Idee des Support- und Resistance-Breakouts basiert. Durch die Verwendung der Pivothigh- und Pivotlow-Funktionen zur Berechnung von Support- und Resistance-Levels und durch das Beurteilen, ob der Schlusskurs diese Level durchbricht, um Handelssignale zu generieren, besteht der Vorteil dieser Strategie darin, dass die Idee klar und einfach zu implementieren und zu optimieren ist; zugleich bestehen auch einige Risiken, wie schlechte Performance in unbeständigen Märkten, und die Risiken, die durch feste Stop-Loss- und Take-Profit-Verhältnisse entstehen können. In Zukunft können wir die Optimierung und Verbesserung dieser Strategie aus Aspekten wie technischen Indikatoren, Stop-Loss- und Take-Profit-Anzeigen, Filterbedingungen, Support- und Resistance-Optimierung usw. in Betracht ziehen, um ihre Stabilität und Rentabilität zu verbessern.


/*backtest
start: 2024-05-07 00:00:00
end: 2024-05-14 00:00:00
period: 10m
basePeriod: 1m
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/
// © LonesomeTheBlue © chanu_lev10k

//@version=5
strategy('SR Breakout Strategy', overlay=true, max_bars_back=500, max_lines_count=400)
prd = input.int(defval=5, title='Period', minval=2)
bo_len = input.int(defval=71, title='Max Breakout Length', minval=30, maxval=300)
cwidthu = input.float(defval=3., title='Threshold Rate %', minval=1., maxval=10) / 100
mintest = input.int(defval=2, title='Minimum Number of Tests', minval=1)
bocolorup = input.color(defval=color.blue, title='Breakout Colors', inline='bocol')
bocolordown = input.color(defval=color.red, title='', inline='bocol')
// lstyle = input.string(defval=line.style_solid, title='Line Style')
issl = input.bool(title='SL', inline='linesl1', group='Stop Loss / Take Profit:', defval=false)
slpercent = input.float(title=', %', inline='linesl1', group='Stop Loss / Take Profit:', defval=18.0, minval=0.0, step=0.1)
istp = input.bool(title='TP', inline='linetp1', group='Stop Loss / Take Profit:', defval=false)
tppercent = input.float(title=', %', inline='linetp1', group='Stop Loss / Take Profit:', defval=18.0, minval=0.0, step=0.1)

//width
lll = math.max(math.min(bar_index, 300), 1)
float h_ = ta.highest(lll)
float l_ = ta.lowest(lll)
float chwidth = (h_ - l_) * cwidthu

// check if PH/PL
ph = ta.pivothigh(prd, prd)
pl = ta.pivotlow(prd, prd)

//keep Pivot Points and their locations in the arrays
var phval = array.new_float(0)
var phloc = array.new_int(0)
var plval = array.new_float(0)
var plloc = array.new_int(0)

// keep PH/PL levels and locations
if bool(ph)
    array.unshift(phval, ph)
    array.unshift(phloc, bar_index - prd)
    if array.size(phval) > 1  // cleanup old ones
        for x = array.size(phloc) - 1 to 1 by 1
            if bar_index - array.get(phloc, x) > bo_len
                array.pop(phloc)
                array.pop(phval)

if bool(pl)
    array.unshift(plval, pl)
    array.unshift(plloc, bar_index - prd)
    if array.size(plval) > 1  // cleanup old ones
        for x = array.size(plloc) - 1 to 1 by 1
            if bar_index - array.get(plloc, x) > bo_len
                array.pop(plloc)
                array.pop(plval)

// check bullish cup
float bomax = na
int bostart = bar_index
num = 0
hgst = ta.highest(prd)[1]
if array.size(phval) >= mintest and close > open and close > hgst
    bomax := array.get(phval, 0)
    xx = 0
    for x = 0 to array.size(phval) - 1 by 1
        if array.get(phval, x) >= close
            break
        xx := x
        bomax := math.max(bomax, array.get(phval, x))
        bomax
    if xx >= mintest and open <= bomax
        for x = 0 to xx by 1
            if array.get(phval, x) <= bomax and array.get(phval, x) >= bomax - chwidth
                num += 1
                bostart := array.get(phloc, x)
                bostart
        if num < mintest or hgst >= bomax
            bomax := na
            bomax

// if not na(bomax) and num >= mintest
//     line.new(x1=bar_index, y1=bomax, x2=bostart, y2=bomax, color=bocolorup)
//     line.new(x1=bar_index, y1=bomax - chwidth, x2=bostart, y2=bomax - chwidth, color=bocolorup)
//     line.new(x1=bostart, y1=bomax - chwidth, x2=bostart, y2=bomax, color=bocolorup)
//     line.new(x1=bar_index, y1=bomax - chwidth, x2=bar_index, y2=bomax, color=bocolorup)

plotshape(not na(bomax) and num >= mintest, location=location.belowbar, style=shape.triangleup, color=bocolorup, size=size.small)
//alertcondition(not na(bomax) and num >= mintest, title='Breakout', message='Breakout')

// check bearish cup
float bomin = na
bostart := bar_index
num1 = 0
lwst = ta.lowest(prd)[1]
if array.size(plval) >= mintest and close < open and close < lwst
    bomin := array.get(plval, 0)
    xx = 0
    for x = 0 to array.size(plval) - 1 by 1
        if array.get(plval, x) <= close
            break
        xx := x
        bomin := math.min(bomin, array.get(plval, x))
        bomin
    if xx >= mintest and open >= bomin
        for x = 0 to xx by 1
            if array.get(plval, x) >= bomin and array.get(plval, x) <= bomin + chwidth
                num1 += 1
                bostart := array.get(plloc, x)
                bostart
        if num1 < mintest or lwst <= bomin
            bomin := na
            bomin

// if not na(bomin) and num1 >= mintest
//     line.new(x1=bar_index, y1=bomin, x2=bostart, y2=bomin, color=bocolordown)
//     line.new(x1=bar_index, y1=bomin + chwidth, x2=bostart, y2=bomin + chwidth, color=bocolordown)
//     line.new(x1=bostart, y1=bomin + chwidth, x2=bostart, y2=bomin, color=bocolordown)
//     line.new(x1=bar_index, y1=bomin + chwidth, x2=bar_index, y2=bomin, color=bocolordown)

plotshape(not na(bomin) and num1 >= mintest, location=location.abovebar, style=shape.triangledown, color=bocolordown, size=size.small)

//alertcondition(not na(bomin) and num1 >= mintest, title='Breakdown', message='Breakdown')
//alertcondition(not na(bomax) and num >= mintest or not na(bomin) and num1 >= mintest, title='Breakout or Breakdown', message='Breakout or Breakdown')

// Long Short conditions
longCondition = not na(bomax) and num >= mintest
if longCondition
    strategy.entry('Long', strategy.long)
shortCondition = not na(bomin) and num1 >= mintest
if shortCondition
    strategy.entry('Short', strategy.short)

// Entry price / Take Profit / Stop Loss
//entryprice = strategy.position_avg_price
entryprice = ta.valuewhen(condition=longCondition or shortCondition, source=close, occurrence=0)
pm = longCondition ? 1 : shortCondition ? -1 : 1 / math.sign(strategy.position_size)
takeprofit = entryprice * (1 + pm * tppercent * 0.01)
stoploss = entryprice * (1 - pm * slpercent * 0.01)
strategy.exit(id='Exit Long', from_entry='Long', stop=issl ? stoploss : na, limit=istp ? takeprofit : na, alert_message='Exit Long')
strategy.exit(id='Exit Short', from_entry='Short', stop=issl ? stoploss : na, limit=istp ? takeprofit : na, alert_message='Exit Short')

Mehr