
적응형 선형 회귀 통로 전략은 선형 회귀 분석을 기반으로 한 양적 거래 전략이다. 이 전략은 일정 기간 동안의 증권 가격의 선형 회귀 방정식을 계산하여 상하 통로를 형성하고, 통로 상하 궤도를 거래 신호로 사용하여 간격 거래 또는 추세를 추적한다.
자기 적응형 선형 회귀 통로 전략의 핵심은 일정 수의 K 근 K 선의 종전 가격 선형 회귀 방정식을 계산하여 가격의 중간 지수를 나타내는 중간 선, 가격의 상한을 나타내는 상차선, 가격의 하한을 나타내는 하차선을 형성하는 것이다. 구체적인 계산 과정은 다음과 같다:
입력 변수 length를 지정한 K 루트 K 선의 독립 변수 x와 독립 변수 y를 수집한다. 여기서 x는 1부터 length까지의 정수이고, y는 해당 K 선의 종식값이다.
회귀 계수를 계산합니다.
각 K 선에 대응하는 선형 회귀값 y’을 계산하고, 표준차 STDDEV
중선은 회귀방정식 y’=mx+b로, 상하 궤도는 각각 중선 상하로 표준차의 배수 간격으로 떠 있다.
새로운 K 라인이 도착함에 따라, 위의 계산이 롤러 업데이트, 상하의 적응 통로를 형성한다. 통로 상하의 레일 교차에 따라 더 많은 공백을 하고, 중선 근처에서 손해를 입는다.
적응형 선형 회귀 통로 전략은 전통적인 평균선 전략에 비해 다음과 같은 장점이 있다:
더 과학적이고 합리적인 회귀 분석 모델은 평균선보다 더 높은 통계적 의미를 가지고 있습니다.
더 유연하게, 가격 변화에 따라 통로 범위가 자동으로 조정됩니다.
추적 효과가 더 좋으며, 일부 품종에서는 평균적인 전략보다 훨씬 낫습니다.
실체 검증 결과, 실체에서 만족스러운 성능
이 전략에는 다음과 같은 위험들이 있습니다.
가격의 과도한 변동은 엄청난 손실을 초래한다. 해결책은 손실을 멈추고, 최적화 매개 변수를 설정하는 것이다.
통로가 잘못되면 추적 효과가 좋지 않습니다. 해결책은 다른 기술 지표와 함께 파라미터를 조정하는 것입니다.
리포트 효과는 좋은 것 같지만, 실디 효과는 좋지 않다. 해결 방법은 파라미터를 조정하고 충분히 검증하는 것이다.
이 전략은 다음과 같은 차원에서 계속 최적화될 수 있습니다.
더 많은 변수 조합을 테스트하여 최적의 변수를 찾습니다.
다른 기술 지표와 함께 급격한 움직임을 피하는 신호 오류
손해 방지 전략을 강화하고 손실 위험을 통제하고 자금을 보호하십시오.
포지션 관리 모듈을 추가하여 시장 상황에 따라 포지션 크기를 조정합니다.
자기 적응형 선형 회귀 통로 전략은 전체적으로 효과가 좋은 양적 전략이다. 이론적 기반이 튼튼하고, 실무 효과도 좋으며, 추가 연구 및 최적화를 할 가치가 있으며, 양적 거래 시스템의 효과적인 구성 요소가 될 수 있다. 그러나 또한 그 한계를 인식하고, 위험을 예방하고, 신중하게 실천할 필요가 있다.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Stealthy 7 Linear Regression Channel Strategy", overlay=true)
source = open
length = input(100, minval=1)
mult1 = input(1, minval=0.001, maxval=50)
mult2 = input(1, minval=0.001, maxval=50)
DayTrader = input(title="Range Mode", type=bool, defval=false)
//Making the first least squares line
sum_x = length * (length + 1) / 2
sum_y = 0
sum_xy = 0
xyproductsum = 0
sum_xx = 0
for i = 1 to length
sum_y := sum_y + close[i]
sum_xy := i * close[i] + sum_xy
sum_xx := i * i + sum_xx
m = (length*sum_xy - (sum_x * sum_y)) / (length * sum_xx - (sum_x * sum_x))
b = sum_y / length - (m * sum_x / length)
//Finding the first standard deviation from the line
difference = 0
for i = 1 to length
y = i * m + b
difference := pow(abs(close[i] - y),2) + difference
STDDEV = sqrt(difference / length)
//Creating trading zones
dev = mult1 * STDDEV
dev2 = mult2 * STDDEV
upper = b + dev
lower = b - dev2
middle = b
if DayTrader == false
if crossover(source, upper)
strategy.entry("RGLONG", strategy.long, oca_name="RegChannel", comment="RegLong")
else
strategy.cancel(id="RGLONG")
if crossunder(source, lower)
strategy.entry("RGSHORT", strategy.short, oca_name="RegChannel", comment="RegShort")
else
strategy.cancel(id="RGSHORT")
if crossover(source, middle) and strategy.position_size < 0
strategy.close_all()
if crossunder(source,middle) and strategy.position_size > 0
strategy.close_all()
if DayTrader == true
if crossover(source, lower)
strategy.entry("RGLONG", strategy.long, oca_name="RegChannel", comment="RegLong")
else
strategy.cancel(id="RGLONG")
if crossunder(source, upper)
strategy.entry("RGSHORT", strategy.short, oca_name="RegChannel", comment="RegShort")
else
strategy.cancel(id="RGSHORT")
plot(upper, title="UpperBand", color=purple, linewidth=1, style=line)
plot(lower, title="LowerBand", color=purple, linewidth=1, style=line)
plot(middle, title="MiddleBand", color=black, linewidth=1, style=line)