Esta estratégia integra múltiplos indicadores, incluindo o preço médio ponderado por volume, as bandas de Bollinger e o volume segmentado por tempo para identificar o início e o fim das tendências de preços e seguir as tendências.
A estratégia inclui as seguintes etapas-chave:
Calcular linhas de preços médias ponderadas por volume rápidas e lentas.
Pegue a média das linhas VWAP para traçar Bandas de Bollinger.
Introduzir o volume segmentado por tempo (TSV) para confirmar o aumento do volume de negociação e validar a tendência.
Gerar sinal de compra quando o VWAP rápido cruza acima do VWAP lento, o preço rompe acima da faixa superior de Bollinger e o TSV é positivo.
Utilize o pullback VWAP e a banda inferior de Bollinger como sinais de stop loss.
Confirmações múltiplas filtram efetivamente falhas e identificam o início da tendência
O cálculo do VWAP reflete melhor o preço de negociação real
Indicador de volatilidade
O volume de negociações confirma a continuação da tendência
Risco razoável de stop loss e controlo do lucro
Parâmetros configuráveis permitem otimização flexível
Dificuldade de otimização de múltiplos indicadores
A natureza atrasada do VWAP e das bandas de Bollinger atrasam a suspensão das perdas
TSV sensível ao ajuste de parâmetros para diferentes mercados
Mais sinais falsos nos mercados de gama
Ignora os custos de negociação, lucro e lucro reais mais fracos do que o backtest
Aplicar aprendizado de máquina para otimizar automaticamente combinações de parâmetros
Configurar stop loss dinâmico ou de trail para melhor bloquear os lucros
Adicionar indicadores de impulso de volume para evitar divergências
Incorporar ondas de Elliott para determinar estágios de tendência, ajustar parâmetros em conformidade
Considerar os custos de negociação, definir um objetivo de lucro mínimo para controlar a eficiência dos custos
Esta estratégia fornece uma boa identificação de tendências, integrando múltiplos indicadores. Pode determinar efetivamente o início e o fim das tendências reais. Melhorias adicionais na estabilidade podem ser alcançadas através da otimização de parâmetros, otimização de stop loss e otimização de filtros.
/*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)