Tendencia optimizada de parámetros siguiendo una estrategia cuantitativa

El autor:¿ Qué pasa?, Fecha: 2024-01-02 11:01:22
Las etiquetas:

img

Resumen general

La idea principal de esta estrategia es juzgar y rastrear las tendencias de precios combinando el indicador de porcentaje y la optimización de parámetros.

Principio de la estrategia

La estrategia utiliza el indicador de porcentaje para determinar las tendencias de precios. Percentrank representa la fuerza relativa del precio actual durante el período visto. El parámetro len indica la duración del período histórico a ver.

El rango de valores de porcentaje es de 0 a 100. Cuando el valor de porcentaje está cerca de 0, significa que el precio actual está cerca del precio más bajo en el período visto y está en un área infravalorada. Cuando está cerca de 100, significa que el precio actual está cerca del precio más alto en el período visto y está en un área sobrevalorada.

La estrategia también introduce un parámetro de escala como desplazamiento para mover el rango de 0 a 100 al rango de escala a 100 +. También se establecen dos líneas de señal level_1 y level_2, donde level_1 indica el nivel largo y level_2 indica el nivel corto.

Cuando el indicador de precio percentual cruza el nivel_1 hacia arriba, se genera una señal larga. Cuando cruza el nivel_2 hacia abajo, se genera una señal corta. Las condiciones de salida son opuestas a las señales de entrada.

Ventajas de la estrategia

  1. Utilice el indicador de porcentaje para determinar la fuerza de las tendencias de precios, evitando quedar atrapado o perseguir máximos
  2. Aplicar métodos de optimización de parámetros para ajustar la escala de desplazamiento y el umbral de la línea de señal para diferentes productos y ciclos para mejorar la estabilidad
  3. Combinar las ideas de negociación de tendencia y media de reversión para rastrear las tendencias de manera oportuna después de romper la línea de señal

Análisis de riesgos

  1. Evaluación errónea de las tendencias que producen pérdidas innecesarias
  2. Es propenso a generar señales erróneas cuando la volatilidad y la tendencia de los precios no son claras
  3. La configuración incorrecta de los parámetros puede dar lugar a una negociación demasiado frecuente o a un volumen de negociación insuficiente

Para abordar los riesgos anteriores, se pueden ajustar parámetros como len, escala, nivel para la optimización.

Direcciones de optimización

Hay margen para una mayor optimización de la estrategia:

  1. Pueden introducirse puntos de stop loss para reducir las pérdidas de operaciones individuales
  2. Indicadores como la media móvil se pueden incorporar para la confirmación para filtrar algunas señales erróneas
  3. Los métodos de aprendizaje automático se pueden utilizar para optimizar automáticamente los parámetros
  4. Puede ejecutarse en paralelo en múltiples marcos de tiempo

Conclusión

La idea general de la estrategia es clara, aplicando métodos cuantitativos de optimización de parámetros para juzgar y rastrear las tendencias de los precios.


/*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")

    

Más.