Quantitative Referenzstrategie für den Durchbruch im Aufwärtstrend

Schriftsteller:ChaoZhang, Datum: 2024-02-21 10:58:01
Tags:

img

Übersicht

Diese Strategie ist eine langfristige Holding-Strategie, die auf der Bestimmung der Trendrichtung mit einfachen gleitenden Durchschnittslinien und der Bildung von Durchbruchssignalen mit Widerstands- und Unterstützungslinien basiert.

Strategieprinzip

  1. Berechnen Sie die 20-tägige einfache gleitende Durchschnittslinie als Basis für die Entwicklung
  2. Berechnen Sie die Pivot-Hoch- und Pivot-Niedrigpunkte anhand der Benutzerinputparameter
  3. Zeichnen Sie die Widerstands- und Unterstützungslinien basierend auf den Pivot High und Pivot Low Punkten
  4. Gehen Sie lang, wenn der Schlusskurs höher als die Widerstandslinie ist
  5. Schließen von Positionen, wenn die Unterstützungslinie unterhalb der Widerstandslinie kreuzt

Diese Strategie verwendet einfache gleitende Durchschnitte, um die allgemeine Trendrichtung zu bestimmen, und verwendet anschließend Schlüsselpunktdurchbrüche, um Handelssignale zu generieren, was eine typische Breakout-Strategie ist.

Analyse der Vorteile

  1. Die Strategie bietet ausreichende Möglichkeiten und eignet sich für Aktien mit hoher Volatilität, wodurch Trends leicht erfasst werden können.
  2. Gute Risikokontrolle bei Longpositionen, hohe Risiko-Rendite-Ratio
  3. Verwenden Sie Durchbruchssignale, um das Risiko falscher Ausbrüche zu vermeiden
  4. Anpassungsfähige Parameter, hohe Anpassungsfähigkeit

Risikoanalyse

  1. Verlassen Sie sich auf die Parameteroptimierung, falsche Parameter erhöhen die Wahrscheinlichkeit von falschen Ausbrüchen
  2. Verzögerung der Durchbruchsignale, kann einige Chancen verpassen
  3. Leicht zu stoppen in volatilen Märkten
  4. Nicht rechtzeitige Anpassung der Unterstützungslinie kann zu Verlusten führen

Die Risiken können durch die Optimierung der Parameter durch Live-Handel und die Einbeziehung von Stop-Loss-/Take-Profit-Strategien reduziert werden.

Optimierungsrichtlinien

  1. Optimierung der gleitenden Durchschnittsperiodenparameter
  2. Optimierung der Widerstands- und Stützungsparameter
  3. Hinzufügen von Stop-Loss-/Take-Profit-Strategien
  4. Erhöhung der Durchbruchsbestätigungsmechanismen
  5. Filtersignale mit Handelsvolumen und anderen Indikatoren

Zusammenfassung

Insgesamt ist diese Strategie eine typische Breakout-Strategie, die sich auf Parameteroptimierung und Liquidität stützt und für Trendtrader geeignet ist.


/*backtest
start: 2023-02-14 00:00:00
end: 2024-02-20 00:00:00
period: 1d
basePeriod: 1h
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/
// © CheatCode1

//@version=5
strategy("Quantitative Trend Strategy- Uptrend long", 'Steady Uptrend Strategy', overlay=true, initial_capital = 1500, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.01, default_qty_type = strategy.percent_of_equity)


length = input.int(20, minval=1)
src = input(close, title="Source")
basis = ta.sma(src, length)
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)

inp1 = input.int(46, 'LookbackLeft')
inp2 = input.int(32, 'LookbackRight')

l1 = ta.pivothigh(close, inp1, inp2)
S1 = ta.pivotlow(close, inp1, inp2)

// plot(l1, 'Pivothigh', color.red, 1)
// // plot(S1, 'Pivot Low', color.red)

l1V = ta.valuewhen(l1, close, 0)
S1V = ta.valuewhen(S1, close, 0)

Plotl1 = not na(l1) ? l1V : na
PlotS1 = not na(S1) ? S1V : na

plot(Plotl1, 'Resistance', color.green, 1, plot.style_stepline, true)
plot(PlotS1, 'Support', color.red, 1, plot.style_stepline, true)

Priceforlong = close > l1V ? true : na
Priceforshort = close < S1V ? true : na

plotshape(Priceforlong ? high : na, 'p', shape.arrowup, location.abovebar, color.green, size = size.small)
plotshape(Priceforshort ? low : na, 's', shape.arrowdown, location.belowbar, color.red, size = size.small)

vol = volume
volma = ta.sma(vol, 20)

Plotl1C = ta.valuewhen(na(Plotl1), l1V, 0)
PlotS1C = ta.valuewhen(na(PlotS1), S1V, 0)
//Strategy Execution
volc = volume > volma 

Lc1 = Priceforlong 

Sc1 = Priceforshort

sL = Plotl1 < PlotS1 ? close : na
sS = PlotS1 > Plotl1 ? close : na


if Lc1 
    strategy.entry('Long', strategy.long)
// if Sc1 and C2
//     strategy.entry('Short', strategy.short)

if Priceforshort
    strategy.cancel('Long')
if Priceforlong   
    strategy.cancel('Short')


// Stp1 = ta.crossover(k, d)
// Ltp1 = ta.crossunder(k, d)
// Ltp = d > 70  ? Ltp1 : na
// Stp = d < 30  ? Stp1 : na


if strategy.openprofit >= 0 and sL
    strategy.close('Long')
if strategy.openprofit >= 0 and sS
    strategy.close('Short')
takeP = input.float(2, title='Take Profit') / 100
stopL = input.float(1.75, title='Stop Loss') / 100


// // Pre Directionality

Stop_L = strategy.position_avg_price * (1 - stopL)

Stop_S = strategy.position_avg_price * (1 + stopL)

Take_S= strategy.position_avg_price * (1 - takeP)

Take_L = strategy.position_avg_price * (1 + takeP)
     
// sL = Plotl1 < PlotS1 ? close : na
// sS = PlotS1 < Plotl1 ? close : na
     
// //Post Excecution
if strategy.position_size > 0 and not (Lc1)
    strategy.exit("Close Long", stop = Stop_L, limit = Take_L)

if strategy.position_size < 0 and not (Sc1)
    strategy.exit("Close Short", stop = Stop_S, limit = Take_S)

Mehr