선형 회귀와 이중 이동 평균 단기 전략


생성 날짜: 2024-01-26 12:33:14 마지막으로 수정됨: 2024-01-26 12:33:14
복사: 0 클릭수: 689
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

선형 회귀와 이중 이동 평균 단기 전략

개요

이 전략은 선형 회귀 지표와 쌍 지수 이동 평균을 결합하여 단선 추적 동작을 구현한다. 이 전략은 가격 돌파구가 상하로 갈 때 포지션을 공백하고, 가격이 다시 돌파구가 될 때 평소 포지션을 기반으로 한다. 동시에, 이 전략은 쌍 지수 이동 평균을 사용하여 가격 경향을 판단하여 포지션을 구축하는 보조 조건으로 한다.

전략 원칙

이 전략은 주로 선형 회귀 지표를 통해 가격의 돌파구를 판단한다. 선형 회귀 지표는 선형 회귀법을 사용하여 일정 주기 동안의 최고 가격과 최저 가격에 따라 계산된 상하 궤도이다. 가격이 상하 궤도에서 또는 하하 궤도에서 돌파 할 때, 우리는 거래 신호라고 생각합니다.

또한, 이 전략은 쌍 지수 이동 평균 판단 중간 트렌드를 도입한다. 쌍 지수 이동 평균은 가격 변화에 더 빨리 반응 할 수 있다. 가격이 상반에서 하향으로 이동하면 쌍 지수 이동 평균이 이미 가격 위에 있다면, 현재 하향 추세에 있음을 나타냅니다. 이 때 우리는 포지션을 설정한다. 가격이 다시 상향 궤도를 돌파하거나 쌍 지수 이동 평균을 돌파 할 때, 우리는 포지션을 평정한다.

특히, 전략은 다음과 같은 요점을 포함합니다.

  1. 선형 회귀를 계산하기
  2. 이중 지수 이동 평균을 계산합니다.
  3. 가격이 위쪽에서 아래로 뚫리고, 이중 지수 이동 평균이 가격보다 높을 때, 코어 포지션을 설정
  4. 가격이 다시 상위 궤도를 돌파하거나 이중 지수 이동 평균보다 높을 때 공백 포지션을 평행합니다.

우위 분석

전통적인 이동 평균과 같은 지표에 비해 이 전략은 다음과 같은 장점이 있습니다.

  1. 선형 회귀 지표는 가격 변화를 더 빨리 포착하고, 창고 구축 신호로 더 효과적입니다.
  2. 트렌드를 판단하는 데 더 민감한 이중 지수 이동 평균은 가짜 돌파구를 피할 수 있습니다.
  3. 이중 지표와 조건으로 인해 약간의 잡음이 제거되고 거래가 안정화됩니다.

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 선형 회귀 지표는 매개 변수에 민감하며, 다른 주기에는 다른 결과가 발생할 수 있습니다.
  2. 이중 지수 이동 평균은 오차가 발생할 수 있으며 판단 오류가 발생할 수 있습니다.
  3. 브레이크 클래스 전략은 슬라이드 포인트 위험을 증가시킬 수 있습니다.
  4. 위기 상황에서 빈번하게 상장할 수 있다.

위와 같은 위험은 변수 최적화, 엄격한 손해, 적절한 침입 폭 완화 등의 방법으로 해결할 수 있습니다.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 선형 회귀 주기와 이중 지수 이동 평균 주기를 최적화하여 최적의 변수 조합을 찾습니다.
  2. 가격 변동의 크기를 판단하여 미세한 가격 돌파구가 잘못된 신호를 유발하지 않도록하십시오.
  3. 거래량을 늘리는 것과 같은 보조 조건으로 돌파구 효과를 보장합니다.
  4. 단위 손실을 줄이기 위해 스톱 라인을 설정합니다.
  5. 특정 품종에 대한 조정 변수

요약하다

이 전략은 선형 회귀 지표와 이중 지수 이동 평균을 통합하여 이론과 실무에서 어느 정도 장점이 있다. 지속적인 최적화 조정으로 안정성과 전략 효과를 더욱 향상시킬 수 있다. 이 전략은 짧은 선의 연산에 적합하며, 양자 거래자에게 좋은 알파를 가져올 수 있다.

전략 소스 코드
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy('LR&SSL_Short', overlay=true)
startP = timestamp(input(2017, "Start Year"), input(12, "Month"), input(17, "Day"), 0, 0)
end   = timestamp(9999,1,1,0,0)
_testPeriod() => true

len = input(title="Period", defval=89)
smaHigh = linreg(high, len, 0)
smaLow = linreg(low, len, -1)
Hlv = 0.0
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh

plot(sslDown, linewidth=2, color=color.red)
plot(sslUp, linewidth=2, color=color.lime)



length = input(200, title="DEMA") 
d1 = ema(close, length)                                               
d2 = 2 * d1 - ema(d1, length)                                         
trendColour = d2 > d1 ? #AAFFAA : #FFAAAA 
dema=sma(d2,length) 

turnGreen = d2 > d1 and d2[1] <= d1[1]  
turnRed   = d2 <= d1 and d2[1] > d1[1]  

up =turnGreen 
down=turnRed 
  
plotshape(down, title="down", style=shape.triangledown,location=location.abovebar, color=color.red, transp=0, size=size.small) 
plotshape(up,  title="up", style=shape.triangleup,location=location.belowbar, color=color.green, transp=0, size=size.small) 
plot(dema, color = trendColour,linewidth=3 ,transp = 0)
bgcolor(close > dema ? color.green : color.red)

strategy.entry("short", strategy.short, when= crossunder(sslUp, sslDown) and dema > close and _testPeriod())
strategy.close("short", when = crossover(sslUp, sslDown) or crossover(close, dema))