Hein Ashu und die Super-Trend-Strategie


Erstellungsdatum: 2023-11-02 16:15:18 zuletzt geändert: 2023-11-02 16:15:18
Kopie: 1 Klicks: 1211
1
konzentrieren Sie sich auf
1617
Anhänger

Hein Ashu und die Super-Trend-Strategie

Überblick

Eine Trend-Tracking-Strategie, die eine Kombination aus einer Trend-Tracking-Strategie und einem Supertrend-Indikator darstellt. Die Strategie dient der Identifizierung der Trendrichtung, dem Handel in Trendzonen und dem schnellen Ausstieg bei einer Trendwende, um die Verluste von Nicht-Trend-Handel zu minimieren.

Strategieprinzip

Ein Haines-Studio-Chart ist ein spezieller K-Linien-Chart, der durchschnittliche Werte von Öffnungs- und Schlusspreisen, Höchst- und Tiefstpreisen verwendet, um die Platin-Einheiten zu zeichnen, wodurch Marktlärm gefiltert und die Grafik klarer gemacht wird. Der Supertrend-Indikator besteht aus zwei Kurven, die die Richtung des Trends durch dynamische Unterstützungs- und Widerstandslinien bestimmen.

Die Strategie berechnet zuerst die Heinrich-Aussie-Karte und berechnet dann die Supertrend-Anzeige basierend auf der Heinrich-Aussie-K-Linie. Wenn der Preis die Supertrend-Anzeige durchbricht, wird ein Handelssignal erzeugt. Insbesondere berechnet die Strategie die tatsächliche Wellenlänge mit der Heinrich-Aussie-K-Linie und kombiniert die Wellenlänge mit dem Durchschnittspreis, um die Auf- und Abwärtsspur der Supertrend zu erhalten.

Die Strategie optimiert auch die Parameter für die Supertrend-Indikatoren, um die optimale Kombination von Parametern zu verwenden, wodurch die Sensitivität der Indikatoren erhöht wird. Darüber hinaus enthält die Strategie einen Stop-Loss-Mechanismus, der das Risiko kontrolliert und gleichzeitig die Gewinne garantiert.

Analyse der Stärken

  • Die Verwendung von Heinrichs Diagramm filtert die Geräusche und macht die Signale deutlicher.
  • Der Supertrend-Indikator kann schnell Trendänderungen erfassen und rechtzeitig Handelssignale senden.
  • Die Parameteroptimierung erhöht die Zuverlässigkeit der Indikatoren.
  • Ein integriertes Stop-Loss-System, das die Risiken wirksam kontrolliert.
  • In Kombination mit Trend-Tracking und mechanischen Handelssystemen ist die Automatisierung hoch.

Risikoanalyse

  • Die Handelssysteme sind stark automatisiert und müssen sorgfältig überwacht werden, um Ausnahmen zu vermeiden.
  • Die Heine-Auch-Karte filtert zwar Geräusche, lässt aber auch winzige Rückwärtssignale aus.
  • Der Supertrend-Indikator kann falsche Signale erzeugen, die zu einem vorzeitigen Einstieg oder zum Stillstand führen.
  • Die falsche Einstellung des Stop-Loss-Punktes kann auch zu unnötigen Verlusten führen.
  • Unzureichende Rückdaten können zu Überübereinstimmungen führen. Die Festplatte kann mit den Rückdaten stark abweichen.

Optimierungsrichtung

  • Testung weiterer Kombinationen von Parametern zur weiteren Optimierung der Supertrend-Indikatoren.
  • Versuchen Sie mit anderen Indikatoren, die Supertrend-Indikatorsignale zu bestätigen, um die Fehlsignalrate zu reduzieren.
  • Optimierung der Stop-Loss-Strategie, um unnötige Verluste so gering wie möglich zu halten, während die Gewinnspanne gewährleistet ist.
  • Erhöhung der Fähigkeit von Machine-Learning-Algorithmen, um echte Trends durch Big-Data-Training zu erkennen.
  • Die Verlässlichkeit wird erhöht, indem historische Daten über längere Zeiträume und mehr verschiedene Märkte verwendet werden.

Zusammenfassen

Die Strategie integriert die Geräuschfilterung der Hintergrunddiagramme und die Fähigkeit, Trendänderungen bei Supertrend-Indikatoren schnell zu erfassen. Durch die Optimierung der Parameter und die Gestaltung der Stop-Loss-Mechanismen ist es möglich, das Risiko zu kontrollieren, während die Gewinne erhöht werden. In Zukunft kann die Strategie durch weitere Optimierung der Parameter, Erhöhung der Bestätigungsindikatoren, Erweiterung der Rückmessdaten usw. optimiert werden, um die Stabilität und Zuverlässigkeit des Systems zu verbessern.

Strategiequellcode
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy("Heiken Ashi & Super Trend_ARM", overlay=true,  pyramiding=1,initial_capital = 10000, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.02)

///////////////////////////////////////////////////
////////////////////Function///////////////////////
///////////////////////////////////////////////////


