Estratégia de avanço de três médias móveis de rastreamento dinâmico SAR


Data de criação: 2023-11-08 11:53:09 última modificação: 2023-11-08 11:53:09
cópia: 0 Cliques: 776
1
focar em
1617
Seguidores

Estratégia de avanço de três médias móveis de rastreamento dinâmico SAR

Visão geral

Trata-se de uma estratégia de negociação de ruptura que combina o SAR de paralelo com a média SMMA de três períodos diferentes. Faz mais quando três médias estão em alta, fica em branco quando três médias estão em baixa, e combina o SAR para determinar a direção da tendência e abrir posições de reversão quando o SAR se move.

Princípio da estratégia

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

  1. O indicador SAR pode ser usado para determinar a direção da tendência atual. O indicador SAR é capaz de acompanhar dinamicamente as mudanças de preço e determinar a tendência multi-cabeça e a tendência em branco.

  2. Configure três linhas médias SMMA de diferentes períodos (linha rápida de 21 períodos, linha média de 50 períodos, linha lenta de 200 períodos). Quando as três linhas médias estão todas em alta, é considerado uma tendência de múltiplos cabeças; Quando as três linhas médias estão todas em baixa, é considerado uma tendência de cabeça vazia.

  3. Quando o SAR se desloca para baixo, se as três linhas de equilíbrio estiverem em alta, faça uma entrada extra.

  4. Se as três linhas de equilíbrio caírem completamente, a entrada será fechada.

  5. O stop loss é definido como o ponto de parada do SAR e o stop loss é definido como uma proporção do preço de entrada.

Especificamente, a estratégia começa a avaliar se o indicador SAR do BAR atual está se deslocando. Se o SAR está se deslocando de cima para baixo e as três linhas de equilíbrio estão totalmente em alta, faça mais; se o SAR está se deslocando de baixo para cima e as três linhas de equilíbrio estão totalmente em baixa, faça zero.

Depois de manter a posição, a linha de stop-loss é configurada como o próximo preço do indicador SAR do BAR, com o SAR como um stop-tracking dinâmico. O stop-loss é configurado como 10% do preço de entrada. Quando o preço atinge o nível de stop-loss ou stop-loss, a posição de equilíbrio é retirada.

Análise de vantagens

Esta estratégia combina os benefícios dos indicadores de tendência e da linha média de períodos de tempo múltiplos, permitindo a entrada em tempo hábil em caso de reversão de tendência, ao mesmo tempo em que a linha média é filtrada para a falsa ruptura. As principais vantagens são:

  1. Os indicadores SAR são capazes de avaliar de forma dinâmica as tendências e capturar rapidamente as oportunidades de mudança de tendência.

  2. Três linhas uniformes são capazes de filtrar eficazmente o ruído do mercado, evitando falsas brechas.

  3. O uso de linhas médias SMMA permite uma curva mais suave, reduzindo a interferência das linhas médias nas transações.

  4. Combinado com a configuração de stop loss, pode controlar perdas individuais, enquanto bloqueia parte dos lucros.

  5. A configuração dos parâmetros da estratégia é flexível, podendo ser ajustada para diferentes mercados, otimizando o efeito da estratégia.

Análise de Riscos

A estratégia também apresenta alguns riscos, incluindo:

  1. Em uma tendência de choque, o SAR pode ter várias e frequentes variações, resultando em taxas de transação mais elevadas devido a transações muito frequentes.

  2. A configuração de três linhas uniformes pode não ser necessariamente adequada para todas as variedades e precisa ser ajustada de acordo com as condições específicas das variedades.

  3. O preço SAR do stop loss definido como o próximo BAR tem um atraso de tempo, o que pode aumentar a perda.

  4. A falha de ruptura em uma tendência estável que faz com que o SAR se desvie pode ser mitigada ajustando os parâmetros para suavizar a curva SAR.

  5. A configuração incorreta da linha média também pode perder uma tendência ou gerar um sinal errado, que precisa ser cuidadosamente testado e otimizado.

A resposta ao risco pode ser otimizada a partir dos seguintes pontos:

  1. Ajustar os parâmetros de SAR de acordo com a variação da variedade para reduzir a probabilidade de rotação frequente.

  2. Ajustar os parâmetros dos três equilíbrios para aproximá-los das características das diferentes variedades.

  3. Optimizar as estratégias de stop loss, por exemplo, usando stop loss pequeno, stop loss móvel, etc.

  4. Em mercados com alta frequência de negociação, use um preço limite para parar a perda, evitando que os pontos de deslizamento ampliem a perda.

  5. Fazer testes de ajuste de parâmetros para avaliar o impacto da linha média e dos parâmetros SAR na eficácia da estratégia.

Direção de otimização

De acordo com a análise acima, a estratégia pode ser otimizada em vários aspectos:

  1. Optimizar a configuração dos parâmetros SAR, suavizar a curva SAR, reduzir a frequência de rotação da curva e evitar o excesso de negociação.

  2. Ajustar o comprimento das três linhas de equilíbrio para que sejam mais adequadas às características de cada tipo de transação, para melhor filtrar as tendências.

  3. O uso de estratégias de stop loss dinâmicas, como stop loss móvel, stop loss pendular, etc., reduz os danos causados pelo stop loss.

  4. No mercado de alta frequência de negociação, o uso de um único stop loss de preço limite reduz a perda do ponto de deslizamento do stop loss.

  5. Adicionar outros indicadores para filtragem, como RSI, KD, etc., para melhorar a qualidade do sinal e reduzir a probabilidade de falsa ruptura.

  6. Optimizar as condições de entrada, pode ser considerado para verificar a forma da linha K ao mesmo tempo em que o SAR se desvia, para evitar sinais de baixa qualidade.

  7. Adição de condições de reentrada, para reentrada se o preço continuar a funcionar em direção a favor após o stop loss.

  8. Melhorar as estratégias de suspensão, como suspensão móvel, suspensão parcial, suspensão de diferença de nível, etc., para aumentar a lucratividade.

  9. Optimizar os parâmetros com base nos resultados da avaliação e avaliar o impacto dos parâmetros na eficácia da estratégia geral.

Resumir

Em geral, esta é uma estratégia de ruptura simples e prática, combinando o indicador de rastreamento de tendências SAR e a linha de equilíbrio. Utiliza a sensibilidade do SAR para determinar a mudança de tendência e o efeito de onda da linha de equilíbrio para entrar rapidamente no ponto de mudança de tendência. Ao mesmo tempo, define um stop loss para controlar o risco e bloquear os lucros.

Código-fonte da estratégia
/*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)