Это взломная торговая стратегия, которая сочетает параллельный SAR с средним СММА трех различных периодов. Она делает больше, когда три средних линии в целом растут, и делает пустоту, когда три средних линии в целом падают, а в сочетании с SAR определяет направление тренда, открывая позиции в обратном направлении, когда SAR движется.
Эта стратегия основана на следующем:
Используйте параллельную линию SAR, чтобы определить направление текущей тенденции. SAR может динамически отслеживать изменения цены, чтобы определить многоголовую тенденцию и пустую тенденцию.
Установите среднюю линию SMMA с тремя различными циклами: ((быстрая линия 21 циклов, средняя линия 50 циклов, медленная линия 200 циклов)). Когда все три средних линии растут, считается, что формируется многоголовый тренд; когда все три средних линии падают, считается, что формируется пустой тренд.
При переходе SAR в сторону понижения, если три равномерных линии полностью поднялись, то делается дополнительный вход.
При повороте SAR вверх, в случае полного падения всех трех равновесных линий, ввод в покер осуществляется.
Установка стоп-порогов и стоп-парок. Стоп-порог использует показатель SAR в качестве динамического стоп-порога, а стоп-парок устанавливается в качестве определенной пропорции цены входа.
В частности, сначала стратегия определяет, происходит ли сдвиг в показателях SAR для текущего BAR. Если SAR сдвигается сверху вниз, и три равновесные линии полностью поднимаются, сделайте больше; если SAR сдвигается снизу вверх, и три равновесные линии полностью падают, сделайте пустое.
После задержания позиции, стоп-линия устанавливается в качестве следующей цены индикатора SAR на BAR, а SAR используется для динамического отслеживания стоп-поста. Стоп-пост устанавливается в качестве 10% от цены входа.
Эта стратегия сочетает в себе преимущества трендоуказывающих индикаторов и многовременных средних линий, что позволяет вовремя войти в игру при повороте тренда и одновременно прорваться через фильтр средних линий. Основными преимуществами являются:
Показатель SAR позволяет динамично оценивать тенденции и быстро улавливать возможности для их изменения.
Три равномерные линии эффективно фильтруют рыночный шум и предотвращают ложные прорывы.
Использование средней линии SMMA приводит к более гладким кривым и уменьшает помехи для торговли, вызванные колебаниями средней линии.
В сочетании с установкой стоп-стоп можно контролировать одноразовые убытки, при этом блокируя часть прибыли.
Настройка параметров стратегии является гибкой, можно корректировать параметры для различных рынков, оптимизируя эффективность стратегии.
В этой стратегии также есть некоторые риски, в частности:
В шокирующем тренде, SAR может иметь несколько часто повторяющихся поворотов, что приводит к увеличению сборов за слишком частые сделки.
Трехлинейные Settings Не всегда могут быть идеальными для всех сортов и требуют корректировки в зависимости от конкретных сортов.
Стоп-лосс устанавливается на следующую цену SAR BAR с задержкой времени, которая может увеличить убытки.
Проблему, при которой ложные прорывы в устойчивом тренде заставляют SAR поворачивать, можно смягчить, скорректировав параметры для сглаживания кривой SAR.
Неправильные среднелинейные настройки также могут пропускать тренды или создавать ошибочные сигналы, которые требуют тщательного тестирования и оптимизации.
Оптимизация рисков может быть осуществлена в следующих направлениях:
Для уменьшения вероятности частого поворота SAR параметры корректируются в зависимости от колебаний разных сортов.
Параметры трех равномерных линий были скорректированы, чтобы они были более близки к характеристикам разных сортов.
Оптимизация стратегии остановки убытков, например, использование небольших остановок, мобильных остановок и т. д.
На часто торгуемых рынках используйте ограничительную цену для предотвращения увеличения убытков.
Проведите тесты на оптимизацию параметров, чтобы оценить влияние средней линии и параметров SAR на эффективность стратегии.
Согласно анализу, данная стратегия может быть оптимизирована в следующих аспектах:
Оптимизация параметров SAR, сглаживание кривой SAR, снижение частоты поворота кривой, предотвращение чрезмерной торговли.
Изменение длины трех равномерных линий, чтобы они соответствовали особенностям конкретных торговых видов и лучше отфильтровывали тенденции.
Использование динамических стратегий, таких как движущийся стоп, подвешенный стоп и т. д., чтобы уменьшить убытки от стоп.
На рынках с высокой частотой торговли используют ограничительную цену для уменьшения потерь при скольжении стоп-стоп.
Добавление других показателей для фильтрации, таких как RSI, KD и т. д., улучшает качество сигнала и уменьшает вероятность ложного прорыва.
Оптимизация входных условий, можно рассмотреть возможность одновременной проверки формы K-линии при переключении SAR, чтобы избежать низкого качества сигнала.
Добавление условий для повторного входа, если цена после остановки продолжает двигаться в пользу.
Совершенствование стратегий блокировки, таких как мобильная блокировка, частичная блокировка, блокировка разрыва и т. д., для повышения рентабельности.
Оптимизация параметров на основе результатов обратной связи и оценка их влияния на эффективность общей стратегии.
В целом, это простая и практичная стратегия для прорыва, которая сочетает в себе индикаторы 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)