리소스 로딩... 로딩...

표준화 된 로그아리듬 수익에 기초한 적응적 동적 거래 전략

저자:차오장, 날짜: 2024-12-27 14:39:32
태그:SZISMA로그성병

img

전반적인 설명

이 전략은 Shiryaev-Zhou Index (SZI) 를 기반으로 한 적응형 거래 시스템이다. 이 전략은 평균 회귀 기회를 포착하는 것을 목표로 로그아리듬 수익률의 표준화된 점수를 계산하여 과반 구매 및 과반 판매 시장 조건을 식별합니다. 이 전략은 정확한 위험 통제를 위해 동적 스톱 로스 및 영업 목표를 통합합니다.

전략 원칙

전략의 핵심은 로그아리듬적 수익의 롤링 통계적 특성을 사용하여 표준화된 지표를 구성하는 데 있습니다. 구체적인 단계는 다음과 같습니다.

  1. 정규화를 위한 로그리즘 반환을 계산합니다
  2. 롤링 평균과 표준편차를 계산하기 위해 50주기 창을 사용
  3. SZI를 구성합니다: (로그리듬 회귀 - 롤링 평균) / 롤링 표준 오차
  4. SZI가 -2.0 이하로 떨어지면 긴 신호를 생성하고 2.0 이상의 경우 짧은 신호를 생성합니다.
  5. 엔트리 가격에 기초하여 2%의 스톱 로스 및 4%의 영업률을 설정합니다.

전략적 장점

  1. 탄탄한 이론적 기초: 강력한 통계적 근거를 가진 로그-노멀 분포 가정에 기초
  2. 높은 적응력: 유동 창 계산은 시장 변동성 특성의 변화에 적응합니다.
  3. 포괄적 리스크 제어: 비율 기반의 스톱 로스 전략은 각 거래에 대한 정확한 리스크 통제를 가능하게 합니다.
  4. 사용자 친화적 인 시각화: 차트에서 거래 신호 및 위험 제어 레벨의 명확한 주석

전략 위험

  1. 매개 변수 민감도: 유동 창 길이와 임계값 선택에 의해 전략 성능이 크게 영향을 받는다.
  2. 시장 환경 의존성: 트렌딩 시장에서 빈번한 잘못된 신호를 생성 할 수 있습니다.
  3. 미끄러짐 효과: 변동성 기간 동안 실제 실행 가격은 이상 수준에서 크게 벗어날 수 있습니다.
  4. 계산 지연: 통계 지표의 실시간 계산은 신호 지연으로 이어질 수 있습니다.

최적화 방향

  1. 동적 임계: 시장 변동성에 따라 신호 임계치를 조정하는 것을 고려하십시오.
  2. 여러 시간 프레임: 여러 시간 프레임에 신호 확인 메커니즘을 도입
  3. 변동성 필터링: 극심한 변동성 기간 동안 거래를 중단하거나 포지션을 조정합니다.
  4. 신호 확인: 신호 확인을 위해 부피, 운동량 및 기타 보조 지표를 추가합니다.
  5. 포지션 관리: 변동성 기반의 동적 포지션 크기를 구현

요약

이것은 견고한 통계적 기초에 기반을 둔 양적 거래 전략이며, 표준화 된 로가리듬 수익을 통해 가격 변동 가능성을 포착합니다. 전략의 주요 장점은 적응력과 포괄적인 위험 통제에 있습니다. 그러나 매개 변수 선택 및 시장 환경 적응에 최적화 할 여지가 남아 있습니다. 동적 임계 및 다차원 신호 확인 메커니즘을 도입함으로써 전략의 안정성과 신뢰성이 더욱 향상 될 수 있습니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Jalambi Paul model", overlay=true)

// Define the length for the rolling window
window = input.int(50, title="Window Length", minval=1)
threshold = 2.0 // Fixed threshold value
risk_percentage = input.float(1.0, title="Risk Percentage per Trade", step=0.1) / 100

// Calculate the logarithmic returns
log_return = math.log(close / close[1])

// Calculate the rolling mean and standard deviation
rolling_mean = ta.sma(log_return, window)
rolling_std = ta.stdev(log_return, window)

// Calculate the Shiryaev-Zhou Index (SZI)
SZI = (log_return - rolling_mean) / rolling_std

// Generate signals based on the fixed threshold
long_signal = SZI < -threshold
short_signal = SZI > threshold

// Plot the signals on the main chart (overlay on price)
plotshape(series=long_signal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY", offset=-1)
plotshape(series=short_signal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL", offset=-1)

// Strategy logic: Buy when SZI crosses below the negative threshold, Sell when it crosses above the positive threshold
if (long_signal)
    strategy.entry("Buy", strategy.long, comment="Long Entry")
    
if (short_signal)
    strategy.entry("Sell", strategy.short, comment="Short Entry")

// Calculate the stop loss and take profit levels based on the percentage of risk
stop_loss_pct = input.float(2.0, title="Stop Loss (%)") / 100
take_profit_pct = input.float(4.0, title="Take Profit (%)") / 100

// Set the stop loss and take profit levels based on the entry price
strategy.exit("Take Profit / Stop Loss", "Buy", stop=close * (1 - stop_loss_pct), limit=close * (1 + take_profit_pct))
strategy.exit("Take Profit / Stop Loss", "Sell", stop=close * (1 + stop_loss_pct), limit=close * (1 - take_profit_pct))

// Plot the stop loss and take profit levels for visualization (optional)
plot(stop_loss_pct != 0 ? close * (1 - stop_loss_pct) : na, color=color.red, linewidth=1, title="Stop Loss Level")
plot(take_profit_pct != 0 ? close * (1 + take_profit_pct) : na, color=color.green, linewidth=1, title="Take Profit Level")


관련

더 많은