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.
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:
Cálculo da linha média: SMA (cerca de N)
Faixa superior: linha média + valor do parâmetro
Faixa inferior: linha média - valor do parâmetro
Quando o preço ultrapassa a faixa superior, se o volume de negociação for superior a 2x do período anterior, vá longo.
Quando o preço cair de volta ao canal, feche a posição longa.
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.
Quando o preço cair de volta para o canal, feche a posição curta.
As vantagens desta estratégia são as seguintes:
O uso de indicadores de canal pode rastrear efetivamente as tendências de preços.
Combinando com o aumento do volume de negociação, filtra bem as falhas.
A queda de volta ao canal serve como mecanismo de stop loss e limita a perda por negociação.
A característica de oscilação é adequada para capturar tendências de médio prazo.
A lógica simples torna fácil de entender e implementar.
Há também alguns riscos:
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.
A configuração incorreta dos parâmetros do canal pode causar sinais falsos excessivos.
Os critérios errados para o aumento do volume de negociação podem perder os verdadeiros sinais de ruptura.
O mecanismo de stop loss pode ser muito conservador, faltando movimentos maiores.
A estratégia pode ser otimizada nos seguintes aspectos:
Otimizar os parâmetros dos canais para se adequarem às diferentes características do mercado.
Melhorar os critérios de posição aberta, como considerar o cruzamento de MA ou padrões de velas, para evitar falhas.
Otimizar o mecanismo de stop loss, permitir um intervalo de stop loss mais amplo para evitar uma saída prematura.
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.
Incorporar mais indicadores para determinar a direção geral da tendência, evitando a negociação contra a tendência principal.
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")