Trendfolgestrategie basierend auf gleitendem Durchschnitt und Volatilität


Erstellungsdatum: 2023-09-21 21:32:40 zuletzt geändert: 2023-09-21 21:32:40
Kopie: 0 Klicks: 658
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie verwendet verschiedene Indikatoren wie die Durchschnittslinie, die Brin-Band und die Zeitdauer, um den Beginn und das Ende eines Preistrends zu identifizieren und Trend-Tracking-Operationen durchzuführen. Die Strategie wird durch verschiedene Indikatoren bestätigt und kann Falschbrüche effektiv filtern.

Strategieprinzip

Die Strategie beinhaltet folgende Schlüsselschritte:

  1. Die Berechnung der schnellen Durchschnittslinie und der langsamen Durchschnittslinie. Die Durchschnittslinie wird mit VWAP und nicht mit dem Schlusskurs berechnet, um den tatsächlichen Handelspreis genauer zu reflektieren.

  2. Berechnen Sie den Mittelwert der Durchschnittslinie und zeichnen Sie auf dieser Grundlage einen Brin-Band. Der Brin-Band beurteilt, ob sich die Preisschwankungen erweitern, und weist darauf hin, dass ein Trend eingeleitet wird.

  3. Die Einführung des TSV-Indikators, um zu beurteilen, ob die Transaktionsmenge zunimmt, um zu bestätigen, dass ein Trend besteht.

  4. Wenn die schnelle Durchschnittslinie die langsame Durchschnittslinie überschreitet, der Preis höher ist als der von Brin und der TSV größer als 0, wird ein Kaufsignal erzeugt; umgekehrt wird ein Verkaufssignal erzeugt.

  5. Die Rücknahme der Mittellinie und die Abfahrt von Brin als Stop-Loss-Gleichgewichtssignale.

Strategische Vorteile

  • Mit mehreren Kennzahlen bestätigt, kann effektiv zu filtern, falsche Durchbrüche, zu erkennen, dass Trends beginnen

  • Durchschnittliche Linien-Rechnungsmethoden spiegeln den tatsächlichen Handelspreis genauer wider

  • Trends in Verbindung mit Volatilitätsindikatoren

  • Erhöhung des Handelsvolumens und Bestätigung der Entwicklung

  • Setzen Sie angemessene Stop-and-Stop-Standards, um Risiken zu kontrollieren

  • Die Parameter sind konfigurierbar und lassen sich flexibel an den optimalen Status anpassen

Strategisches Risiko

  • Mehrindikator-Kombinationsbeurteilung, Probleme mit der Optimierung von Parametern

  • Die Verzögerung bei der Durchmessung und der Brin-Band kann zu unzureichenden Schadensstopps führen.

  • Die Zeitspanne ist parametersensibel und muss für verschiedene Märkte angepasst werden.

  • In der Bilanz gibt es die Möglichkeit, dass mehr falsche Signale erzeugt werden.

  • Die tatsächlichen Gewinne und Verluste sind geringer als die Rückmessung ohne Berücksichtigung der Auswirkungen der Transaktionskosten.

Richtung der Strategieoptimierung

  • Versuchen Sie, die Parameterkombinationen automatisch mit einer Methode des maschinellen Lernens zu optimieren

  • Setzen Sie dynamische bewegliche Stopps oder Tracking-Stopps, um die Gewinne besser zu sperren

  • Die Einführung eines Energieindikators für die Transaktionsmenge, um Fehltransaktionen zu vermeiden, die durch die Abweichung der Mengen verursacht werden

  • In Kombination mit der Wellen-Theorie, um zu beurteilen, ob sich ein Trend in der frühen, mittleren oder späten Phase befindet, wird die Strategie-Parameter dynamisch angepasst

  • Berücksichtigung der Auswirkungen auf die tatsächlichen Transaktionskosten und Setzung einer minimalen Stop-Margin zur Kosteneffizienzkontrolle

Zusammenfassen

Die Strategie berücksichtigt verschiedene Indikatoren und bietet eine gute Trenderkenntnis, um den Start und das Ende eines echten Trends zu bestimmen. Die Stabilität der Strategie kann durch die Optimierung von Parametern, die Optimierung von Verlusten und die Optimierung von Filtern weiter verbessert werden.

Strategiequellcode
/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4

// Credits

// "Vwap with period" code which used in this strategy to calculate the leadLine was written by "neolao" active on https://tr.tradingview.com/u/neolao/
// "TSV" code which used in this strategy was written by "liw0" active on https://www.tradingview.com/u/liw0. The code is corrected by "vitelot" December 2018.

strategy("HYE Trend Hunter [Strategy]", overlay = true, initial_capital = 1000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, commission_value = 0.025, pyramiding = 0)
  
// Strategy inputs 

slowtenkansenPeriod = input(9, minval=1, title="Slow Tenkan Sen VWAP Line Length", group = "Tenkansen / Kijunsen")
slowkijunsenPeriod = input(26, minval=1, title="Slow Kijun Sen VWAP Line Length", group = "Tenkansen / Kijunsen")
fasttenkansenPeriod = input(5, minval=1, title="Fast Tenkan Sen VWAP Line Length", group = "Tenkansen / Kijunsen")
fastkijunsenPeriod = input(13, minval=1, title="Fast Kijun Sen VWAP Line Length", group = "Tenkansen / Kijunsen")
BBlength = input(20, minval=1, title= "Bollinger Band Length", group = "Bollinger Bands")
BBmult = input(2.0, minval=0.001, maxval=50, title="Bollinger Band StdDev", group = "Bollinger Bands")
tsvlength  = input(13, minval=1, title="TSV Length", group = "Tıme Segmented Volume")
tsvemaperiod = input(7, minval=1, title="TSV Ema Length", group = "Tıme Segmented Volume")

