Estratégia SSL dupla com EMA Stop Loss

Autora:ChaoZhang, Data: 2023-11-06 16:52:11
Tags:

img

Resumo

Esta estratégia integra o indicador Dual SSL e o indicador da média móvel, usando o indicador Dual SSL para determinar a direção da tendência do mercado e médias móveis para confirmação da tendência.

Estratégia lógica

  1. Calcular o rail superior tomando a SMA do preço mais alto durante um período especificado versus o fechamento de ontem Calcular o rail inferior tomando a SMA do preço mais baixo durante um período especificado versus o fechamento de ontem.

  2. Compare o preço de fechamento atual com os trilhos superior e inferior para determinar a direção da tendência atual. Se o preço de fechamento estiver acima do trilho superior, a tendência é determinada como alta. Se o preço de fechamento estiver abaixo do trilho inferior, a tendência é determinada como baixa.

  3. Calcular a SMA de 200 períodos dos preços de fechamento como referência para as tendências de médio a longo prazo.

  4. Quando de alta, se o preço de fechamento quebra acima da SMA de baixo, um sinal de compra é gerado.

  5. Após a entrada em uma posição longa, se o preço de fechamento quebra abaixo do trilho superior, é um sinal de fechamento.

  6. Se o preço de fechamento for abaixo do ponto de stop loss, a ordem de stop loss é acionada.

Vantagens

  1. O uso do indicador Dual SSL para determinar a direção da tendência pode identificar efetivamente as tendências e aumentar a probabilidade de entrar na direção correta.

  2. A adição de médias móveis pode filtrar alguns sinais de ruído e evitar trocas erradas em mercados instáveis.

  3. A utilização de um stop loss para controlar o risco de negociação única pode evitar efetivamente perdas excessivas.

  4. A lógica da estratégia é relativamente simples e fácil de entender, adequada para iniciantes praticarem.

Riscos

  1. O indicador SSL duplo é sensível ao ajuste de parâmetros, diferentes combinações de períodos podem levar a resultados muito diferentes.

  2. Um MA demasiado longo elimina demasiadas oportunidades de negociação, enquanto um MA demasiado curto não denota eficazmente.

  3. Um intervalo de stop loss muito amplo não consegue controlar o risco de forma eficaz, enquanto um intervalo muito apertado pode ser desencadeado por flutuações normais de preços.

  4. A estratégia depende fortemente da otimização de parâmetros. Parâmetros incorretos podem não identificar as tendências corretamente, levando a decisões comerciais erradas.

Orientações de otimização

  1. Teste diferentes combinações de períodos para encontrar parâmetros que possam melhorar a precisão da determinação da tendência para o indicador Dual SSL.

  2. Testar diferentes MAs de período para encontrar o equilíbrio ideal entre sinais de desnotificação e de preservação.

  3. Explorar perdas de parada adaptativas que se ajustam com base na volatilidade do mercado para tornar a perda de parada mais sensível.

  4. Incorporar outros indicadores de confirmação, tais como volume, confluência de vários prazos, para melhorar a robustez.

  5. A análise da evolução deve ser realizada sobre a estratégia otimizada para garantir a robustez.

Conclusão

Esta estratégia combina os pontos fortes do indicador Dual SSL e médias móveis. Com potencial significativo para otimização de parâmetros, é uma estratégia de tendência. Com ajuste e otimização razoáveis de parâmetros, bons resultados podem ser alcançados. No entanto, o risco de sobreajuste deve ser controlado para garantir a robustez.


/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//@Isaac
//Estrategia vista en ▼▼
//YT: Trading Zone
strategy('SSL Strategy + EMA 200 AND Stop Loss', overlay=true)

ema = ta.ema(close, 200)

stop_loss = input.float(2.00, title='Stop Loss', step=0.10)

period = input(title='Period', defval=10)
len = input(title='Period', defval=10)
smaHigh = ta.sma(high, len)
smaLow = ta.sma(low, len)
Hlv = int(na)
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh


cruceArriba = ta.crossover(sslUp, sslDown)
cruceAbajo = ta.crossunder(sslUp, sslDown)

alcista = (close > ema ) and (cruceArriba) 
bajista = (close < ema) and (cruceAbajo)

var SL = 0.0
//Cerrar compra por cruce
por_cruce = ta.crossunder(sslUp, sslDown)

//Cerrar venta por cruce
por_cruceAB = ta.crossunder(sslDown, sslUp)

//Cerrar compra y venta por stop loss
Stop = SL

comprado = strategy.position_size > 0
vendido = strategy.position_size < 0

UTmpconvertL = strategy.position_avg_price * (1 + 0.1)
UTmpdefineL = (UTmpconvertL > close and strategy.openprofit > 0.1)
UTSPL = UTmpdefineL

SPL = UTSPL

///////////////////////////////////////////////////////////////////////

UTmpconvertLS = strategy.position_avg_price * (1 + 0.1)
UTmpdefineLS = (UTmpconvertLS > close and strategy.openprofit > 0.1)
UTSPLS = UTmpdefineLS

SPLS = UTSPLS

////////////////////////////////////////////////////////////////////////

if not comprado and not vendido and alcista
    cantidad = (strategy.equity / close)
    strategy.entry('Compra', strategy.long, qty=cantidad, comment="Long")
    SL := sslDown


if comprado and not vendido and por_cruce and SPL
    strategy.close("Compra", comment="Exit Long")
    SL := 0
    
if comprado and not vendido and Stop
    strategy.exit('Compra', stop=Stop, comment="SL")
    SL := 0

///////////////////////////////////////////////////////////////////

if not comprado and not vendido and bajista
    cantidad = (strategy.equity / close)
    strategy.entry('Venta', strategy.short, qty=cantidad, comment="Short")
    SL := sslDown

if not comprado and vendido and por_cruceAB and SPLS
    strategy.close("Venta", comment="Exit Short")
    SL := 0
    
if not comprado and vendido and Stop
    strategy.exit('Venta', stop=Stop, comment="SLS")
    SL := 0



plot(Stop > 0 ? Stop : na, style=plot.style_circles, color=color.new(color.yellow,0))
plot(ema)
plot(sslDown, linewidth=2, color=color.new(color.red, 0))
plot(sslUp, linewidth=2, color=color.new(color.lime, 0))




Mais.