Это стратегия трейдинга, которая сочетает в себе параболический индикатор SAR и тройные линии SMMA с различными периодами. Она длится, когда все три линии SMMA растут, и становится короткой, когда все падают, используя индикатор SAR для определения направления тренда и принимая контратендные записи, когда SAR переворачивает направления. Стратегия также включает стоп-лосс и прибыль.
Стратегия основана на следующих ключевых моментах:
Использование параболического индикатора SAR для определения текущего направления тренда. SAR может динамически отслеживать изменения цен и определять восходящие и нисходящие тенденции.
Установка трех линий SMMA с различными периодами (быстрая линия 21, средняя линия 50, медленная линия 200).
Продолжительность, когда SAR падает вниз, в то время как все три линии SMMA поднимаются.
Сокращение, когда SAR переворачивается вверх, в то время как все три линии SMMA падают.
Включение стоп-лосса на основе SAR и получение прибыли по определенному проценту от входной цены.
В частности, стратегия сначала проверяет, переворачивает ли SAR направления на текущей панели. Если SAR переворачивается сверху вниз, когда SMMA растет, он длинный. Если SAR переворачивается сверху вниз, когда SMMA падает, он короткий.
После входа, стоп-лосс устанавливается по цене SAR на следующем столбце, используя SAR в качестве динамического последующего стоп-лосса. Приобретение прибыли устанавливается на 10% от цены входа. Когда цена достигает уровня take profit или stop loss, позиция закрывается.
Эта стратегия сочетает в себе преимущество индикатора, следующего за трендом, и скользящих средних за несколько временных рамок, что позволяет своевременно записывать изменения тренда при одновременной фильтрации ложных сбоев с помощью SMMA.
SAR может быстро обнаруживать изменения тренда и улавливать возможности для их изменения.
Три SMMA эффективно фильтруют шум рынка и избегают ложных сбоев.
Использование SMMA приводит к более плавным кривым и меньшему вмешательству MA whipsaws.
Включение стоп-лосса и прибыли помогает контролировать потерю на одной сделке и блокировать частичную прибыль.
Гибкие параметры позволяют оптимизировать для разных рынков.
Также следует учитывать некоторые риски:
SAR может часто меняться во время колебаний трендов, увеличивая расходы от чрезмерной торговли.
Настройки SMMA могут не соответствовать всем инструментам, что требует индивидуальной оптимизации.
SAR стоп-лосс имеет временную задержку, потенциально увеличивающую потери.
SAR может переключиться на ложные перерывы в устойчивых тенденциях.
Плохая настройка SMMA может привести к пропущенным тенденциям или плохим сигналам.
Для устранения рисков оптимизация может быть сосредоточена на:
Корректировка параметров SAR на основе волатильности для уменьшения перекачки.
Настройка периодов SMMA в соответствии с характеристиками прибора.
Улучшение режима стоп-лосса, например, с помощью отстающих или лимитных ордеров.
Использование лимитных ордеров для остановки потерь в активной торговле.
Обширные испытания и настройка параметров.
На основе вышеуказанного анализа оптимизация может включать:
Оптимизация SAR параметров для более гладких кривых и меньшего количества перекатов.
Корректировка длины SMMA в соответствии с инструментами торговли.
Использование динамических стоп-лосса, таких как остановки или лимитные ордера.
Использование лимитных ордеров для стоп-лосса в высокочастотной торговле.
Добавление таких фильтров, как RSI, KD для улучшения качества сигнала.
Улучшение условий въезда, например, проверка моделей свечей с помощью SAR-перекачки.
Добавление условий повторного входа после запуска стоп-лосса.
Увеличение прибыли с отставанием, частичное закрытие, ошеломляющие уровни.
Настройка параметров на основе результатов обратного теста и анализа чувствительности.
В целом, это простая и практичная стратегия выхода, сочетающая в себе чувствительность SAR в обнаружении изменений тренда и эффект фильтрации скользящих средних. Она может быстро идентифицировать точки обратного движения тренда. Использование стоп-лосса и прибыли помогает контролировать риски и блокировать прибыль. Дальнейшая оптимизация настроек параметров, правил входа / выхода и надежность против ложных перерывов может повысить эффективность стратегии для различных торговых инструментов.
/*backtest start: 2023-10-08 00:00:00 end: 2023-11-07 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="SAR + 3SMMA with SL & TP", overlay=true, calc_on_order_fills=false, calc_on_every_tick=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.USD, commission_type= strategy.commission.percent, commission_value=0.03) start = input.float(0.02, step=0.01, group="SAR") increment = input.float(0.02, step=0.01, group="SAR") maximum = input.float(0.2, step=0.01, group="SAR") //Take Profit Inputs take_profit = input.float(title="Take Profit (%)", minval=0.0, step=0.1, defval = 0.1, group="Stop Loss and Take Profit", inline="TP") * 0.01 //Stop Loss Inputs stop_loss = input.float(title="StopLoss (%)", minval=0.0, step=0.1, defval=1, group="Stop Loss and Take Profit", inline="SL") * 0.01 // Smooth Moving Average fastSmmaLen = input.int(21, minval=1, title="Fast Length", group = "Smooth Moving Average") midSmmaLen = input.int(50, minval=1, title="Mid Length", group = "Smooth Moving Average") slowSmmaLen = input.int(200, minval=1, title="Slow Length", group = "Smooth Moving Average") src = input(close, title="Source", group = "Smooth Moving Average") smma(ma, src, len) => smma = 0.0 smma := na(smma[1]) ? ma : (smma[1] * (len - 1) + src) / len smma fastSma = ta.sma(src, fastSmmaLen) midSma = ta.sma(src, midSmmaLen) slowSma = ta.sma(src, slowSmmaLen) fastSmma = smma(fastSma, src, fastSmmaLen) midSmma = smma(midSma, src, midSmmaLen) slowSmma = smma(slowSma, src, slowSmmaLen) isSmmaUpward = ta.rising(fastSmma, 1) and ta.rising(midSmma, 1) and ta.rising(slowSmma, 1) var bool uptrend = na var float EP = na var float SAR = na var float AF = start var float nextBarSAR = na if bar_index > 0 firstTrendBar = false SAR := nextBarSAR if bar_index == 1 float prevSAR = na float prevEP = na lowPrev = low[1] highPrev = high[1] closeCur = close closePrev = close[1] if closeCur > closePrev uptrend := true EP := high prevSAR := lowPrev prevEP := high else uptrend := false EP := low prevSAR := highPrev prevEP := low firstTrendBar := true SAR := prevSAR + start * (prevEP - prevSAR) if uptrend if SAR > low firstTrendBar := true uptrend := false SAR := math.max(EP, high) EP := low AF := start else if SAR < high firstTrendBar := true uptrend := true SAR := math.min(EP, low) EP := high AF := start if not firstTrendBar if uptrend if high > EP EP := high AF := math.min(AF + increment, maximum) else if low < EP EP := low AF := math.min(AF + increment, maximum) if uptrend SAR := math.min(SAR, low[1]) if bar_index > 1 SAR := math.min(SAR, low[2]) else SAR := math.max(SAR, high[1]) if bar_index > 1 SAR := math.max(SAR, high[2]) nextBarSAR := SAR + AF * (EP - SAR) sarIsUpTrend = uptrend ? true : false sarFlippedDown = sarIsUpTrend and not sarIsUpTrend[1] ? true : false sarFlippedUp = not sarIsUpTrend and sarIsUpTrend[1] ? true : false longEntryCondition = isSmmaUpward and sarFlippedDown shortEntryCondition = not isSmmaUpward and sarFlippedUp if(longEntryCondition) strategy.entry("L", strategy.long, stop=nextBarSAR, comment="L") if(shortEntryCondition) strategy.entry("S", strategy.short, stop=nextBarSAR, comment="S") strategy.exit("CL", when=strategy.position_size > 0, limit=strategy.position_avg_price * (1+take_profit), stop=strategy.position_avg_price*(1-stop_loss)) strategy.exit("CS", when=strategy.position_size < 0, limit=strategy.position_avg_price * (1-take_profit), stop=strategy.position_avg_price*(1+stop_loss)) plot(SAR, style=plot.style_cross, linewidth=1, color=color.orange) plot(nextBarSAR, style=plot.style_cross, linewidth=1, color=color.aqua) plot(series = fastSmma, title="fastSmma", linewidth=1) plot(series = midSmma, title="midSmma", linewidth=2) plot(series = slowSmma, title="slowSmma", linewidth=3) plotchar(series = isSmmaUpward, title="isSmmaUpward", char='') plotchar(series=sarIsUpTrend, title="sarIsUpTrend", char='') plotchar(series=sarFlippedUp, title="sarFlippedUp", char='') plotchar(series=sarFlippedDown, title="sarFlippedDown", char='') plotchar(series=longEntryCondition, title="longEntryCondition", char='') plotchar(series=shortEntryCondition, title="shortEntryCondition", char='') plotchar(series=strategy.position_size > 0, title="inLong", char='') plotchar(series=strategy.position_size < 0, title="inShort", char='') //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)