heikinashi_open = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, open)
heikinashi_high = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, high)
heikinashi_low  = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, low)
heikinashi_close= request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)
heikinashi_color = heikinashi_open < heikinashi_close ? #53b987 : #eb4d5c
// plotbar(heikinashi_open, heikinashi_high, heikinashi_low, heikinashi_close, color=heikinashi_color)

x_sma(x, y) =>
    sumx = 0.0
    for i = 0 to y - 1
        sumx := sumx + x[i] / y
    sumx

x_rma(src, length) =>
	alpha = 1/length
	sum = 0.0
	sum := na(sum[1]) ? x_sma(src, length) : alpha * src + (1 - alpha) * nz(sum[1])

x_atr(length) =>
    trueRange = na(heikinashi_high[1])? heikinashi_high-heikinashi_low : math.max(math.max(heikinashi_high - heikinashi_low, math.abs(heikinashi_high - heikinashi_close[1])), math.abs(heikinashi_low - heikinashi_close[1]))
    //true range can be also calculated with ta.tr(true)
    x_rma(trueRange, length)

x_supertrend(factor, atrPeriod) =>
	src = (heikinashi_high+heikinashi_low)/2
	atr = x_atr(atrPeriod)
	upperBand = src + factor * atr
	lowerBand = src - factor * atr
	prevLowerBand = nz(lowerBand[1])
	prevUpperBand = nz(upperBand[1])

	lowerBand := lowerBand > prevLowerBand or heikinashi_close[1] < prevLowerBand ? lowerBand : prevLowerBand
	upperBand := upperBand < prevUpperBand or heikinashi_close[1] > prevUpperBand ? upperBand : prevUpperBand
	int direction = na
	float superTrend = na
	prevSuperTrend = superTrend[1]
	if na(atr[1])
		direction := 1
	else if prevSuperTrend == prevUpperBand
		direction := heikinashi_close > upperBand ? -1 : 1
	else
		direction := heikinashi_close < lowerBand ? 1 : -1
	superTrend := direction == -1 ? lowerBand : upperBand
	[superTrend, direction]
	

///////////////////////////////////////////////////
////////////////////Indicators/////////////////////
///////////////////////////////////////////////////

factor = input.float(3.0, "Factor", step = 0.01)
atrPeriod = input(10, "ATR Length")


[supertrend, direction] = x_supertrend(factor, atrPeriod)

bodyMiddle = plot((heikinashi_open + heikinashi_close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)

fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)

///////////////////////////////////////////////////
////////////////////Strategy///////////////////////
///////////////////////////////////////////////////

var bool longCond                    = na, var bool shortCond                   = na, longCond := nz(longCond[1]), shortCond := nz(shortCond[1])
var int CondIni_long                 = 0, var int CondIni_short                 = 0, CondIni_long := nz(CondIni_long[1]), CondIni_short := nz(CondIni_short[1])
var float open_longCondition         = na, var float open_shortCondition   = na


long  = ta.change(direction) < 0
short = ta.change(direction) > 0


longCond        :=                                                              long
shortCond       :=                                                              short

CondIni_long    :=                                                              longCond[1] ? 1 : shortCond[1] ? -1 : nz(CondIni_long[1])
CondIni_short   :=                                                              longCond[1] ? 1 : shortCond[1] ? -1 : nz(CondIni_short[1])
longCondition   =                                                               (longCond[1] and nz(CondIni_long[1]) == -1)
shortCondition  =                                                               (shortCond[1] and nz(CondIni_short[1]) == 1)


open_longCondition             :=                                          long ? close[1] :                                                      nz(open_longCondition[1])
open_shortCondition            :=                                          short ? close[1] :                                                     nz(open_shortCondition[1])


//TP
tp                    = input.float(1.1  , "TP [%]",                      step = 0.1) 

//BACKTESTING inputs --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

testStartYear       =                   input.int(2000,                             title="start year",                                         minval = 1997, maxval = 3000,                                                   group= "BACKTEST") 
testStartMonth      =                   input.int(01,                               title="start month",                                        minval = 1, maxval = 12,                                                        group= "BACKTEST")
testStartDay        =                   input.int(01,                               title="start day",                                          minval = 1, maxval = 31,                                                        group= "BACKTEST")
testPeriodStart     =                   timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear        =                   input.int(3333,                             title="stop year",                                          minval=1980, maxval = 3333,                                                     group= "BACKTEST")
testStopMonth       =                   input.int(12,                               title="stop month",                                         minval=1, maxval=12,                                                            group= "BACKTEST")
testStopDay         =                   input.int(31,                               title="stop day",                                           minval=1, maxval=31,                                                            group= "BACKTEST")
testPeriodStop      =                   timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)
testPeriod          =                   time >= testPeriodStart and time <= testPeriodStop ? true : false

// Backtest  ==================================================================================================================================================================================================================================================================================================================================


if longCond
    strategy.entry("L", strategy.long, when=testPeriod)

if shortCond
    strategy.entry("S", strategy.short, when=testPeriod)
    

strategy.exit("TP_L", "L", profit =((open_longCondition   *       (1+(tp/100))) - open_longCondition)/syminfo.mintick)

strategy.exit("TP_S", "S", profit =((open_shortCondition  *       (1+(tp/100))) - open_shortCondition)/syminfo.mintick)