// Make input options that configure backtest date range  
 
startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31, group = "Backtest Range")
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12, group = "Backtest Range")
startYear = input(title="Start Year", type=input.integer,
     defval=2000, minval=1800, maxval=2100, group = "Backtest Range")

endDate = input(title="End Date", type=input.integer, 
     defval=31, minval=1, maxval=31, group = "Backtest Range")
endMonth = input(title="End Month", type=input.integer,
     defval=12, minval=1, maxval=12, group = "Backtest Range") 
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100, group = "Backtest Range")
     
inDateRange =  true

//Slow Tenkan Sen Calculation

typicalPriceTS = (high + low + close) / 3
typicalPriceVolumeTS = typicalPriceTS * volume
cumulativeTypicalPriceVolumeTS = sum(typicalPriceVolumeTS, slowtenkansenPeriod)
cumulativeVolumeTS = sum(volume, slowtenkansenPeriod)
slowtenkansenvwapValue = cumulativeTypicalPriceVolumeTS / cumulativeVolumeTS

//Slow Kijun Sen Calculation

typicalPriceKS = (high + low + close) / 3
typicalPriceVolumeKS = typicalPriceKS * volume
cumulativeTypicalPriceVolumeKS = sum(typicalPriceVolumeKS, slowkijunsenPeriod)
cumulativeVolumeKS = sum(volume, slowkijunsenPeriod)
slowkijunsenvwapValue = cumulativeTypicalPriceVolumeKS / cumulativeVolumeKS

//Fast Tenkan Sen Calculation

typicalPriceTF = (high + low + close) / 3
typicalPriceVolumeTF = typicalPriceTF * volume
cumulativeTypicalPriceVolumeTF = sum(typicalPriceVolumeTF, fasttenkansenPeriod)
cumulativeVolumeTF = sum(volume, fasttenkansenPeriod)
fasttenkansenvwapValue = cumulativeTypicalPriceVolumeTF / cumulativeVolumeTF

//Fast Kijun Sen Calculation

typicalPriceKF = (high + low + close) / 3
typicalPriceVolumeKF = typicalPriceKS * volume
cumulativeTypicalPriceVolumeKF = sum(typicalPriceVolumeKF, fastkijunsenPeriod)
cumulativeVolumeKF = sum(volume, fastkijunsenPeriod)
fastkijunsenvwapValue = cumulativeTypicalPriceVolumeKF / cumulativeVolumeKF

//Slow LeadLine Calculation
 
lowesttenkansen_s = lowest(slowtenkansenvwapValue, slowtenkansenPeriod)
highesttenkansen_s = highest(slowtenkansenvwapValue, slowtenkansenPeriod)

lowestkijunsen_s = lowest(slowkijunsenvwapValue, slowkijunsenPeriod)
highestkijunsen_s = highest(slowkijunsenvwapValue, slowkijunsenPeriod)

slowtenkansen = avg(lowesttenkansen_s, highesttenkansen_s)
slowkijunsen = avg(lowestkijunsen_s, highestkijunsen_s)
slowleadLine = avg(slowtenkansen, slowkijunsen)

//Fast LeadLine Calculation
 
lowesttenkansen_f = lowest(fasttenkansenvwapValue, fasttenkansenPeriod)
highesttenkansen_f = highest(fasttenkansenvwapValue, fasttenkansenPeriod)

lowestkijunsen_f = lowest(fastkijunsenvwapValue, fastkijunsenPeriod)
highestkijunsen_f = highest(fastkijunsenvwapValue, fastkijunsenPeriod)

fasttenkansen = avg(lowesttenkansen_f, highesttenkansen_f)
fastkijunsen = avg(lowestkijunsen_f, highestkijunsen_f)
fastleadLine = avg(fasttenkansen, fastkijunsen)

// BBleadLine Calculation

BBleadLine = avg(fastleadLine, slowleadLine)

// Bollinger Band Calculation
 
basis = sma(BBleadLine, BBlength)
dev = BBmult * stdev(BBleadLine, BBlength)
upper = basis + dev
lower = basis - dev

// TSV Calculation

tsv = sum(close>close[1]?volume*(close-close[1]):close<close[1]?volume*(close-close[1]):0,tsvlength)
tsvema = ema(tsv, tsvemaperiod)

// Rules for Entry & Exit  

if(fastleadLine > fastleadLine[1] and slowleadLine > slowleadLine[1] and tsv > 0 and tsv > tsvema and close > upper and inDateRange)
    strategy.entry("BUY", strategy.long)
 
if(fastleadLine < fastleadLine[1] and slowleadLine < slowleadLine[1])
    strategy.close("BUY")

// Plots 

colorsettingS = input(title="Solid Color Slow Leadline", defval=false, type=input.bool)
plot(slowleadLine, title = "Slow LeadLine", color = colorsettingS ? color.aqua : slowleadLine > slowleadLine[1] ? color.green : color.red, linewidth=3)

colorsettingF = input(title="Solid Color Fast Leadline", defval=false, type=input.bool)
plot(fastleadLine, title = "Fast LeadLine", color = colorsettingF ? color.orange : fastleadLine > fastleadLine[1] ? color.green : color.red, linewidth=3)

p1 = plot(upper, "Upper BB", color=#2962FF)
p2 = plot(lower, "Lower BB", color=#2962FF)
fill(p1, p2, title = "Background", color=color.blue)