이 전략의 주요 아이디어는 퍼센트랭크 지표와 매개 변수 최적화를 결합하여 가격 트렌드를 판단하고 추적하는 것입니다. 이 전략은 거울 효과를 파악하고 과도한 수익을 위한 트렌드를 추적하기 위해 특정 역사적 기간 동안의 가격의 비율과 현재 가격을 비교하여 거래 신호를 생성합니다.
이 전략은 가격 트렌드를 결정하기 위해 퍼센트랭크 지표를 사용합니다. 퍼센트랭크는 현재 가격의 상대적 강도를 표시합니다. 패러미터 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")