Стратегия Super Trend Dual Moving Average - это количественная торговая стратегия, основанная на индикаторе Super Trend и простой скользящей средней.
Стратегия использует два показателя:
Индикатор супер-тенденции: рассчитывает верхние и нижние рельсы на основе истинной волатильности ATR и мультипликатора. Когда цена закрытия выше верхней рельсы, это указывает на бычий взгляд. Когда ниже нижней рельсы, это указывает на медвежий взгляд.
200-дневная простая скользящая средняя: это арифметическая средняя цены закрытия за последние 200 дней. Когда цена закрытия выше этой линии, это представляет собой основную бычью тенденцию. Когда ниже этой линии, это представляет собой основную медвежий тренд.
Логика стратегии:
Когда индикатор Super Trend дает бычий сигнал (значение Super Trend больше 0) и цена закрытия выше 200-дневного MA, делайте длинный выбор.
Если индикатор Super Trend дает медвежий сигнал (значение Super Trend меньше 0) и цена закрытия ниже 200-дневного MA, перейти на короткий курс.
Закрыть позицию, когда индикатор Super Trend дает обратный сигнал по отношению к предыдущему.
Стоп-лосс установлен на уровне 25%.
Стратегия сочетает в себе индикатор Super Trend для определения краткосрочного тренда и 200-дневный MA для определения долгосрочного тренда, который может эффективно фильтровать ложные прорывы, уменьшать частоту торговли при одновременном улучшении показателя выигрыша.
Основной риск этой стратегии заключается в том, что диапазон стоп-лосса относительно большой. Это может увеличить риск принудительной ликвидации в ситуациях с высоким плечовым плечом. Кроме того, когда рынок ограничен диапазоном, индикатор Super Trend будет генерировать избыточные сигналы, тем самым увеличивая затраты на транзакции и частоту торговли.
Риск может быть снижен путем надлежащей корректировки периода ATR, параметров мультипликатора и диапазона стоп-лосса.
Стратегия может быть оптимизирована в следующих аспектах:
Регулировать период ATR и параметры мультипликатора для оптимизации индикатора Super Trend.
Попробуйте заменить другие индикаторы MA, такие как EMA и VIDYA.
Добавить другие вспомогательные индикаторы, такие как канал BOLL или индикатор KD для дальнейшей фильтрации сигнала.
Оптимизируйте стратегию остановки потери, например, переместите ее на точку безубыточности или остановку с более высокими временными рамками.
В целом, эта стратегия очень практична. Она учитывает как краткосрочное суждение о тренде, так и долгосрочное суждение о тренде с разумными настройками стоп-лосса. Она может достичь лучших результатов за счет корректировки и оптимизации параметров, что стоит реальной проверки и применения торговли.
/*backtest start: 2023-12-16 00:00:00 end: 2024-01-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/ // © wielkieef //@version=5 strategy("Smart SuperTrend Strategy ", shorttitle="ST Strategy", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=25, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.01) // Parametry wskaźnika SuperTrend atrLength = input(10, title="Lenght ATR") factor = input(3.0, title="Mult.") // Parametry dla SMA lengthSMA = input(200, title="Lenght SMA") // Parametry dla Stop Loss sl = input.float(25.0, '% Stop Loss', step=0.1) // Obliczanie ATR atr = ta.atr(atrLength) // Obliczanie podstawowej wartości SuperTrend up = hl2 - (factor * atr) dn = hl2 + (factor * atr) // Obliczanie 200-SMA sma200 = ta.sma(close, lengthSMA) // Inicjalizacja zmiennych var float upLevel = na var float dnLevel = na var int trend = na var int trendWithFilter = na // Logika SuperTrend upLevel := close[1] > upLevel[1] ? math.max(up, upLevel[1]) : up dnLevel := close[1] < dnLevel[1] ? math.min(dn, dnLevel[1]) : dn trend := close > dnLevel[1] ? 1 : close < upLevel[1] ? -1 : nz(trend[1], 1) // Filtr SMA i aktualizacja trendWithFilter trendWithFilter := close > sma200 ? math.max(trend, 0) : math.min(trend, 0) // Logika wejścia longCondition = trend == 1 shortCondition = trend == -1 // Wejście w pozycje if (longCondition) and close > sma200 strategy.entry("Long", strategy.long) if (shortCondition) and close < sma200 strategy.entry("Short", strategy.short) // Warunki zamknięcia pozycji Long_close = trend == -1 and close > sma200 Short_close = trend == 1 and close < sma200 // Zamknięcie pozycji if (Long_close) strategy.close("Long") if (Short_close) strategy.close("Short") // Kolory superTrendu z filtrem sma200 trendColor = trendWithFilter == 1 ? color.green : trendWithFilter == -1 ? color.red : color.blue //ploty plot(trendWithFilter == 1 ? upLevel : trendWithFilter == -1 ? dnLevel : na, color=trendColor, title="SuperTrend") // Stop Loss ( this code is from author RafaelZioni, modified by wielkieef ) per(procent) => strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) // -------------------------------------------------------------------------------------------------------------------- strategy.exit('SL',loss=per(sl)) //by wielkieef