Tendência optimizada de parâmetros seguindo uma estratégia quantitativa

Autora:ChaoZhang, Data: 2024-01-02 11:01:22
Tags:

img

Resumo

A principal ideia desta estratégia é julgar e rastrear as tendências de preços combinando o indicador de percentual e otimização de parâmetros.

Princípio da estratégia

A estratégia usa o indicador de percentual para determinar as tendências de preços. Percentrank representa a força relativa do preço atual durante o período visualizado. O parâmetro len indica a duração do período histórico a ser visualizado.

A faixa de valores de percentual é de 0 a 100. Quando o valor de percentual está perto de 0, significa que o preço atual está perto do preço mais baixo no período visualizado e está em uma área subvalorizada. Quando está perto de 100, significa que o preço atual está perto do preço mais alto no período visualizado e está em uma área supervalorizada.

A estratégia também introduz um parâmetro de escala como um deslocamento para mover a faixa de 0 a 100 para a faixa de escala para 100 + escala. Duas linhas de sinal level_1 e level_2 também são definidas, onde level_1 indica o nível longo e level_2 indica o nível curto.

Quando o indicador de percentual de preço cruza o nível_1 para cima, um sinal longo é gerado. Quando cruza o nível_2 para baixo, um sinal curto é gerado. As condições de saída são opostas aos sinais de entrada.

Vantagens da estratégia

  1. Usar o indicador de percentual para determinar a força das tendências de preços, evitando ficar preso ou perseguir máximos
  2. Aplicar métodos de otimização de parâmetros para ajustar a escala de deslocamento e o limiar da linha de sinal para diferentes produtos e ciclos para melhorar a estabilidade
  3. Combinar ideias de negociação de tendência e média de reversão para rastrear tendências em tempo hábil após a quebra da linha de sinal

Análise de riscos

  1. Julgamento incorreto das tendências que resultam em perdas desnecessárias
  2. Tendência a gerar sinais errados quando a volatilidade e a tendência dos preços não são claras
  3. A configuração inadequada dos parâmetros pode conduzir a uma negociação demasiado frequente ou a um volume de negociação insuficiente

Para abordar os riscos acima, parâmetros como len, escala, nível podem ser ajustados para otimização.

Orientações de otimização

A estratégia pode ser ainda melhorada:

  1. Pontos de stop loss podem ser introduzidos para reduzir as perdas de transações individuais
  2. Indicadores como a média móvel podem ser incorporados para confirmação para filtrar alguns sinais errados
  3. Os métodos de aprendizagem de máquina podem ser usados para otimizar automaticamente parâmetros
  4. Pode ser executado em paralelo em vários prazos

Conclusão

A ideia geral da estratégia é clara, aplicando métodos quantitativos de otimização de parâmetros para julgar e acompanhar as tendências de preços.


/*backtest
start: 2023-12-02 00:00:00
end: 2024-01-01 00:00:00
period: 4h
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/
// © Alex_Dyuk

//@version=4
strategy(title="percentrank", shorttitle="percentrank")
src = input(close, title="Source")
len = input(title="lookback - Период сравнения", type=input.integer, defval=10, minval=2)
scale = input(title="scale offset - смещение шкалы", type=input.integer, defval=50, minval=0, maxval=100)
level_1 = input(title="sygnal line 1", type=input.integer, defval=30)
level_2 = input(title="sygnal line 2", type=input.integer, defval=-30)

prank = percentrank(src,len)-scale
plot(prank, style = plot.style_columns)
plot(level_2, style = plot.style_line, color = color.red)
plot(level_1, style = plot.style_line, color = color.green)

longCondition = (crossunder(level_1, prank) == true)
if (longCondition)
    strategy.entry("Long", strategy.long)
longExitCondition = (crossover(level_2, prank) == true)
if (longExitCondition)
    strategy.close("Long")
    
shortCondition = (crossover(level_2, prank) == true)
if (shortCondition)
    strategy.entry("Short", strategy.short)
shortexitCondition = (crossunder(level_1, prank) == true)
if (shortexitCondition)
    strategy.close("Short")

    

Mais.