Esta estrategia integra múltiples indicadores, incluido el precio promedio ponderado por volumen, las bandas de Bollinger y el volumen segmentado en el tiempo para identificar el comienzo y el final de las tendencias de precios y seguir las tendencias.
La estrategia incluye los siguientes pasos clave:
Calcular líneas de precios promedio ponderadas por volumen rápidas y lentas.
Tomemos el promedio de las líneas VWAP para trazar bandas de Bollinger.
Introducir el volumen segmentado en el tiempo (TSV) para confirmar el aumento del volumen de operaciones y validar la tendencia.
Generar una señal de compra cuando el VWAP rápido cruza por encima del VWAP lento, el precio se rompe por encima de la banda superior de Bollinger y el TSV es positivo.
Utilice el retroceso VWAP y la banda inferior de Bollinger como señales de stop loss.
Las confirmaciones múltiples filtran eficazmente las fallas y identifican el inicio de la tendencia
El cálculo del VWAP refleja mejor el precio de negociación real
El indicador de volatilidad evalúa si existe una tendencia
El volumen de operaciones confirma la continuación de la tendencia
El riesgo razonable de pérdidas de detención y de control de beneficios
Los parámetros configurables permiten una optimización flexible
Dificultad para optimizar varios indicadores
Las pérdidas de VWAP y las bandas de Bollinger son retrasadas debido a la naturaleza de los retrasos
TSV sensible al ajuste de parámetros para diferentes mercados
Más señales falsas en los mercados de rango
Ignora los costos de negociación, las ganancias y pérdidas reales son más bajas que las pruebas de retroceso
Aplicar el aprendizaje automático para optimizar automáticamente las combinaciones de parámetros
Establecer un stop loss dinámico o de seguimiento para obtener mejores beneficios
Añadir indicadores de impulso de volumen para evitar divergencias
Incorporar ondas de Elliott para determinar las etapas de tendencia, ajustar los parámetros en consecuencia
Considere los costos de negociación, establezca un objetivo de ganancia mínima para controlar la eficiencia de los costos
Esta estrategia proporciona una buena identificación de tendencias mediante la integración de múltiples indicadores. Puede determinar de manera efectiva el comienzo y el final de las tendencias reales. Se pueden lograr mejoras adicionales en la estabilidad a través de la optimización de parámetros, optimización de pérdidas de parada y optimización de filtros. Pero en general, como una estrategia de seguimiento de tendencias, todavía conlleva ciertos niveles de reducción y relaciones riesgo-recompensa. Los operadores necesitan paciencia para esperar oportunidades y una estricta mentalidad de gestión de riesgos.
/*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)