동적 산타클로스 회귀 전략 (Dynamic Santa Claus Regression Strategy) 은 가격과 바 인덱스 사이의 동적 회귀 관계를 기반으로 잠재적 진입 및 출구 지점을 식별하는 양적 거래 전략이다. 이 전략은 가격의 회귀 트렌드 라인을 그리기 위해 동적으로 조정 가능한 이동 평균 매개 변수를 사용합니다. 회귀 라인의 방향을 분석하여 입출 여부를 결정합니다.
이 전략의 핵심은 가격과 바 인덱스 사이의 선형 회귀 관계를 계산하는 것입니다. 먼저 간단한 이동 평균과 길이 N의 표준편차를 계산합니다. 다음 샘플 상관 계수와 표준편차 비율을 기반으로 회귀 선의 기울기 k와 절단 b를 얻습니다. 이것은 동적으로 조정 된 선형 회귀 방정식을 생성합니다:
y = kx + b
x는 바 인덱스이고 y는 가격입니다.
회귀선의 현재와 이전 값 사이의 크기 관계에 따라 트렌드 방향이 결정됩니다. 회귀선이 상승하고 닫기 가격이 열기 가격과 이전 순간의 가장 높은 가격보다 높으면 구매 신호가 생성됩니다. 회귀선이 떨어지고 닫기 가격이 열기 가격과 이전 순간의 가장 낮은 가격보다 낮으면 판매 신호가 생성됩니다.
부적절한 N 값 설정으로 회귀 선이 너무 부드럽거나 민감해질 수 있습니다.
단기 가격 변동성, 회귀 관계 판단 실패
반지 비율은 시간 중 한 지점을만 고려하고 지역 극한을 놓칠 수 있습니다.
동적 산타클로스 회귀 전략은 유연하고 직관적이고 조정 가능한 양적 거래 시스템을 구현하기 위해 가격과 시간 사이의 동적 회귀 관계를 활용합니다. 이 전략의 논리는 명확하고 이해하기 쉽습니다. 매개 변수 최적화를 통해 다른 거래 제품과 주기에 적용 할 수 있습니다. 이 전략의 혁신은 동적 모델을 구축하기 위해 시간 요인을 도입하여 판단을 더 트렌딩으로 만듭니다. 요약하면이 전략은 양적 거래에 유용한 샘플을 제공합니다.
/*backtest start: 2023-01-05 00:00:00 end: 2024-01-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // Creator - TradeAI strategy('Moving Santa Claus Strategy | TradeAI', overlay=true) // Set the length of the moving average length = input(64) // Calculate the moving averages and standard deviations x = bar_index y = close x_ = ta.sma(x, length) y_ = ta.sma(y, length) mx = ta.stdev(x, length) my = ta.stdev(y, length) c = ta.correlation(x, y, length) slope = c * (my / mx) // Calculate the parameters of the regression line inter = y_ - slope * x_ reg = x * slope + inter // Set the line color based on whether EMA is moving up or down var color lineColor = na if (reg > reg[1] and (close > open and close > high[1])) lineColor := color.new(#d8f7ff, 0) if (reg < reg[1] and (close < open and close < low[1])) lineColor := color.new(#ff383b, 0) // Plot the EMA line with different thicknesses plot(reg, color=lineColor, title="EMA") var color lineColorrr = na if (reg > reg[1] and (close > open and close > high[1])) lineColorrr := color.new(#d8f7ff, 77) if (reg < reg[1] and (close < open and close < low[1])) lineColorrr := color.new(#ff383b, 77) plot(reg, color=lineColorrr, title="EMA", linewidth=5) var color lineColorr = na if (reg > reg[1] and (close > open and close > high[1])) lineColorr := color.new(#d8f7ff, 93) if (reg < reg[1] and (close < open and close < low[1])) lineColorr := color.new(#ff383b, 93) plot(reg, color=lineColorr, title="EMA", linewidth=10) var color lineColorrrr = na if (reg > reg[1] and (close > open and close > high[1])) lineColorrrr := color.new(#d8f7ff, 97) if (reg < reg[1] and (close < open and close < low[1])) lineColorrrr := color.new(#ff383b, 97) plot(reg, color=lineColorr, title="EMA", linewidth=15) var color lineColorrrrr = na if (reg > reg[1] and (close > open and close > high[1])) lineColorrrrr := color.new(#d8f7ff, 99) if (reg < reg[1] and (close < open and close < low[1])) lineColorrrrr := color.new(#ff383b, 99) plot(reg, color=lineColorr, title="EMA", linewidth=20) // Implement trading strategy based on EMA direction if reg > reg[1] and (close > open and close > high[1]) strategy.entry('buy', strategy.long) if reg < reg[1] and (close < open and close < low[1]) strategy.close('buy')