Динамическое отслеживание SAR прорывная стратегия трех скользящих средних


Дата создания: 2023-11-08 11:53:09 Последнее изменение: 2023-11-08 11:53:09
Копировать: 0 Количество просмотров: 448
1
Подписаться
1166
Подписчики

Динамическое отслеживание SAR прорывная стратегия трех скользящих средних

Обзор

Это взломная торговая стратегия, которая сочетает параллельный SAR с средним СММА трех различных периодов. Она делает больше, когда три средних линии в целом растут, и делает пустоту, когда три средних линии в целом падают, а в сочетании с SAR определяет направление тренда, открывая позиции в обратном направлении, когда SAR движется.

Стратегический принцип

Эта стратегия основана на следующем:

  1. Используйте параллельную линию SAR, чтобы определить направление текущей тенденции. SAR может динамически отслеживать изменения цены, чтобы определить многоголовую тенденцию и пустую тенденцию.

  2. Установите среднюю линию SMMA с тремя различными циклами: ((быстрая линия 21 циклов, средняя линия 50 циклов, медленная линия 200 циклов)). Когда все три средних линии растут, считается, что формируется многоголовый тренд; когда все три средних линии падают, считается, что формируется пустой тренд.

  3. При переходе SAR в сторону понижения, если три равномерных линии полностью поднялись, то делается дополнительный вход.

  4. При повороте SAR вверх, в случае полного падения всех трех равновесных линий, ввод в покер осуществляется.

  5. Установка стоп-порогов и стоп-парок. Стоп-порог использует показатель SAR в качестве динамического стоп-порога, а стоп-парок устанавливается в качестве определенной пропорции цены входа.

В частности, сначала стратегия определяет, происходит ли сдвиг в показателях SAR для текущего BAR. Если SAR сдвигается сверху вниз, и три равновесные линии полностью поднимаются, сделайте больше; если SAR сдвигается снизу вверх, и три равновесные линии полностью падают, сделайте пустое.

После задержания позиции, стоп-линия устанавливается в качестве следующей цены индикатора SAR на BAR, а SAR используется для динамического отслеживания стоп-поста. Стоп-пост устанавливается в качестве 10% от цены входа.

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

Эта стратегия сочетает в себе преимущества трендоуказывающих индикаторов и многовременных средних линий, что позволяет вовремя войти в игру при повороте тренда и одновременно прорваться через фильтр средних линий. Основными преимуществами являются:

  1. Показатель SAR позволяет динамично оценивать тенденции и быстро улавливать возможности для их изменения.

  2. Три равномерные линии эффективно фильтруют рыночный шум и предотвращают ложные прорывы.

  3. Использование средней линии SMMA приводит к более гладким кривым и уменьшает помехи для торговли, вызванные колебаниями средней линии.

  4. В сочетании с установкой стоп-стоп можно контролировать одноразовые убытки, при этом блокируя часть прибыли.

  5. Настройка параметров стратегии является гибкой, можно корректировать параметры для различных рынков, оптимизируя эффективность стратегии.

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

В этой стратегии также есть некоторые риски, в частности:

  1. В шокирующем тренде, SAR может иметь несколько часто повторяющихся поворотов, что приводит к увеличению сборов за слишком частые сделки.

  2. Трехлинейные Settings Не всегда могут быть идеальными для всех сортов и требуют корректировки в зависимости от конкретных сортов.

  3. Стоп-лосс устанавливается на следующую цену SAR BAR с задержкой времени, которая может увеличить убытки.

  4. Проблему, при которой ложные прорывы в устойчивом тренде заставляют SAR поворачивать, можно смягчить, скорректировав параметры для сглаживания кривой SAR.

  5. Неправильные среднелинейные настройки также могут пропускать тренды или создавать ошибочные сигналы, которые требуют тщательного тестирования и оптимизации.

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

  1. Для уменьшения вероятности частого поворота SAR параметры корректируются в зависимости от колебаний разных сортов.

  2. Параметры трех равномерных линий были скорректированы, чтобы они были более близки к характеристикам разных сортов.

  3. Оптимизация стратегии остановки убытков, например, использование небольших остановок, мобильных остановок и т. д.

  4. На часто торгуемых рынках используйте ограничительную цену для предотвращения увеличения убытков.

  5. Проведите тесты на оптимизацию параметров, чтобы оценить влияние средней линии и параметров SAR на эффективность стратегии.

Направление оптимизации

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

  1. Оптимизация параметров SAR, сглаживание кривой SAR, снижение частоты поворота кривой, предотвращение чрезмерной торговли.

  2. Изменение длины трех равномерных линий, чтобы они соответствовали особенностям конкретных торговых видов и лучше отфильтровывали тенденции.

  3. Использование динамических стратегий, таких как движущийся стоп, подвешенный стоп и т. д., чтобы уменьшить убытки от стоп.

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

  5. Добавление других показателей для фильтрации, таких как RSI, KD и т. д., улучшает качество сигнала и уменьшает вероятность ложного прорыва.

  6. Оптимизация входных условий, можно рассмотреть возможность одновременной проверки формы K-линии при переключении SAR, чтобы избежать низкого качества сигнала.

  7. Добавление условий для повторного входа, если цена после остановки продолжает двигаться в пользу.

  8. Совершенствование стратегий блокировки, таких как мобильная блокировка, частичная блокировка, блокировка разрыва и т. д., для повышения рентабельности.

  9. Оптимизация параметров на основе результатов обратной связи и оценка их влияния на эффективность общей стратегии.

Подвести итог

В целом, это простая и практичная стратегия для прорыва, которая сочетает в себе индикаторы 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)