Эта стратегия основана на оригинальной стратегии WaveTrend от LazyBear, с дополнительными функциями, такими как вторичная стоп-лосс, несколько уровней прибыли и высокий временной EMA-фильтр.
Основным показателем этой стратегии является WaveTrend, состоящий из трех компонентов:
AP: Средняя цена = (самый высокий + самый низкий + закрытие) / 3
ЕНС: EMA AP за n периодов
CI: (AP - ESA) / (0,015 * N1-period EMA абсолютного значения (AP - ESA))
TCI: n2-периодная EMA CI, также называемая WaveTrend Line 1 (WT1)
WT2: 4-периодическая SMA WT1
Долгая позиция открывается, когда WT1 пересекает WT2 (золотой крест), и закрывается, когда WT1 пересекает WT2 (смертный крест).
Кроме того, для предотвращения ложных сигналов внедрен фильтр EMA с высокими временными рамками, так что длинные сделки принимаются только тогда, когда цена выше EMA и короткие сделки ниже EMA.
Автоматически следите за тенденциями с помощью WaveTrend без ручного суждения
Вторичная остановка убытков эффективно ограничивает убытки от одной сделки
Многочисленные уровни получения прибыли максимизируют получение прибыли
Фильтр EMA улучшает уровень победы, избегая ложных сигналов.
Не обнаруживает обратный тренд, может вызвать убытки
Плохая настройка параметров приводит к чрезмерной торговле
Различные наборы параметров могут быть проверены для оптимизации
Рассмотреть дополнительные показатели для обнаружения обратного движения
Эта стратегия всесторонне включает в себя наблюдение за трендом, контроль рисков и максимизацию прибыли с помощью автоматического обнаружения тренда WaveTrend, фильтра EMA для повышения эффективности и управления стоп-лосом / получением прибыли для сбалансирования торговли трендом и контроля рисков. Это эффективная и стабильная система наблюдения за трендом. Дальнейшая оптимизация параметров и механизмы обратного отклонения могут повысить применимость стратегии.
/*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)