Melhorando as estratégias de acompanhamento de ondas


Data de criação: 2024-01-31 15:35:41 última modificação: 2024-01-31 15:35:41
cópia: 1 Cliques: 737
1
focar em
1664
Seguidores

Melhorando as estratégias de acompanhamento de ondas

Descrição: Esta é uma estratégia de acompanhamento de tendências aplicada ao indicador de ondas. Obtém-se uma linha de ondas calculando uma média móvel indexada de preços médios e uma média móvel de diferença de preços absolutos. A estratégia gera um sinal de negociação monitorando o cruzamento da linha de ondas com a região de sobrevenda e sobrevenda.

Princípios da estratégia:

  1. Calcule o preço médio ap = (o preço mais alto + o preço mais baixo + o preço de fechamento) / 3

  2. Calcule o EMA de ap para n1 ciclos e obtenha a esa

  3. Calcule o EMA de n1 ciclos do diferencial absoluto de ap e de esa, obtendo d

  4. Calcule a linha de onda: ci = {ap-esa} / {0.015}*d)

  5. Calcule o EMA de n2 ciclos ci, obtendo a linha de onda final tci, ouwt1

  6. Calcule o SMA de 4 ciclos de wT1 e obtenha wT2

  7. A linha horizontal para os níveis de sobrecompra e sobrevenda obLevel 12 e osLevel 12

  8. Um sinal de compra é gerado quando o WT1 atravessa a linha obLevel 2; um sinal de venda é gerado quando o WT1 atravessa a linha osLevel 2

  9. Adição de uma linha média emaFilter e volumeFilter como condição de filtragem para evitar sinais errados

  10. Definição de Stop Loss Ratio após a entrada e saída da posição

Análise de vantagens:

  1. A linha de onda lida melhor com a conversão multi-espaço para capturar as tendências

  2. Combinação de filtragem dupla de linha média e volume de transação, com maior confiabilidade

  3. Utilização de múltiplos conjuntos de parâmetros, evitando a limitação de um único indicador

  4. Estabelecer um stop loss para bloquear parte do lucro e controlar o risco

Riscos e falhas:

  1. A escolha de parâmetros pode, em alguns casos, causar mau desempenho ou excesso de ajuste

  2. Não há orientações claras sobre a escolha dos parâmetros ótimos, necessitando de tentativa e erro

  3. Não foi incluída no sinal a condição mais ampla do mercado.

  4. Risco de efeito de fogos de artifício se usado em mercados de alcance limitado ou flutuantes

  5. Falta de regras de saída para além do ganho/perda

Otimização:

  1. Testar um conjunto de parâmetros em vários prazos e ativos para encontrar o melhor valor

  2. Combinação de indicadores de volatilidade para evitar sinais em períodos de baixa volatilidade

  3. Adição de indicadores complementares como o RSI para melhorar a precisão do sinal

  4. Construir um modelo de aprendizagem de máquina para encontrar os parâmetros ótimos para um determinado ativo

  5. Reforço de saída por adição de tracking stop loss ou de saída baseado em eventos de expansão de volatilidade súbita

Resumo:

Esta é uma estratégia que combina a linha de onda e o design de indicadores auxiliares. Utiliza a linha de onda para identificar efetivamente a transformação da tendência, auxiliada pela filtragem da linha média e do volume de transação para evitar sinais errados, e é capaz de obter a maior parte da tendência da linha média e longa. Ao mesmo tempo, usa-se o stop loss para controlar o risco. Há muito espaço para otimização, e pode melhorar a estratégia em mais variedades e períodos de tempo, ajustando a combinação de parâmetros, combinando mais indicadores, e aprendizado de máquina.

Código-fonte da estratégia
/*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)