Z-점수 정규화에 기반한 선형 신호 양적 거래 전략

RSI SMA Z-SCORE LSB TP SL
생성 날짜: 2025-01-06 16:14:07 마지막으로 수정됨: 2025-01-06 16:14:07
복사: 6 클릭수: 437
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

Z-점수 정규화에 기반한 선형 신호 양적 거래 전략

개요

이 전략은 선형 신호와 Z-점수 정규화를 기반으로 한 양적 거래 시스템입니다. RSI 등의 외생적 변수를 가격 데이터와 결합하여 표준화된 거래 신호를 구성하고 임계값을 사용하여 거래를 트리거합니다. 이 전략은 일중 거래와 고빈도 거래 시나리오에 적합하며 강력한 적응성과 구성 가능성을 가지고 있습니다.

전략 원칙

전략의 핵심 원칙에는 다음과 같은 주요 단계가 포함됩니다.

  1. 선형 신호 구성: RSI 지표는 구성 가능한 가중치(signal_alpha)를 사용하여 가격 데이터와 선형적으로 결합되어 초기 신호를 형성합니다.
  2. Z-점수 정규화: 설정된 룩백 기간(lookback_period)에 따라 선형 신호의 평균과 표준 편차를 계산하고, 신호를 Z-점수 형태로 정규화합니다.
  3. 임계값 트리거 메커니즘: Z 점수가 음수 임계값보다 낮으면 롱 포지션이 열리고, 양수 임계값보다 높으면 숏 포지션이 열립니다. 임계값은 위험 조정 계수(risk_adjustment_factor)에 의해 제어됩니다.
  4. 위험 관리: 각 거래에 대한 이익 실현 및 손절매를 설정하고, 백분율 매개변수를 통해 위험-수익 비율을 유연하게 조정합니다.

전략적 이점

  1. 신호 정규화: Z-점수 변환은 신호에 좋은 통계적 속성을 부여하여 범용 임계값을 설정하기 쉽게 만듭니다.
  2. 강력한 유연성: 외생 변수와 가격의 영향은 signal_alpha를 조정하여 균형을 이룰 수 있습니다.
  3. 제어 가능한 위험: 시장 특성에 따라 유연하게 구성 가능한 완전한 손절매 및 손절매 메커니즘을 갖추고 있습니다.
  4. 우수한 적응성: 여러 기간에 적용 가능하며 유동성이 높은 다른 거래 상품으로 확장 가능합니다.

전략적 위험

  1. 매개변수 민감도: 전략 성과는 매개변수 선택에 민감하며 충분한 백테스팅과 검증이 필요합니다.
  2. 시장 환경에 따른 의존성: 변동성이 크고 추세가 약한 시장에서는 거래가 빈번하게 발생할 수 있습니다.
  3. 신호 지연: 이동평균 계산으로 인해 발생하는 지연은 진입 시점에 영향을 미칠 수 있습니다.
  4. 유동성 위험: 고빈도 거래는 유동성이 부족할 경우 슬리피지 손실에 직면할 수 있습니다.

전략 최적화 방향

  1. 동적 매개변수 조정: 시장 변동성에 따라 임계값과 손절매 포지션을 동적으로 조정하는 적응형 메커니즘을 도입합니다.
  2. 다중 신호 확인: 신호 신뢰도를 높이기 위해 다른 기술 지표를 필터링 조건으로 추가합니다.
  3. 위치 관리 최적화: 변동성과 신호 강도를 기반으로 동적 위치 관리 시스템을 설계합니다.
  4. 거래비용 관리: 포지션 개시 및 청산 로직을 최적화하여 빈번한 거래로 인한 비용 손실을 줄입니다.

요약하다

이는 명확한 구조와 엄격한 논리를 갖춘 양적 거래 전략입니다. 강력한 거래 신호 시스템은 선형 결합과 표준화 처리를 통해 구성됩니다. 이 전략은 구성 가능성이 매우 높고 위험 관리가 완벽하지만, 매개변수 최적화와 시장 적응성에 주의해야 합니다. 전략의 안정성과 수익성은 추천된 최적화 방향을 통해 더욱 개선될 수 있습니다.

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

//@version=5
strategy("Linear Signal-Based Strategy", shorttitle = "LSB_V1", overlay=true)

// Inputs
lookback_period = input.int(14, title="Lookback Period for Moving Averages")
signal_alpha = input.float(0.5, title="Signal Weight Alpha (Exogenous Variable)")
take_profit_percent = input.float(0.02, title="Take Profit (%)")
stop_loss_percent = input.float(0.01, title="Stop Loss (%)")
risk_adjustment_factor = input.float(1.5, title="Risk Adjustment Factor")

// Fetch Exogenous Variable (Example: RSI as a Proxy)
rsi_value = ta.rsi(close, lookback_period)

// Linear Signal Calculation
linear_signal = signal_alpha * rsi_value + (1 - signal_alpha) * close

// Z-Score Normalization for Signal
mean_signal = ta.sma(linear_signal, lookback_period)
stddev_signal = ta.stdev(linear_signal, lookback_period)
z_score_signal = (linear_signal - mean_signal) / stddev_signal

// Entry Conditions
long_condition = z_score_signal < -risk_adjustment_factor
short_condition = z_score_signal > risk_adjustment_factor

// Risk Management
long_take_profit = close * (1 + take_profit_percent)
long_stop_loss = close * (1 - stop_loss_percent)
short_take_profit = close * (1 - take_profit_percent)
short_stop_loss = close * (1 + stop_loss_percent)

// Execute Trades
if (long_condition)
    strategy.entry("Long", strategy.long, qty=1)
    strategy.exit("Exit Long", "Long", stop=long_stop_loss, limit=long_take_profit)

if (short_condition)
    strategy.entry("Short", strategy.short, qty=1)
    strategy.exit("Exit Short", "Short", stop=short_stop_loss, limit=short_take_profit)