O recurso está a ser carregado... Carregamento...

Estratégia de rotação de impulso multifator

Autora:ChaoZhang, Data: 2023-10-25 11:52:19
Tags:

img

Resumo

Esta estratégia combina RSI, MACD, Bandas de Bollinger e fatores de limite para cima/abaixo para implementar a negociação de rotação de impulso de múltiplos fatores. A estratégia julga primeiro se vários indicadores técnicos dão sinais de compra ou venda simultaneamente.

Estratégia lógica

Os principais componentes desta estratégia são:

  1. Julgamento por factores

    • RSI: Calcule o RSI de 14 períodos e julgue se é inferior à linha de compra ou superior à linha de venda
    • Sequência TD: Calcular o número de dias de limite de ascensão/descensão e avaliar se preenche as condições de compra/venda
    • MACD: Calcular o MACD e o histograma MACD para julgar as condições de compra/venda
    • Bandas de Bollinger: Calcule os BBs de 20 períodos e julgue se o preço toca a faixa superior ou inferior dos BBs
  2. Entrada e saída

    • Condição de compra: RSI, MACD, TD Sequência dão sinais de compra juntos
    • Condição de venda: RSI, MACD, TD Sequência dão sinais de venda juntos
    • Stop-profit: utilizar pontos fixos ou percentagem como stop-profit final
    • Stop loss: definir pontos máximos de perda tolerados para o stop loss
  3. Optimização da estratégia

    • Ajustar os parâmetros do RSI: otimizar o parâmetro do período do RSI
    • Ajustar o período MA: otimizar o parâmetro do período das médias móveis
    • Ajustar as condições de entrada: adicionar ou reduzir os sinais de entrada
    • Adicionar outros factores: Incorporar mais indicadores técnicos e factores estatísticos

Análise das vantagens

  • Vários fatores melhoram a precisão da entrada

    A estratégia considera múltiplos fatores como RSI e MACD em vez de apenas um único indicador.

  • Característica de ímpeto capta tendências

    Indicadores como o RSI e o MACD têm uma característica óbvia de impulso, que captam mudanças na tendência de preços.

  • O mecanismo de paragem de lucros/perdas controla os riscos

    O movimento de stop profit pode bloquear os lucros seguindo dinamicamente o mercado.

  • Lógica simples e clara

    A estratégia combina indicadores técnicos comuns e tem uma certa universalidade.

Análise de riscos

  • Mal desempenho no mercado de alta

    A estratégia concentra-se na negociação de reversão média. Pode desencadear frequentes stop loss em um mercado de alta.

  • Frequência de negociação potencialmente demasiado elevada

    Se os parâmetros forem definidos de forma demasiado sensível, a frequência de negociação pode ser demasiado elevada, aumentando os custos e o deslizamento.

  • Risco de divergência entre indicadores

    A estratégia baseia-se em sinais consistentes em todos os indicadores, mas às vezes podem ocorrer divergências, resultando em sinais errados.

  • Perda de paragem a ser penetrada

    Pontos de stop loss fixos podem ser penetrados.

Orientações de otimização

  • Otimizar os parâmetros para reduzir a frequência de negociação

    Testar parâmetros do RSI e períodos de MA para encontrar combinações com menor frequência de negociação.

  • Adicionar fatores estatísticos para melhorar a eficiência

    Incorporar estatísticas específicas de ações como volatilidade e liquidez para definir parâmetros e melhorar a eficiência.

  • Combinar indicadores de nível de mercado como o VIX

    Ajustar parâmetros de estratégia baseados em indicadores de pânico do mercado como o VIX para reduzir a frequência de negociação durante quedas em todo o mercado.

  • Teste diferentes períodos de retenção

    Teste a detenção a longo prazo contra a rotação a curto prazo para ver o seu impacto no desempenho da estratégia.

  • Otimizar e testar o stop profit/loss

    Pesquise técnicas de stop-profit/loss dinâmicas mais avançadas e teste-as.

Resumo

Esta estratégia combina múltiplos indicadores técnicos e adota stop profit/loss móvel para bloquear lucros e controlar riscos, garantindo alta precisão de entrada. A lógica é simples e clara. O desempenho pode ser melhorado através da otimização de parâmetros e seleção de indicadores.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("RSI, TD Seq, MACD, BB Strategy - Calculation Trailing Profit",overlay=true)


RSIDifference = input(-7, minval=-50, maxval=50, title="RSI Difference") 


TD = close > close[4] ?nz(TD[1])+1:0
TS = close < close[4] ?nz(TS[1])+1:0
TDUp = TD - valuewhen(TD < TD[1], TD , 1 )
TDDn = TS - valuewhen(TS < TS[1], TS , 1 )
TDcheckUP = iff(TD == 2, true, false)
TDCheckDOWN = iff(TS == 2, true, false)

[_, _, histLine] = macd(close, 12, 26, 9)
MACDCheckDown = iff(histLine > 0 and histLine[1] > 0 and histLine[2] > 0 and histLine[3] > 0  and histLine[4] > 0, true, false)
MACDCheckUp = iff(histLine < 0 and histLine[1] < 0 and histLine[2] < 0 and histLine[3] < 0 and histLine[4] < 0, true, false)

RSICal = rsi(close, 14)
RSICalNewUp = 50 + RSIDifference
RSICalNewDown = 50 - RSIDifference
RSICheckUp = iff(RSICal <= RSICalNewUp, true, false)
RSICheckDown = iff(RSICal >= RSICalNewDown, true, false)

basis = sma(close, 20)
dev = 2 * stdev(close, 20)
upperBB = basis + dev
lowerBB = basis - dev
BBCheckUp = iff(close > upperBB, true, false)
BBCheckDown = iff(close < lowerBB, true, false)
//BBCheckUp = false
//BBCheckDown = false


BuyCheck = iff(TDcheckUP == true and MACDCheckUp == true and RSICheckUp == true and BBCheckUp == false, true, false)
SellCheck = iff(TDCheckDOWN == true and MACDCheckDown == true and RSICheckDown == true and BBCheckDown == false, true, false)


ProfitStratA = input(50, minval=0, maxval=10000, title="Profit", step=0.5) 
ProfitTrailingA = input(10, minval=0, maxval=10000, title="Profit", step=0.5) 
useStopLoss = input(false, title="Use Stop Loss?")
LossstratA = input(145, minval=0, maxval=10000, title="Stop Loss", step=0.5) 
colB = input(100, minval=0, maxval=100, title="0-show / 100-hide Strategy", step=100) 

ProfitStrat = ProfitStratA * 10
ProfitTrailing = ProfitTrailingA * 10
Lossstrat = useStopLoss ? LossstratA * 10 : 1000000

if (strategy.position_size > 0)
    strategy.exit("BuyClose", "Buy", trail_points=ProfitStrat, trail_offset=ProfitTrailing, loss=Lossstrat)
    
    
if (strategy.position_size < 0)   
    strategy.exit("SellClose", "Sell", trail_points=ProfitStrat, trail_offset=ProfitTrailing, loss=Lossstrat) 
    

if (BuyCheck == true and strategy.position_size == 0)
    strategy.entry("Buy", strategy.long, comment="Long Entry")
    


if (SellCheck == true and strategy.position_size == 0)
    strategy.entry("Sell", strategy.short, comment="Short Entry")
    


plotshape(BuyCheck, color=blue, transp=colB, style=shape.arrowup, text="Buy\n", location=location.belowbar)
plotshape(SellCheck, color=orange, transp=colB, style=shape.arrowdown, text="Sell\n", location=location.abovebar)













Mais.