Стратегия двойной скользящей средней с супер-тенденцией

Автор:Чао Чжан, Дата: 2024-01-16 15:19:09
Тэги:

img

Обзор

Стратегия Super Trend Dual Moving Average - это количественная торговая стратегия, основанная на индикаторе Super Trend и простой скользящей средней.

Логика стратегии

Стратегия использует два показателя:

  1. Индикатор супер-тенденции: рассчитывает верхние и нижние рельсы на основе истинной волатильности ATR и мультипликатора. Когда цена закрытия выше верхней рельсы, это указывает на бычий взгляд. Когда ниже нижней рельсы, это указывает на медвежий взгляд.

  2. 200-дневная простая скользящая средняя: это арифметическая средняя цены закрытия за последние 200 дней. Когда цена закрытия выше этой линии, это представляет собой основную бычью тенденцию. Когда ниже этой линии, это представляет собой основную медвежий тренд.

Логика стратегии:

  1. Когда индикатор Super Trend дает бычий сигнал (значение Super Trend больше 0) и цена закрытия выше 200-дневного MA, делайте длинный выбор.

  2. Если индикатор Super Trend дает медвежий сигнал (значение Super Trend меньше 0) и цена закрытия ниже 200-дневного MA, перейти на короткий курс.

  3. Закрыть позицию, когда индикатор Super Trend дает обратный сигнал по отношению к предыдущему.

  4. Стоп-лосс установлен на уровне 25%.

Анализ преимуществ

Стратегия сочетает в себе индикатор Super Trend для определения краткосрочного тренда и 200-дневный MA для определения долгосрочного тренда, который может эффективно фильтровать ложные прорывы, уменьшать частоту торговли при одновременном улучшении показателя выигрыша.

Анализ рисков

Основной риск этой стратегии заключается в том, что диапазон стоп-лосса относительно большой. Это может увеличить риск принудительной ликвидации в ситуациях с высоким плечовым плечом. Кроме того, когда рынок ограничен диапазоном, индикатор Super Trend будет генерировать избыточные сигналы, тем самым увеличивая затраты на транзакции и частоту торговли.

Риск может быть снижен путем надлежащей корректировки периода ATR, параметров мультипликатора и диапазона стоп-лосса.

Руководство по оптимизации

Стратегия может быть оптимизирована в следующих аспектах:

  1. Регулировать период ATR и параметры мультипликатора для оптимизации индикатора Super Trend.

  2. Попробуйте заменить другие индикаторы MA, такие как EMA и VIDYA.

  3. Добавить другие вспомогательные индикаторы, такие как канал BOLL или индикатор KD для дальнейшей фильтрации сигнала.

  4. Оптимизируйте стратегию остановки потери, например, переместите ее на точку безубыточности или остановку с более высокими временными рамками.

Резюме

В целом, эта стратегия очень практична. Она учитывает как краткосрочное суждение о тренде, так и долгосрочное суждение о тренде с разумными настройками стоп-лосса. Она может достичь лучших результатов за счет корректировки и оптимизации параметров, что стоит реальной проверки и применения торговли.


/*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


Больше