Estratégia de ruptura de canal oscilante

Autora:ChaoZhang, Data: 2023-11-15 16:01:09
Tags:

img

Resumo

Esta é uma estratégia de negociação de breakout baseada em indicadores de canal. Utiliza a característica de oscilação das faixas de canal para ir longo quando o preço rompe acima da faixa superior e vai curto quando rompe abaixo da faixa inferior.

Estratégia lógica

A estratégia usa primeiro o SMA para calcular a linha média do canal. A faixa superior é definida como linha média mais um valor de parâmetro, e a faixa inferior é a linha média menos o valor do parâmetro, formando um canal de preços.

Especificamente, a lógica de negociação é a seguinte:

  1. Cálculo da linha média: SMA (cerca de N)

  2. Faixa superior: linha média + valor do parâmetro

  3. Faixa inferior: linha média - valor do parâmetro

  4. Quando o preço ultrapassa a faixa superior, se o volume de negociação for superior a 2x do período anterior, vá longo.

  5. Quando o preço cair de volta ao canal, feche a posição longa.

  6. Quando o preço ultrapassa a faixa inferior, se o volume de negociação for superior a 2x do período anterior, vá para curto.

  7. Quando o preço cair de volta para o canal, feche a posição curta.

Análise das vantagens

As vantagens desta estratégia são as seguintes:

  1. O uso de indicadores de canal pode rastrear efetivamente as tendências de preços.

  2. Combinando com o aumento do volume de negociação, filtra bem as falhas.

  3. A queda de volta ao canal serve como mecanismo de stop loss e limita a perda por negociação.

  4. A característica de oscilação é adequada para capturar tendências de médio prazo.

  5. A lógica simples torna fácil de entender e implementar.

Análise de riscos

Há também alguns riscos:

  1. Negociações consecutivas na mesma direcção quando o preço se mantém num lado do canal por um longo tempo, aumentando o risco de perda.

  2. A configuração incorreta dos parâmetros do canal pode causar sinais falsos excessivos.

  3. Os critérios errados para o aumento do volume de negociação podem perder os verdadeiros sinais de ruptura.

  4. O mecanismo de stop loss pode ser muito conservador, faltando movimentos maiores.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar os parâmetros dos canais para se adequarem às diferentes características do mercado.

  2. Melhorar os critérios de posição aberta, como considerar o cruzamento de MA ou padrões de velas, para evitar falhas.

  3. Otimizar o mecanismo de stop loss, permitir um intervalo de stop loss mais amplo para evitar uma saída prematura.

  4. Adicionar regras de dimensionamento das posições para ajustar o tamanho das posições e a utilização do capital com base nas condições de mercado.

  5. Incorporar mais indicadores para determinar a direção geral da tendência, evitando a negociação contra a tendência principal.

Resumo

Em resumo, esta é uma estratégia simples e prática de seguir tendências. Utilizando a oscilação do canal, ele pode efetivamente capturar tendências de médio prazo. Mas é necessário ajustar os parâmetros para se adequar a diferentes mercados e os riscos devem ser monitorados.


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

//Copyright, 2022, Cache_that_pass.  You are free to use this script however you see fit and reproduce it in any manner.

//@version=5

            //////  Name the strategy between the 2 quotation marks.  Consider setting commission type and value in strategy header to match exchanges rates. //////

strategy("Oscillating SSL Channel Strategy", "O-SSL Strat", overlay=true, pyramiding=1, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 100, calc_on_order_fills=true)



            //////  Inputs and calculations used by script  //////

period = input(title='Period', defval=25)
len = input(title='Period', defval=25)
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

            //////  Show me the money  //////

plot(sslDown, linewidth=2, color=color.new(color.red, 0))
plot(sslUp, linewidth=2, color=color.new(color.lime, 0))


            //////  Trade execution logic  //////  
            
//pseudo-code//
        //Go long when high (or maybe close) breaks above the sslUp and volume is 2x or > Volume[1] and sslUp > sslDown
        //Close the above longs when sslUp crosses under sslDown (or set takeprofit and stop loss exits)
        //
        //Go short when low is lower than the sslUp and volume is 2x or > Volume[1] and sslDown > sslUp
        //Close shorts when sslDown crosses under sslUp

longCondition1 = (sslUp > sslDown)
longCondition2 = ta.crossover(high, sslUp)
//longCondition3 = (volume >= (volume[1]*1.89))
longCondition = ((longCondition1) and (longCondition2))// and (longCondition3))

longExit = ta.crossunder(sslUp, sslDown)

            //////  Bring It  //////
if (longCondition)
    strategy.entry("Bring It", strategy.long)

            //////  Sling It  //////
if (longExit)
    strategy.close("Bring It", comment="Sling It")


shortCondition1 = (sslDown) > (sslUp)
shortCondition2 = ta.crossunder(low, sslUp)
//shortCondition3 = (volume >= (volume[1]*1.89))
shortCondition = ((shortCondition1) and (shortCondition2))// and (shortCondition3))

shortExit = ta.crossunder(sslDown, sslUp)

            //////  Bring It  //////
if (shortCondition)
    strategy.entry("Bring It", strategy.long)

            //////  Sling It  //////
if (shortExit)
    strategy.close("Bring It", comment="Sling It")

            //////  Sling It  //////
if (shortCondition)
    strategy.entry("Sling It", strategy.short)

            //////  Bling It  //////
if (shortExit)
    strategy.close("Sling It", comment="Bring It")



Mais.