길고 짧은 선형 회귀 교차 전략

저자:차오장, 2024-03-27 17:52:02
태그:

img

전반적인 설명

긴 단선 회귀 교차 전략 (Long-Short Linear Regression Crossover Strategy) 은 선형 회귀 모델을 사용하여 주식의 미래의 가격 움직임을 예측하는 기술 분석 전략이다. 전략의 기본 원리는 주식 가격 움직임이 종종 특정 선형 추세를 따르고 있으며 가격의 선형 회귀를 계산함으로써 미래의 가격을 예측할 수 있다. 예측된 가격이 현재 가격 이상으로 넘어가면 전략은 길게 이동하고, 아래로 넘어가면 위치에서 빠져 나간다.

전략 원칙

이 전략은 먼저 일정 기간 동안 주식 가격의 선형 회귀를 계산한다. 선형 회귀는 시간의 흐름에 따라 변화하는 가격의 경향을 나타내는 최소 제곱 방법을 사용하여 직선에 맞는다. 그 다음 전략은 예측된 가격 라인과 차트에 있는 현재 가격을 그래프로 나타낸다.

전략은 두 가지 신호를 정의합니다.

  1. 긴 신호: 예측된 가격이 현재 가격보다 높을 때 발생
  2. 단기 신호: 예측된 가격이 현재 가격 이하로 넘어갈 때 발생한다.

긴 신호가 나타나면 전략은 긴 포지션을 열고 짧은 신호가 나타나면 포지션을 닫습니다.

전략의 핵심 단계는 다음과 같습니다.

  1. 한 기간 동안 가격의 선형 회귀를 계산합니다.
  2. 예측 가격 라인과 차트에서 현재 가격을 그래프
  3. 긴 신호와 짧은 신호를 정의
  4. 긴 신호가 트리거되면 긴 포지션을 열고
  5. 짧은 신호가 발생하면 위치를 닫습니다.

이점 분석

긴 짧은 선형 회귀 크로스오버 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 간단하고 효과적: 전략의 논리는 명확하고 실행하기 쉽고 가격의 선형 추세를 파악 할 수 있습니다.
  2. 광범위한 적용 가능성: 전략은 트렌딩 및 범위 시장에서 거래 신호를 생성 할 수 있습니다.
  3. 강력한 최적화 가능성: 전략은 선형 회귀 기간, 이동 평균 등과 같은 몇 가지 주요 매개 변수를 포함하며 성능을 향상시키기 위해 최적화 할 수 있습니다.

위험 분석

많은 장점에도 불구하고, 긴 짧은 선형 회귀 교차 전략은 또한 몇 가지 위험을 가지고 있습니다:

  1. 트렌드 인식 위험: 가격 움직임이 범위 시장에서처럼 선형적인 추세를 따르지 않을 때 전략은 잘못된 신호를 생성 할 수 있습니다. MACD와 같은 다른 지표와 결합하여이 위험을 줄일 수 있습니다.
  2. 매개 변수 설정 위험: 전략의 성능은 매개 변수 설정에 민감하며 부적절한 매개 변수는 손실로 이어질 수 있습니다. 따라서 라이브 거래 전에 충분한 역 테스트 및 매개 변수 최적화가 필요합니다.
  3. 과도한 적합성 위험: 매개 변수가 과도하게 최적화되면 전략이 역사적 데이터에 과도하게 적합하고 미래에 성능이 떨어질 수 있습니다. 과도한 적합성을 방지하는 방법에는 간단하고 샘플 외부 테스트 등을 포함합니다.

최적화 방향

  1. 다른 지표와 결합: 선형 회귀 신호는 MACD, 볼링거 밴드 등과 같은 다른 기술적 지표와 결합하여 신호의 정확성을 향상시킬 수 있습니다.
  2. 동적 매개 변수 최적화: 매개 변수에 대한 적응 메커니즘은 시장 조건에 따라 매개 변수를 동적으로 조정하여 적응력을 향상시키기 위해 설계 될 수 있습니다.
  3. 리스크 제어 모듈을 추가합니다. 한 거래의 위험을 줄이고 누적 수익을 높이기 위해 스톱 로스 및 돈 관리와 같은 리스크 제어 조치를 전략에 포함합니다.
  4. 기계 학습 최적화: 기계 학습 알고리즘은 선형 회귀 모델을 지속적으로 최적화하여 예측이 더 정확하도록 사용할 수 있습니다.

