O recurso está a ser carregado... Carregamento...

Estratégia parabólica SAR Dynamic Breakout Triple SMMA

Autora:ChaoZhang, Data: 2023-11-08 11:53:09
Tags:

img

Resumo

Esta é uma estratégia de negociação de breakout que combina o indicador SAR parabólico e linhas SMMA triplas com períodos diferentes. Ela vai longa quando todas as três linhas SMMA estão subindo e vai curta quando todas estão caindo, enquanto usa o indicador SAR para determinar a direção da tendência e tomar entradas de contra-tendência quando o SAR vira direções. A estratégia também incorpora stop loss e take profit.

Estratégia lógica

A estratégia baseia-se nos seguintes pontos-chave:

  1. Usando o indicador SAR parabólico para determinar a direção da tendência atual.

  2. Configuração de três linhas SMMA com períodos diferentes (linha rápida 21, linha média 50, linha lenta 200). Quando as três linhas estão subindo, sinaliza uma tendência de alta. Quando todas estão caindo, sinaliza uma tendência de queda.

  3. Vai longo quando o SAR desce enquanto as três linhas SMMA estão a subir.

  4. Corto-circuito quando o SAR dispara enquanto as três linhas SMMA caem.

  5. Incorporação de stop loss baseado em SAR e take profit a uma certa percentagem do preço de entrada.

Especificamente, a estratégia primeiro verifica se o SAR inverte direções na barra atual. Se o SAR inverter de cima para baixo enquanto os SMMAs estão subindo, ele vai longo. Se o SAR inverter de baixo para cima enquanto os SMMAs estão caindo, ele vai curto.

Após a entrada, o stop loss é definido no preço SAR na próxima barra, usando o SAR como um stop loss dinâmico.

Análise das vantagens

Esta estratégia combina a vantagem de um indicador de tendência e de médias móveis de múltiplos quadros de tempo, permitindo entradas oportunas em reversões de tendência, ao mesmo tempo em que se filtram falsas rupturas com SMMA.

  1. O SAR pode detectar rapidamente mudanças de tendência e captar oportunidades de reversão.

  2. As SMMA triplas filtram eficazmente o ruído do mercado e evitam falhas.

  3. O uso de SMMA resulta em curvas mais suaves e menos interferência de MA whipsaws.

  4. Incorporar stop loss e take profit ajuda a controlar a perda de uma única negociação e bloquear lucros parciais.

  5. As definições de parâmetros flexíveis permitem a otimização para diferentes mercados.

Análise de riscos

Há também alguns riscos a considerar:

  1. SAR pode virar frequentemente durante tendências agitadas, aumentando os custos de negociação excessiva.

  2. As configurações SMMA podem não se adequar bem a todos os instrumentos, exigindo otimização individual.

  3. SAR stop loss tem atraso de tempo, potencialmente aumentando as perdas.

  4. SAR pode virar em falsas rupturas em tendências estáveis.

  5. As configurações deficiente SMMA podem causar tendências perdidas ou sinais ruins.

Para enfrentar os riscos, as otimizações podem centrar-se em:

  1. Ajustar os parâmetros SAR com base na volatilidade para reduzir os saltos.

  2. Ajuste dos períodos SMMA para se adequarem às características dos instrumentos.

  3. Melhorar o stop loss, por exemplo com ordens de trailing ou de limite.

  4. Utilização de ordens de limite para stop loss na negociação ativa.

  5. Extenso teste e ajuste de parâmetros.

Orientações de otimização

Com base na análise anterior, as otimizações podem envolver:

  1. Otimizando os parâmetros SAR para curvas mais suaves e menos voltas.

  2. Ajustar os comprimentos da SMMA para que correspondam aos instrumentos de negociação.

  3. Empregando stop loss dinâmicos como trailing stops ou limit orders.

  4. Utilização de ordens de limite para stop loss na negociação de alta frequência.

  5. Adicionando filtros como RSI, KD para melhorar a qualidade do sinal.

  6. Melhorar as condições de entrada, por exemplo, verificando os padrões das velas com os lançamentos SAR.

  7. Adição de condições de reentrada após a ação de stop loss.

  8. Aumentar o lucro com baixas, fechamento parcial, níveis impressionantes.

  9. Ajuste dos parâmetros com base nos resultados dos backtests e na análise da sensibilidade.

Resumo

Em resumo, esta é uma estratégia de breakout simples e prática que combina a sensibilidade do SAR na captação de mudanças de tendência e o efeito de filtragem de médias móveis. Pode identificar pontos de reversão de tendência rapidamente. O uso de stop loss e take profit ajuda a controlar riscos e bloquear lucros. Outras otimizações nas configurações de parâmetros, regras de entrada / saída e robustez contra falhas podem melhorar o desempenho da estratégia para diferentes instrumentos de negociação.


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



Mais.