Melhoria da estratégia de acompanhamento da tendência das ondas

Autora:ChaoZhang, Data: 2024-01-31 15:35:41
Tags:

img

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:

  1. Calcular o preço médio ap = (alto + baixo + fechado) / 3

  2. Calcular a EMA de n-período de ap para obter esa

  3. Calcular a EMA do período n1 da diferença absoluta entre ap e esa para obter d

  4. Calcule a linha de tendência da onda: ci = (ap - esa) /(0.015*d)

  5. Calcular a EMA de ci de n2 períodos para obter a linha de tendência da onda final tci, ou seja, wt1

  6. Calcular a SMA de 4 períodos de wt1 para obter wt2

  7. Líneas de nível obLevel1/2 e osLevel1/2

  8. Gerar sinal de compra quando o wt1 cruza o obLevel2; gerar sinal de venda quando o wt1 cruza abaixo do osLevel2

  9. Adicionar emaFilter média móvel e volume do filtro volumeFilter como filtros para evitar sinais falsos

  10. Set take profit/stop loss após entrada em posições de saída

Vantagens:

  1. A linha de tendência de onda lida bem com as transições de tendência/contra-tendência

  2. Confiabilidade melhorada através de filtros duplos de média móvel e volume

  3. Múltiples parâmetros evitam limitações de um único indicador

  4. Previsão de prejuízo/perda de prejuízo

Riscos e limitações:

  1. A escolha dos parâmetros pode conduzir a um mau desempenho ou a um sobreajuste

  2. Não existem orientações definitivas sobre os parâmetros ideais

  3. Ignora as condições mais gerais do mercado

  4. Risco de serragem em mercados de gama/de variação

  5. Falta de regras de saída para além do "take profit/stop loss"

Oportunidades de melhoria:

  1. Parâmetros de ensaio em diferentes prazos/ativos para encontrar valores ideais

  2. Incorporar métricas de volatilidade para evitar regimes de baixa volatilidade

  3. Adicionar indicadores como RSI para melhorar a precisão do sinal

  4. Construir um modelo de aprendizagem de máquina para encontrar parâmetros personalizados ideais

  5. 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)




Mais.