O oscilador de tendência de onda é uma estratégia de seguimento de tendência que utiliza o oscilador de tendência de onda para identificar tendências. Ele calcula médias móveis exponenciais do preço médio e diferença de preço absoluta para traçar uma linha de tendência de onda.
Estratégia lógica:
Calcular o preço médio ap = (alto + baixo + fechado) / 3
Calcular a EMA de n-período de ap para obter esa
Calcular a EMA do período n1 da diferença absoluta entre ap e esa para obter d
Calcule a linha de tendência da onda: ci = (ap - esa) /(0.015*d)
Calcular a EMA de ci de n2 períodos para obter a linha de tendência da onda final tci, ou seja, wt1
Calcular a SMA de 4 períodos de wt1 para obter wt2
Líneas de nível obLevel1/2 e osLevel1/2
Gerar sinal de compra quando o wt1 cruza o obLevel2; gerar sinal de venda quando o wt1 cruza abaixo do osLevel2
Adicionar emaFilter média móvel e volume do filtro volumeFilter como filtros para evitar sinais falsos
Set take profit/stop loss após entrada em posições de saída
Vantagens:
A linha de tendência de onda lida bem com as transições de tendência/contra-tendência
Confiabilidade melhorada através de filtros duplos de média móvel e volume
Múltiples parâmetros evitam limitações de um único indicador
Previsão de prejuízo/perda de prejuízo
Riscos e limitações:
A escolha dos parâmetros pode conduzir a um mau desempenho ou a um sobreajuste
Não existem orientações definitivas sobre os parâmetros ideais
Ignora as condições mais gerais do mercado
Risco de serragem em mercados de gama/de variação
Falta de regras de saída para além do "take profit/stop loss"
Oportunidades de melhoria:
Parâmetros de ensaio em diferentes prazos/ativos para encontrar valores ideais
Incorporar métricas de volatilidade para evitar regimes de baixa volatilidade
Adicionar indicadores como RSI para melhorar a precisão do sinal
Construir um modelo de aprendizagem de máquina para encontrar parâmetros personalizados ideais
Aumentar as saídas com paradas de atraso ou saídas baseadas em eventos de volatilidade
Conclusão:
Este é um indicador de tendência de onda com filtros adicionais. Ele capitaliza a capacidade da linha de tendência de onda para identificar transições de tendência, usa filtros de média móvel e volume para evitar falsos sinais e visa capturar a maioria das tendências de médio/longo prazo.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bush Strategy test", shorttitle="Nique Audi", overlay=false) // Paramètres n1 = input(10, title="Channel Length") n2 = input(21, title="Average Length") obLevel1 = input(60, title="Over Bought Level 1") obLevel2 = input(53, title="Over Bought Level 2") osLevel1 = input(-65, title="Over Sold Level 1") osLevel2 = input(-60, title="Over Sold Level 2") takeProfitPercentage = input(1, title="Take Profit (%)") stopLossPercentage = input(0.50, title="Stop Loss (%)") // Calculs ap = hlc3 esa = ta.ema(ap, n1) d = ta.ema(math.abs(ap - esa), n1) ci = (ap - esa) / (0.015 * d) tci = ta.ema(ci, n2) wt1 = tci wt2 = ta.sma(wt1, 4) // Tracé des lignes plot(0, color=color.gray) plot(obLevel1, color=color.red) plot(osLevel1, color=color.green) plot(obLevel2, color=color.red, style=plot.style_line) plot(osLevel2, color=color.green, style=plot.style_line) plot(wt1, color=color.green) plot(wt2, color=color.red, style=plot.style_line) // Tracé de la différence entre wt1 et wt2 en bleu hline(0, "Zero Line", color=color.gray) // Conditions d'entrée long et court longCondition = ta.crossover(wt1, obLevel2) shortCondition = ta.crossunder(wt1, osLevel2) // Tracé des signaux d'achat et de vente plotshape(series=longCondition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Buy Signal") plotshape(series=shortCondition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, title="Sell Signal") // Conditions d'entrée et de sortie strategy.entry("Long", strategy.long, when=longCondition) strategy.entry("Short", strategy.short, when=shortCondition) // Niveaux de prise de profit pour les positions longues et courtes longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentage / 100) shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentage / 100) // Vérification si les niveaux de prise de profit sont atteints longTakeProfitReached = strategy.position_size > 0 and high >= longTakeProfitLevel shortTakeProfitReached = strategy.position_size < 0 and low <= shortTakeProfitLevel // Tracé des formes de prise de profit plotshape(series=longTakeProfitReached, style=shape.xcross, location=location.belowbar, color=color.blue, size=size.small, title="Take Profit Long") plotshape(series=shortTakeProfitReached, style=shape.xcross, location=location.abovebar, color=color.blue, size=size.small, title="Take Profit Short") // Niveaux de stop loss pour les positions longues et courtes longStopLossLevel = strategy.position_avg_price * (1 - stopLossPercentage / 100) shortStopLossLevel = strategy.position_avg_price * (1 + stopLossPercentage / 100) // Vérification si les niveaux de stop loss sont atteints longStopLossReached = strategy.position_size > 0 and low <= longStopLossLevel shortStopLossReached = strategy.position_size < 0 and high >= shortStopLossLevel // Tracé des formes de stop loss plotshape(series=longStopLossReached, style=shape.xcross, location=location.belowbar, color=color.red, size=size.small, title="Stop Loss Long") plotshape(series=shortStopLossReached, style=shape.xcross, location=location.abovebar, color=color.red, size=size.small, title="Stop Loss Short") // Fermeture des positions en cas de prise de profit ou de stop loss strategy.close("Long", when=longTakeProfitReached or longStopLossReached) strategy.close("Short", when=shortTakeProfitReached or shortStopLossReached)