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.
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.
Para abordar os riscos acima, parâmetros como len, escala, nível podem ser ajustados para otimização.
A estratégia pode ser ainda melhorada:
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")