Estratégia de inversão de impulso

Autora:ChaoZhang, Data: 2023-11-13 10:02:25
Tags:

img

Resumo

Esta estratégia visa detectar a variação percentual do preço das ações dentro de um determinado período de tempo e gerar sinais de negociação quando um limiar é excedido.

Estratégia lógica

  1. O parâmetro de entrada x representa o número de períodos de velas a verificar, com um padrão de 5 para velas de 5 minutos.

  2. Calcular a variação percentual do preço de fechamento atual em relação ao preço de fechamento x períodos atrás, guardada como trueChange1 e trueChange2.

  3. Os parâmetros de entrada percentChangePos e percentChangeNeg representam a variação percentual do limiar, com valores por defeito de 0,4% e -0,4%.

  4. Quando trueChange1 é maior que percentChangePos, um sinal de compra é gerado.

  5. Adicionar cores de texto e de fundo para status de compra e venda.

  6. Definir regras de entrada e saída com base nos sinais.

  7. Configurar alertas e desenhos.

Vantagens

  1. Utilize a variação percentual em vez da variação absoluta do preço, adaptável a diferentes stocks.

  2. Estabelecer limiares percentuais positivos e negativos flexíveis para identificar as rupturas das bandas de Bollinger.

  3. Período de detecção ajustável para identificar alterações de tendência em diferentes prazos.

  4. Alertas configuráveis para captar sinais importantes.

  5. Lógica de sinal simples e direta, fácil de entender e usar.

  6. Captar reversões de curto prazo no mercado aberto.

Riscos

  1. A variação percentual não determina a direcção da tendência, podendo gerar sinais enganosos.

  2. Os parâmetros padrão podem não corresponder a todos os estoques, sendo necessário ajuste específico.

  3. Sem stop loss no local, incapaz de limitar perdas.

  4. Sinais frequentes, custos comerciais potencialmente elevados.

  5. Incapaz de determinar a estrutura do mercado, propenso a falhas em mercados variados.

Soluções:

  1. Combinar com indicadores de tendência como regressão linear para determinar a tendência geral.

  2. Otimizar os parâmetros com base nas características das existências.

  3. Implementar um stop loss adequado.

  4. Filtrar sinais para evitar excesso de negociação.

  5. Medir a estrutura do mercado a partir de prazos mais longos para evitar problemas comerciais.

Melhorias

  1. Adicionar mecanismos de stop loss como stop loss para limitar as perdas.

  2. Adicione condições de filtro como volume, médias móveis para evitar batidas.

  3. Otimizar as regras de entrada e saída com indicadores como o MACD.

  4. Usar aprendizagem de máquina para otimizar automaticamente parâmetros.

  5. Incorporar uma análise da estrutura do mercado para evitar problemas.

  6. Parâmetros definidos dinamicamente com base na volatilidade e liquidez.

  7. Combinar com uma análise de prazo mais longo para determinar a tendência geral.

Resumo

Esta estratégia gera negócios comparando a mudança percentual de preço com limiares pré-estabelecidos, tornando-se uma estratégia de reversão média de curto prazo. As vantagens estão em sua simplicidade, flexibilidade e capacidade de capturar movimentos repentinos do mercado. As desvantagens são riscos que podem ser abordados através de otimizações e uso adequado com análise de tendências e gerenciamento de riscos.


/*backtest
start: 2023-10-13 00:00:00
end: 2023-11-12 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// created by Oliver
strategy("Percentage Change strategy w/BG color", overlay=true, scale=scale.none, precision=2)

x = input(5, title = 'x candles difference', minval = 1)
trueChange1 = (close - close[x]) / close[x] * 100
percentChangePos = input(0.4, title="Percent Change")

//if (percentChange > trueChange) then Signal  

plotChar1 = if percentChangePos > trueChange1
    false
else
    true

plotchar(series=plotChar1, char='🥶', color=color.green, location=location.top, size = size.tiny )

trueChange2 = (close - close[x]) / close[x] * 100
percentChangeNeg = input(-0.4, title="Percent Change")

plotChar2 = if percentChangeNeg < trueChange2
    false
else
    true
plotchar(series=plotChar2, char='🥵', color=color.red, location=location.top, size = size.tiny)

//------------------------------------------------------------------------
UpColor() => percentChangePos < trueChange1
DownColor() => percentChangeNeg > trueChange2

//Up = percentChangePos < trueChange1
//Down = percentChangeNeg > trueChange2


col = percentChangePos < trueChange1 ? color.lime : percentChangeNeg > trueChange2 ? color.red : color.white
//--------
condColor = percentChangePos < trueChange1 ? color.new(color.lime,50) : percentChangeNeg > trueChange2 ? color.new(color.red,50) : na
//c_lineColor = condUp ? color.new(color.green, 97) : condDn ? color.new(color.maroon, 97) : na
//barcolor(Up ? color.blue : Down ? color.yellow : color.gray, transp=70)

//Background Highlights
//bgcolor(condColor, transp=70)


//---------

barcolor(UpColor() ? color.lime: DownColor() ? color.red : na)
bgcolor(UpColor() ? color.lime: DownColor() ? color.red : na)

//------------------------------------------------------------------------

buy = percentChangePos < trueChange1
sell = percentChangeNeg > trueChange2


//------------------------------------------------------------------------
/////////////// Alerts /////////////// 
alertcondition(buy, title='buy', message='Buy')
alertcondition(sell, title='sell', message='Sell')

//-------------------------------------------------

if (buy)
    strategy.entry("My Long Entry Id", strategy.long)

if (sell)
    strategy.entry("My Short Entry Id", strategy.short)


/////////////////// Plotting //////////////////////// 
plotshape(buy, title="buy", text="Buy", color=color.green, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(sell, title="sell", text="Sell", color=color.red, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0)


Mais.