Esta estratégia é baseada na estratégia original WaveTrend da LazyBear, com recursos adicionais como stop loss secundário, níveis de lucro múltiplos e filtro EMA de alto prazo.
O principal indicador desta estratégia é a Tendência de onda, que consiste em três componentes:
AP: Preço Médio = (Melhor + Menor + Fechar) / 3
SEC: EMA de n-período do AP
CI: (AP - SEC) / (0,015 * n-periodo EMA do valor absoluto de (AP - SEC))
TCI: EMA de n2 períodos de CI, também denominada WaveTrend Line 1 (WT1)
WT2: SMA de 4 períodos do WT1
Uma posição longa é aberta quando WT1 cruza acima de WT2 (cruz de ouro) e é fechada quando WT1 cruza abaixo de WT2 (cruz de morte).
Além disso, é implementado um filtro de EMA de alto prazo para evitar sinais falsos, de modo que as negociações longas só são realizadas quando o preço está acima da EMA e as negociações curtas abaixo da EMA.
Seguir automaticamente as tendências usando a WaveTrend sem julgamento manual
O stop loss secundário limita efetivamente as perdas de transações individuais
Níveis de lucro múltiplos maximizam a captura de lucro
O filtro EMA melhora a taxa de vitória evitando falsos sinais
Não detecta a inversão da tendência, pode causar perdas
Mal ajuste dos parâmetros leva a excesso de negociação
Diferentes conjuntos de parâmetros podem ser testados para otimização
Considerar indicadores adicionais para a detecção de reversão
Esta estratégia incorpora de forma abrangente o seguimento de tendências, o controle de riscos e a maximização de lucros através da detecção automática de tendências da WaveTrend, o filtro EMA para melhorar a eficiência e a gestão de stop loss/take profit para equilibrar a negociação de tendências e o controle de riscos.
/*backtest start: 2023-10-31 00:00:00 end: 2023-11-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © undacovacobra //@version=4 strategy("WaveTrend Strategy [LazyBear] with Secondary Stop Loss", overlay=true) // Input parameters n1 = input(10, "Channel Length") n2 = input(21, "Average Length") obLevel1 = input(60, "Over Bought Level 1") obLevel2 = input(53, "Over Bought Level 2") osLevel1 = input(-60, "Over Sold Level 1") osLevel2 = input(-53, "Over Sold Level 2") useEmaFilter = input(false, "Use EMA Filter") emaLength = input(50, "EMA Length") emaTimeFrame = input("60", "EMA Time Frame") tradeMode = input("Both", "Trade Mode", options=["Long Only", "Short Only", "Both"]) useSecondarySL = input(false, "Use Secondary Stop Loss") slPercentage = input(5.0, "Stop Loss Percentage (%)") // WaveTrend Indicator Calculations ap = hlc3 esa = ema(ap, n1) d = ema(abs(ap - esa), n1) ci = (ap - esa) / (0.015 * d) tci = ema(ci, n2) wt1 = tci wt2 = sma(wt1, 4) // EMA Calculation with Selected Time Frame getEma(timeFrame) => security(syminfo.tickerid, timeFrame, ema(close, emaLength)) emaFilter = getEma(emaTimeFrame) // Secondary Stop Loss Calculation longStopPrice = strategy.position_avg_price * (1 - slPercentage / 100) shortStopPrice = strategy.position_avg_price * (1 + slPercentage / 100) // Long Entry and Exit Conditions with EMA Filter and Trade Mode longEntry = crossover(wt1, wt2) and wt2 < osLevel1 and (not useEmaFilter or close > emaFilter) and (tradeMode == "Long Only" or tradeMode == "Both") if (longEntry) strategy.entry("Long", strategy.long) longExit = crossunder(wt1, wt2) and wt2 > obLevel1 if (longExit) strategy.close("Long") if (useSecondarySL and strategy.position_size > 0 and low < longStopPrice) strategy.close("Long", comment="SL Hit") // Short Entry and Exit Conditions with EMA Filter and Trade Mode shortEntry = crossunder(wt1, wt2) and wt2 > obLevel1 and (not useEmaFilter or close < emaFilter) and (tradeMode == "Short Only" or tradeMode == "Both") if (shortEntry) strategy.entry("Short", strategy.short) shortExit = crossover(wt1, wt2) and wt2 < osLevel1 if (shortExit) strategy.close("Short") if (useSecondarySL and strategy.position_size < 0 and high > shortStopPrice) strategy.close("Short", comment="SL Hit") // Plotting plot(0, color=color.gray) plot(obLevel1, color=color.red) plot(osLevel1, color=color.green) plot(obLevel2, color=color.red, style=plot.style_cross) plot(osLevel2, color=color.green, style=plot.style_cross) plot(wt1, color=color.green) plot(wt2, color=color.red, style=plot.style_cross) plot(wt1-wt2, color=color.blue, style=plot.style_area, transp=80) plot(emaFilter, color=color.blue)