요약

롱 쇼트 라인리어 레그레션 크로스오버 전략은 선형 회귀와 현재 가격의 예측 가격 비교를 기반으로 거래 신호를 생성합니다. 전략의 논리는 간단하고 명확하며 가격의 선형 트렌드를 파악하고 다양한 시장 조건에 적용 할 수 있습니다. 동시에 전략은 구현하고 최적화하기가 쉽고 매개 변수를 유연하게 조정하고 다른 지표와 결합하여 위험 제어 모듈을 추가 할 수 있습니다. 전략의 성능을 지속적으로 향상시키기 위해. 그러나 전략에는 추세 인식의 부정확, 부적 매개 변수 설정 및 역사적 데이터의 과잉과 같은 위험이 있으므로 실용적인 응용에서 주의가 필요합니다. 전반적으로, 롱 쇼트 라인리어 레그레션 크로스오버 전략은 추가 탐구 및 최적화에 가치가있는 간단하고 효과적인 수치적 거래 전략입니다.


/*backtest
start: 2024-02-25 00:00:00
end: 2024-03-26 00:00:00
period: 3h
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/
// © stocktechbot
//@version=5
strategy("Linear Cross", overlay=true, margin_long=100, margin_short=0)

//Linear Regression

vol = volume

// Function to calculate linear regression
linregs(y, x, len) =>
    ybar = math.sum(y, len)/len
    xbar = math.sum(x, len)/len
    b = math.sum((x - xbar)*(y - ybar),len)/math.sum((x - xbar)*(x - xbar),len)
    a = ybar - b*xbar
    [a, b]

// Historical stock price data
price = close

// Length of linear regression
len = input(defval = 21, title = 'Strategy Length')
linearlen=input(defval = 9, title = 'Linear Lookback')
[a, b] = linregs(price, vol, len)

// Calculate linear regression for stock price based on volume
//eps = request.earnings(syminfo.ticker, earnings.actual)
//MA For double confirmation

out = ta.sma(close, 200)
outf = ta.sma(close, 50)
outn = ta.sma(close, 90)
outt = ta.sma(close, 21)
outthree = ta.sma(close, 9)

// Predicted stock price based on volume
predicted_price = a + b*vol

// Check if predicted price is between open and close
is_between = open < predicted_price and predicted_price < close

//MACD
//[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)

// Plot predicted stock price
plot(predicted_price, color=color.rgb(65, 59, 150), linewidth=2, title="Predicted Price")
plot(ta.sma(predicted_price,linearlen), color=color.rgb(199, 43, 64), linewidth=2, title="MA Predicted Price")
//offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
plot(out, color=color.blue, title="MA200")
[macdLine, signalLine, histLine] = ta.macd(predicted_price, 12, 26, 9)

//BUY Signal

longCondition=false
mafentry =ta.sma(close, 50) > ta.sma(close, 90)
//matentry = ta.sma(close, 21) > ta.sma(close, 50)
matwohun = close > ta.sma(close, 200)
twohunraise = ta.rising(out, 2)
twentyrise = ta.rising(outt, 2)
macdrise = ta.rising(macdLine,2)
macdlong = ta.crossover(predicted_price, ta.wma(predicted_price,linearlen))  and (signalLine < macdLine)
if macdlong and macdrise
    longCondition := true

if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)
//Sell Signal
lastEntryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)
daysSinceEntry = len
daysSinceEntry := int((time - strategy.opentrades.entry_time(strategy.opentrades - 1)) / (24 * 60 * 60 * 1000))
percentageChange = (close - lastEntryPrice) / lastEntryPrice * 100
//trailChange = (ta.highest(close,daysSinceEntry) - close) / close * 100

//label.new(bar_index, high, color=color.black, textcolor=color.white,text=str.tostring(int(trailChange)))
shortCondition=false
mafexit =ta.sma(close, 50) < ta.sma(close, 90)
matexit = ta.sma(close, 21) < ta.sma(close, 50)
matwohund = close < ta.sma(close, 200)
twohunfall = ta.falling(out, 3)
twentyfall = ta.falling(outt, 2)
shortmafall = ta.falling(outthree, 1)
macdfall = ta.falling(macdLine,1)
macdsell = macdLine < signalLine
if macdfall and macdsell and (macdLine < signalLine) and ta.falling(low,2)
    shortCondition := true

if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)




더 많은