
이 전략의 주요 아이디어는 percentrank 지표와 변수 최적화를 결합하여 가격 추세를 판단하고 추적하는 것입니다. 이 전략은 현재 가격과 특정 역사적 기간의 가격 크기의 퍼센티지를 비교하여 거래 신호를 생성하여 중간 거울 효과를 캡처하고 추세를 추적하여 추가 수익을 얻습니다.
이 전략은 percentrank 지표를 사용하여 가격 흐름을 판단한다. percentrank은 현재 가격의 비교 강도를 보고 있는 주기에 나타낸다. len은 보고 있는 역사 주기의 길이를 나타낸다.
percentrank의 값 영역은 0에서 100 사이이다. percentrank 값이 0에 가까울 때 현재 가격이 체크 사이클 내 최저 가격에 가까울 때 가치 저평가 영역에 속한다. 100에 가까울 때 현재 가격이 체크 사이클 내 최고 가격에 가까울 때 가치 고평가 영역에 속한다.
이 전략은 또한 scale 파라미터를 오차량으로 도입한다. 0에서 100까지의 영역이 scale에서 100+scale까지의 영역으로 이동하도록 한다. 동시에 level_1과 level_2라는 두 개의 신호선을 설정한다. level_1은 다중 레벨을 보고, level_2는 공평한 레벨을 보고 있다.
가격 percentrank 지표가 아래에서 위쪽으로 level_1을 통과할 때 더보기 신호를 생성하고, 위쪽에서 아래로 level_2을 통과할 때 더보기 신호를 생성한다. 평점 조건은 입문 신호와 반대이다.
위의 위험을 위해, 파라미터 len,scale,level 설정을 조정하여 최적화할 수 있습니다. 또한 다른 지표와 결합하여 확인하여 잘못된 거래를 방지할 수 있습니다.
이 전략에는 더 많은 최적화 가능성이 있습니다:
이 전략은 전체적인 아이디어가 명확하고, 변수 최적화 된 정량적 방법을 사용하여 가격 흐름을 판단하고 추적한다. 실제 가치는 있지만, 실제 위험을 줄이고 안정적인 수익성을 높이기 위해 추가 테스트 및 최적화가 필요합니다.
/*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")