
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.
A estratégia baseia-se principalmente nos seguintes pontos:
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.
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.
Quando o SAR se desloca para baixo, se as três linhas de equilíbrio estiverem em alta, faça uma entrada extra.
Se as três linhas de equilíbrio caírem completamente, a entrada será fechada.
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.
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:
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.
Três linhas uniformes são capazes de filtrar eficazmente o ruído do mercado, evitando falsas brechas.
O uso de linhas médias SMMA permite uma curva mais suave, reduzindo a interferência das linhas médias nas transações.
Combinado com a configuração de stop loss, pode controlar perdas individuais, enquanto bloqueia parte dos lucros.
A configuração dos parâmetros da estratégia é flexível, podendo ser ajustada para diferentes mercados, otimizando o efeito da estratégia.
A estratégia também apresenta alguns riscos, incluindo:
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.
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.
O preço SAR do stop loss definido como o próximo BAR tem um atraso de tempo, o que pode aumentar a perda.
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.
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:
Ajustar os parâmetros de SAR de acordo com a variação da variedade para reduzir a probabilidade de rotação frequente.
Ajustar os parâmetros dos três equilíbrios para aproximá-los das características das diferentes variedades.
Optimizar as estratégias de stop loss, por exemplo, usando stop loss pequeno, stop loss móvel, etc.
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.
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.
De acordo com a análise acima, a estratégia pode ser otimizada em vários aspectos:
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.
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.
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.
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.
Adicionar outros indicadores para filtragem, como RSI, KD, etc., para melhorar a qualidade do sinal e reduzir a probabilidade de falsa ruptura.
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.
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.
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.
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.
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.
/*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)