선형 회귀 및 이동 평균에 기초한 회귀 거래 전략을 따르는 경향

저자:차오장, 날짜: 2023-12-18 17:34:29
태그:

img

전반적인 설명

이 전략은 선형 회귀선과 이동 평균선을 기반으로 간단한 트렌드를 따라 거래 시스템을 설계합니다. 선형 회귀선이 이동 평균 위에 넘어가면 길게 가고 선형 회귀선이 아래에 넘어가면 짧게됩니다. 한편, 회귀선의 기울기를 사용하여 일부 거래 신호를 필터하고 트렌드 방향이 일치 할 때만 입력합니다.

전략 이름

회귀 거래 전략의 추세

전략 원칙

이 전략의 주요 구성 요소는 다음과 같습니다.

  1. N-day 단순 이동 평균 (SMA) 을 계산합니다.
  2. 최근 N일 간 선형 회귀선을 계산합니다.
  3. 닫기 가격이 SMA를 넘고 회귀선을 넘을 때 길게 가십시오.
  4. 마감 가격이 SMA 아래를 넘어서 회귀선을 넘으면 단축
  5. 스톱 로스 가격을 설정하고 이윤을 취합니다.

선형 회귀선은 최근 기간에 트렌드 방향에 잘 맞을 수 있습니다. 전체 트렌드 방향을 판단하는 데 도움이 될 수 있습니다. 가격이 SMA 라인을 통과 할 때 선형 회귀선의 방향이이이이 브레이크와 일치하는지 여부를 추가로 결정해야합니다. 두 방향이 일치 할 때만 거래 신호가 생성됩니다. 이것은 일부 잘못된 브레이크를 필터링 할 수 있습니다.

또한, 전략은 또한 스톱 로스 메커니즘을 설정합니다. 가격이 스톱 로스 라인에 도달하면, 스톱 로스를 위해 포지션을 닫습니다. 또한 일부 이익을 잠금하기 위해 이윤 라인을 설정합니다.

전략 의 장점

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 트렌드 지표와 브레이크오웃 지표를 결합하여 가짜 브레이크오웃을 피하고 신호 품질을 향상시킵니다.
  2. 트렌드 필터링을 위해 트렌드 방향을 결정하기 위해 선형 회귀를 사용하십시오. 상승 트렌드에서 길고 하락 트렌드에서 짧습니다.
  3. 스톱 로스를 설정하고 리스크를 제어하기 위해 이윤을 취합니다.
  4. 명확하고 이해하기 쉬운 규칙
  5. 너무 복잡하지 않고 조정할 수 있는 몇 가지 매개 변수만

위험 분석

이 전략은 또한 몇 가지 위험을 안고 있습니다.

  1. 범위에 묶인 시장에서 더 많은 잘못된 거래 신호가 생성 될 수 있습니다.
  2. 이동 평균 및 회귀 기간의 설정은 광범위한 테스트와 최적화가 필요합니다. 잘못된 설정은 전략 성능에 영향을 줄 수 있습니다.
  3. 극심한 시장 조건에서 큰 손실을 초래하는 Stop Loss가 깨질 수 있습니다.
  4. 기본 요인을 결합하지 않고 기술 지표에만 기초한 것

이러한 위험에 관해서는 다음과 같은 측면에서 최적화 할 수 있습니다.

  1. 전략 중단 또는 다른 지표를 사용하여 범주 시장에서 필터링을 고려하십시오.
  2. 최적의 매개 변수를 찾기 위해 광범위하게 테스트
  3. 스톱 손실 위치를 최적화하고 동적으로 조정합니다.
  4. 경제 데이터와 다른 근본적인 요소를 결합

최적화 방향

전략의 최적화를 위한 주요 측면은 다음과 같습니다.

  1. 다른 보조 지표를 추가하여 시장 조건을 판단하고 범위 기간에 거래하는 것을 피합니다.
  2. 두 개의 이동 평균, 세 개의 이동 평균 등과 같은 이동 평균 유형을 최적화하십시오.
  3. 더 이상 회귀 선의 기울기를 분석하고 기울기 판단 규칙을 추가
  4. 역동적 스톱 로스 및 수익 수치를 설정하기 위해 변동성 지표를 포함
  5. 자동으로 매개 변수를 최적화하기 위해 기계 학습 방법을 활용

결론

이 전략은 유동 평균의 트렌드 다음 기능과 선형 회귀의 트렌드 판단 능력을 통합하여 비교적 간단한 트렌드 다음 거래 시스템을 형성합니다. 강력한 트렌드 시장에서 좋은 결과를 얻을 수 있습니다. 우리는 여전히 매개 변수 및 규칙에 대한 광범위한 백테스트 및 최적화 및 적절한 위험 통제가 필요합니다. 그러면이 전략은 안정적인 투자 수익을 얻을 수 있어야합니다.


/*backtest
start: 2023-11-17 00:00:00
end: 2023-12-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Regression Trading Strategy", shorttitle="RTS", overlay=true)

// Input parameters
n = input(14, title="SMA Period")
stop_loss_percentage = input(2, title="Stop Loss Percentage")
take_profit_percentage = input(2, title="Take Profit Percentage")

// Calculate the SMA
sma = sma(close, n)

// Linear regression function
linear_regression(src, length) =>
    sumX = 0.0
    sumY = 0.0
    sumXY = 0.0
    sumX2 = 0.0
    for i = 0 to length - 1
        sumX := sumX + i
        sumY := sumY + src[i]
        sumXY := sumXY + i * src[i]
        sumX2 := sumX2 + i * i
    slope = (length * sumXY - sumX * sumY) / (length * sumX2 - sumX * sumX)
    intercept = (sumY - slope * sumX) / length
    line = slope * length + intercept
    line

// Calculate the linear regression
regression_line = linear_regression(close, n)

// Plot the SMA and regression line
plot(sma, title="SMA", color=color.blue)
plot(regression_line, title="Regression Line", color=color.red)

// Trading strategy conditions
long_condition = crossover(close, sma) and close > regression_line
short_condition = crossunder(close, sma) and close < regression_line

// Exit conditions
stop_loss_price = close * (1 - stop_loss_percentage / 100)
take_profit_price = close * (1 + take_profit_percentage / 100)

// Plot entry and exit points on the chart
plotshape(series=long_condition, title="Long Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=short_condition, title="Short Entry", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
plotshape(series=crossunder(close, stop_loss_price), title="Stop Loss", location=location.abovebar, color=color.red, style=shape.labeldown, text="SL")
plotshape(series=crossover(close, take_profit_price), title="Take Profit", location=location.belowbar, color=color.green, style=shape.labelup, text="TP")

// Strategy orders
strategy.entry("Long", strategy.long, when = long_condition)
strategy.entry("Short", strategy.short, when = short_condition)
strategy.exit("Exit", from_entry = "Long", when = crossover(close, stop_loss_price) or crossover(close, take_profit_price))
strategy.exit("Exit", from_entry = "Short", when = crossunder(close, stop_loss_price) or crossunder(close, take_profit_price))



더 많은