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.
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.
Para abordar los riesgos anteriores, se pueden ajustar parámetros como len, escala, nivel para la optimización.
Hay margen para una mayor optimización de la estrategia:
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")