Основная идея этой стратегии заключается в том, чтобы судить и отслеживать ценовые тенденции путем объединения показателя процентного ранга и оптимизации параметров.
Стратегия использует показатель процентного ранга для определения ценовых тенденций. Процентный ранг представляет относительную силу текущей цены за просмотренный период. Параметр len указывает на длину исторического периода, который следует просмотреть.
Диапазон значений процентного ранга составляет от 0 до 100. Когда значение процентного ранга близко к 0, это означает, что текущая цена близка к самой низкой цене в рассматриваемом периоде и находится в недооцененной области. Когда она близка к 100, это означает, что текущая цена близка к самой высокой цене в рассматриваемом периоде и находится в переоцененной области.
Стратегия также вводит параметр масштаба в качестве смещения для перемещения диапазона от 0 до 100 в диапазон масштаба до 100+Становлены также две сигнальные линии level_1 и level_2, где level_1 указывает на длинный уровень и level_2 указывает на короткий уровень.
Когда показатель цены пересекает level_1 вверх, генерируется длинный сигнал. Когда он пересекает level_2 вниз, генерируется короткий сигнал. Условия выхода противоположны сигналам входа.
Для решения вышеуказанных рисков, параметры, такие как len, масштаб, уровень могут быть скорректированы для оптимизации.
Существует возможность дальнейшей оптимизации стратегии:
Общая идея стратегии ясна, применяя количественные методы оптимизации параметров для оценки и отслеживания ценовых тенденций.
/*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")