Hein Ashu y la estrategia de la supertendencia


Fecha de creación: 2023-11-02 16:15:18 Última modificación: 2023-11-02 16:15:18
Copiar: 1 Número de Visitas: 1211
1
Seguir
1617
Seguidores

Hein Ashu y la estrategia de la supertendencia

Descripción general

Una estrategia de seguimiento de tendencias que combina un gráfico de tendencias y un indicador de tendencias es una estrategia de seguimiento de tendencias que combina un gráfico de tendencias y un indicador de tendencias. La estrategia tiene como objetivo identificar la dirección de la tendencia, operar en zonas de tendencia y salir rápidamente cuando la tendencia se invierte, lo que minimiza las pérdidas de las operaciones no tendencia.

Principio de estrategia

El gráfico de tendencias de Heinrich Himmler es un gráfico de línea K especial que utiliza el precio de apertura, el precio de cierre, el precio más alto y el precio más bajo para trazar la entidad de tendencias, lo que permite filtrar el ruido del mercado y hacer que el gráfico sea más claro. El indicador de tendencias súper se compone de dos curvas que determinan la dirección de la tendencia a través de líneas de soporte y resistencia dinámicas.

La estrategia primero calcula el gráfico de Hines y luego calcula el indicador de supertrend basado en la línea K de Hines. Cuando el precio rompe el indicador de supertrend, genera una señal de transacción. Concretamente, la estrategia utiliza la línea K de Hines para calcular la amplitud real de la onda, y luego combina la amplitud de la onda y el precio promedio para obtener la subida y bajada de la supertrend.

La estrategia también optimiza los parámetros de los indicadores de tendencias súper, utilizando la combinación de parámetros óptimos para aumentar la sensibilidad de los indicadores. Además, la estrategia incorpora un mecanismo de stop loss que permite controlar el riesgo al tiempo que garantiza las ganancias.

Análisis de las ventajas

  • El uso de mapas de Heinrich Himmler puede filtrar el ruido y hacer que la señal sea más clara.
  • El indicador de tendencias súper puede capturar rápidamente los cambios de tendencia y enviar señales de comercio a tiempo.
  • La optimización de parámetros mejora la fiabilidad de los indicadores.
  • El mecanismo de suspensión de pérdidas integrado permite controlar el riesgo de manera efectiva.
  • La combinación de seguimiento de tendencias y un sistema de comercio automático tiene un alto grado de automatización.

Análisis de riesgos

  • El sistema de transacciones es altamente automatizado y debe ser vigilado de cerca para evitar anomalías.
  • El mapa de Heine-Atheu puede filtrar el ruido, pero también puede perder una pequeña señal de retorno.
  • Los indicadores de tendencia súper pueden generar señales erróneas, lo que puede conducir a una entrada prematura o a una pérdida.
  • La configuración incorrecta de los puntos de parada también puede causar pérdidas innecesarias.
  • La falta de datos de la detección puede causar una sobreconformidad. El disco duro puede tener una gran desviación de los resultados de la detección.

Dirección de optimización

  • Prueba más combinaciones de parámetros para optimizar aún más el indicador de tendencias súper.
  • Prueba con otros indicadores para confirmar la señal del indicador de tendencia súper y reduce la tasa de señales erróneas.
  • Optimizar la estrategia de stop loss para reducir al máximo las pérdidas innecesarias, a la vez que se garantiza la obtención de beneficios.
  • Aumentar la capacidad de los algoritmos de aprendizaje automático para determinar las tendencias reales mediante el entrenamiento de datos masivos.
  • El uso de periodos de tiempo más largos y datos históricos de más mercados diferentes para hacer retrospectivas, aumenta la fiabilidad.

Resumir

Una estrategia de seguimiento de tendencias es una estrategia de seguimiento de tendencias que permite identificar la dirección de la tendencia, operar bajo una gran tendencia y detenerse rápidamente cuando se invierte. La estrategia integra el filtro de ruido de la gráfica de Hines y la capacidad de capturar rápidamente los cambios de tendencia de los indicadores de tendencias.

Código Fuente de la Estrategia
/*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)