Este artigo irá introduzir uma estratégia quantitativa de negociação que combina o indicador de período parabólico e o indicador de banda de Bollinger para definir uma estratégia de stop loss móvel.
Em primeiro lugar, esta estratégia utiliza o indicador parabólico para julgar a tendência actual do mercado. Quando o preço de encerramento de hoje cruza acima da linha de período parabólico de ontem, considera-se que o mercado reverteu para alta e pode ir longo; quando o preço de encerramento de hoje cruza abaixo da linha de período, as perspectivas de mercado são de baixa e podem ir curto.
Em segundo lugar, esta estratégia combina o indicador da Banda de Bollinger para definir uma posição de stop loss dinâmica. O trilho superior da Banda de Bollinger pode ser visto como uma zona de sobrecompra, e o trilho inferior é uma zona de sobrevenda. Depois de ir longo, se o preço cair abaixo do trilho inferior da Banda de Bollinger, stop loss para fechar a posição; depois de ir curto, se o preço subir acima do trilho superior novamente, stop loss para sair. Assim, os trilhos superior e inferior das Bandas de Bollinger se tornam linhas de stop loss em movimento.
Através dos princípios acima, esta estratégia percebe julgar a direção do mercado enquanto define um mecanismo de stop loss dinâmico para rastrear lucros. Isso permite que ela capture alguns altos e baixos nas principais tendências, ao mesmo tempo em que também é capaz de bloquear lucros através de stop losses para evitar riscos.
Em comparação com as estratégias tradicionais de stop loss que apenas definem uma posição fixa de stop loss, esta estratégia usa o indicador de banda de Bollinger como a linha de stop loss, de modo que a linha de stop loss possa se mover com as flutuações de preços. Isso permite que ele bloqueie mais lucros em movimentos relativamente grandes. Além disso, em comparação com o uso da linha de período parabólico sozinho, esta estratégia adiciona o indicador de banda de Bollinger para determinar áreas de sobrecompra e sobrevenda, o que pode ser mais preciso.
O principal risco desta estratégia é que a tendência do indicador parabólico não é forte. Em mercados oscilantes, os preços podem cruzar linhas de período parabólicas várias vezes, causando trocas lucrativas frequentes, mas pequenas, para a estratégia. Neste ponto, as taxas de transação e os custos de deslizamento podem representar uma grande proporção e reduzir a lucratividade da estratégia.
Para lidar com os riscos acima, os parâmetros podem ser ajustados para aumentar o grau de mudança na linha de período parabólico para reduzir a probabilidade de erro de julgamento; ou considerar a combinação de outros indicadores para filtrar o tempo de entrada.
Esta estratégia pode ser otimizada nos seguintes aspectos:
Otimizar os parâmetros do indicador parabólico para ajustar a taxa de mudança do indicador para reduzir a probabilidade de erro de julgamento
Aumentar a filtragem de outros indicadores técnicos, como adicionar MACD, KD para determinar o tipo de mercado, evitar arbitragem no mercado oscilante
Otimizar os parâmetros da banda de Bollinger para ajustar os parâmetros da largura de banda para fazer com que as bandas de Bollinger fiquem mais próximas das mudanças de preço
Aumentar os indicadores de volume, tais como o volume de negociação, posições para ajudar a avaliar e evitar falsos breakouts
Combinar os fundamentos das ações para evitar problemas com os lucros das ações
Esta estratégia combina a direção e a força da tendência do mercado com o indicador parabólico e, em seguida, usa os trilhos superior e inferior das Bandas de Bollinger como a posição de stop loss móvel para definir uma estratégia de stop loss, alcançando uma combinação de rastreamento de tendência e controle de risco. Em comparação com as estratégias tradicionais de stop loss fixo, esta estratégia pode alcançar retornos mais altos em movimentos maiores. Ao otimizar parâmetros e adicionar outros indicadores de julgamento auxiliares, a estabilidade da estratégia pode ser ainda melhorada e os negócios desnecessários reduzidos.
/*backtest start: 2024-01-02 00:00:00 end: 2024-02-01 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © maxencetajet //@version=5 strategy("HA_RSI", overlay=true, initial_capital=1000, default_qty_type=strategy.fixed, default_qty_value=0.5, slippage=25) closeHA = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close) useDateFilter = input.bool(true, title="Filter Date Range of Backtest", group="Backtest Time Period") backtestStartDate = input(timestamp("5 June 2022"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") backtestEndDate = input(timestamp("5 July 2022"), title="End Date", group="Backtest Time Period", tooltip="This end date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") inTradeWindow = true swingHighV = input.int(10, title="Swing High", group="number of past candles") swingLowV = input.int(10, title="Swing Low", group="number of past candles") emaV = input.int(200, title="Ema Period", group="EMA") rsiV = input.int(14, title="RSI Period", group="RSI") start = input(0.02, group="Parabolic SAR") increment = input(0.02, group="Parabolic SAR") maximum = input(0.2, "Max Value", group="Parabolic SAR") ema = ta.ema(closeHA, emaV) rsi = ta.rsi(closeHA, rsiV) SAR = ta.sar(start, increment, maximum) myColor = SAR < low?color.green:color.red longcondition = closeHA > ema and rsi > 50 and closeHA[1] > SAR and closeHA[1] < SAR[1] shortcondition = closeHA < ema and rsi < 50 and closeHA[1] < SAR and closeHA[1] > SAR[1] float risk_long = na float risk_short = na float stopLoss = na float entry_price = na float takeProfit = na risk_long := risk_long[1] risk_short := risk_short[1] swingHigh = ta.highest(closeHA, swingHighV) swingLow = ta.lowest(closeHA, swingLowV) if strategy.position_size == 0 and longcondition and inTradeWindow risk_long := (close - swingLow) / close strategy.entry("long", strategy.long, comment="Buy") if strategy.position_size == 0 and shortcondition and inTradeWindow risk_short := (swingHigh - close) / close strategy.entry("short", strategy.short, comment="Sell") if strategy.position_size > 0 stopLoss := strategy.position_avg_price * (1 - risk_long) entry_price := strategy.position_avg_price strategy.exit("long exit", "long", stop = stopLoss) if strategy.position_size < 0 stopLoss := strategy.position_avg_price * (1 + risk_short) entry_price := strategy.position_avg_price strategy.exit("short exit", "short", stop = stopLoss) if closeHA[1] < SAR and close > strategy.position_avg_price strategy.close("long", comment="Exit Long") if closeHA[1] > SAR and close < strategy.position_avg_price strategy.close("short", comment="Exit Short") p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price') p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss') fill(p_sl, p_ep, color.new(color.red, transp=85)) plot(SAR, "ParabolicSAR", style=plot.style_circles, color=myColor, linewidth=1) plot(ema, color=color.white, linewidth=2, title="EMA")