Параболическая SAR Dynamic Breakout Triple SMMA Стратегия

Автор:Чао Чжан, Дата: 2023-11-08 11:53:09
Тэги:

img

Обзор

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

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

Стратегия основана на следующих ключевых моментах:

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

  2. Установка трех линий SMMA с различными периодами (быстрая линия 21, средняя линия 50, медленная линия 200).

  3. Продолжительность, когда SAR падает вниз, в то время как все три линии SMMA поднимаются.

  4. Сокращение, когда SAR переворачивается вверх, в то время как все три линии SMMA падают.

  5. Включение стоп-лосса на основе SAR и получение прибыли по определенному проценту от входной цены.

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

После входа, стоп-лосс устанавливается по цене SAR на следующем столбце, используя SAR в качестве динамического последующего стоп-лосса. Приобретение прибыли устанавливается на 10% от цены входа. Когда цена достигает уровня take profit или stop loss, позиция закрывается.

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

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

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

  2. Три SMMA эффективно фильтруют шум рынка и избегают ложных сбоев.

  3. Использование SMMA приводит к более плавным кривым и меньшему вмешательству MA whipsaws.

  4. Включение стоп-лосса и прибыли помогает контролировать потерю на одной сделке и блокировать частичную прибыль.

  5. Гибкие параметры позволяют оптимизировать для разных рынков.

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

Также следует учитывать некоторые риски:

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

  2. Настройки SMMA могут не соответствовать всем инструментам, что требует индивидуальной оптимизации.

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

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

  5. Плохая настройка SMMA может привести к пропущенным тенденциям или плохим сигналам.

Для устранения рисков оптимизация может быть сосредоточена на:

  1. Корректировка параметров SAR на основе волатильности для уменьшения перекачки.

  2. Настройка периодов SMMA в соответствии с характеристиками прибора.

  3. Улучшение режима стоп-лосса, например, с помощью отстающих или лимитных ордеров.

  4. Использование лимитных ордеров для остановки потерь в активной торговле.

  5. Обширные испытания и настройка параметров.

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

На основе вышеуказанного анализа оптимизация может включать:

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

  2. Корректировка длины SMMA в соответствии с инструментами торговли.

  3. Использование динамических стоп-лосса, таких как остановки или лимитные ордера.

  4. Использование лимитных ордеров для стоп-лосса в высокочастотной торговле.

  5. Добавление таких фильтров, как RSI, KD для улучшения качества сигнала.

  6. Улучшение условий въезда, например, проверка моделей свечей с помощью SAR-перекачки.

  7. Добавление условий повторного входа после запуска стоп-лосса.

  8. Увеличение прибыли с отставанием, частичное закрытие, ошеломляющие уровни.

  9. Настройка параметров на основе результатов обратного теста и анализа чувствительности.

Резюме

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



Больше