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

저자:차오장, 날짜: 2024-01-26 12:33:14
태그:

img

전반적인 설명

이 전략은 선형 회귀 지표와 이중 기하급수적 이동 평균을 결합하여 단기 추적 작업을 구현합니다. 이 전략은 가격이 상위 및 하위 레일을 통과 할 때 짧은 포지션을 설정하고 가격이 다시 통과 할 때 포지션을 닫습니다. 동시에이 전략은 포지션을 설정하는 보조 조건으로 가격 추세를 결정하기 위해 이중 기하급수적 이동 평균을 사용합니다.

전략 원칙

이 전략은 주로 선형 회귀 지표를 사용하여 가격 브레이크오프를 결정합니다. 선형 회귀 지표는 선형 회귀를 사용하여 일정 기간 동안 최고 및 최저 가격을 기반으로 계산하여 상위 및 하위 레일을 얻습니다. 가격이 상위 레일에서 깨지거나 하위 레일에서 깨지면 거래 신호라고 생각합니다.

또한 이 전략은 중간 트렌드를 결정하기 위해 이중 기하급수적인 이동 평균을 도입하기도 한다. 이중 기하급수적 이동 평균은 가격 변화에 더 빠르게 반응할 수 있다. 가격이 상부 레일에서 떨어지면 이중 기하급수적 이동 평균이 현재 가격보다 이미 높으면 현재 하향 트렌드에 있음을 나타낸다. 우리는 단위 포지션을 설정할 것이다. 가격이 다시 상부 레일을 뚫거나 이중 기하급수적 이동 평균을 뚫을 때 우리는 포지션을 평평하게 할 것이다.

특히 전략의 주요 내용은 다음과 같습니다.

  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))


더 많은