다중 주파수 모멘텀 반전 정량적 전략 시스템


생성 날짜: 2024-11-29 14:47:54 마지막으로 수정됨: 2024-11-29 14:47:54
복사: 0 클릭수: 377
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

다중 주파수 모멘텀 반전 정량적 전략 시스템

개요

이 전략은 시장의 연속적인 운동 특성에 기반한 양적 거래 시스템으로, 가격이 연속적으로 상승하거나 하락하는 빈도를 분석하여 시장 역전 기회를 포착한다. 전략의 핵심은 연속적으로 상승하거나 하락하는 하락값을 설정하고, 하락값이 도달했을 때 역전 작업을 수행하며, 포지션 보유 시간 및 K선 형태와 같은 다차원 지표와 결합하여 거래 결정을 내린다. 이 전략은 시장의 역전 특성을 최대한 활용하여 가격 오버 바이 또는 오버 셀 특성이있는 경우 역전 작업을 수행한다.

전략 원칙

전략의 핵심 논리에는 다음과 같은 핵심 요소가 포함됩니다.

  1. 연속률 통계: 시스템은 가격의 연속 상승과 하락을 실시간으로 통계하고, 예상 하락과 비교한다.
  2. 거래 방향 선택: 두 가지 방향으로 더 많이 또는 공백을 선택할 수 있습니다. 더 많이 할 때 연속적인 하락을 주목하고, 공백을 할 때 연속적인 상승을 주목하십시오.
  3. 포지션 주기 관리: 고정 포지션 주기 설정, 만료 자동 평지 포지션, 과도한 포지션을 피한다.
  4. 십자별 필터링: 십자별 판단을 도입하여 시장의 흔들림 동안의 가짜 신호를 필터링한다.
  5. 포지션 제어: 단일 포지션을 사용하여 거래하고, 포지션을 추가하거나 포지션을 세분화하지 않습니다.

전략적 이점

  1. 논리 명확성: 전략의 거래 논리는 직관적이고, 이해하기 쉽고, 실행하기 쉽다.
  2. 위험 조절: 고정 지분 기간과 단일 지점을 통해 위험을 제어한다.
  3. 적응력: 시장 특성에 따라 변수를 조정할 수 있다.
  4. 자동화 수준: 전체 프로세스는 시스템으로 자동으로 수행되며, 인간의 개입이 줄어들었다.
  5. 다차원 분석: 가격 트렌드, K선 형태 등 여러 차원을 결합한다.

전략적 위험

  1. 추세 연장 위험: 강한 추세 시장에서 잘못된 판단이 발생할 수 있습니다.
  2. 매개 변수 감수성: 경량과 지분 기간의 설정은 전략의 성과에 직접적인 영향을 준다.
  3. 시장 환경 의존성: 불안정한 시장에서 좋은 성과를 거두지만, 일방적인 시장에서는 자주 손실이 발생할 수 있다.
  4. 슬라이포인트 효과: 하이프렌크 트레이딩은 슬라이포인트에 영향을 받을 수 있다.
  5. 비용 압박: 자주 거래하는 것은 높은 거래 비용을 초래한다.

전략 최적화 방향

  1. 변동률 지표를 도입: ATR과 같은 지표를 통해 임계값 설정을 조정한다.
  2. 트렌드 필터를 추가: 장기주기 트렌드 판단과 결합하여 승률을 높인다.
  3. 동적인 포지션 유지 주기: 시장 특성에 따라 포지션 유지 시간을 조정한다.
  4. 포지션 관리 최적화: 동적 포지션 관리 메커니즘 도입.
  5. 다중 시간 주기 분석: 다중 주기 신호 확인 메커니즘을 추가한다.

요약하다

이 전략은 시장 역전 특성에 기반한 정량 거래 시스템으로, 가격의 연속적인 움직임을 분석하여 시장 역전 기회를 포착한다. 전략은 합리적으로 설계되어 있으며, 위험을 통제할 수 있지만, 시장 환경에 따라 매개 변수를 조정해야 한다. 지속적인 최적화와 개선을 통해 전략은 실제 거래에서 안정적인 수익을 얻을 수 있다.

전략 소스 코드
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Streak-Based Trading Strategy", overlay=true)

// User Inputs
trade_direction = input.string(title="Trade Direction", defval="Long", options=["Long", "Short"]) // Option to choose Long or Short
streak_threshold = input.int(title="Streak Threshold", defval=8, minval=1) // Input for number of streaks before trade
hold_duration = input.int(title="Hold Duration (in periods)", defval=7, minval=1) // Input for holding the position
doji_threshold = input.float(0.01, title="Doji Threshold (%)", minval=0.001) / 100 // Doji sensitivity

// Calculate win or loss streak
is_doji = math.abs(close - open) / (high - low) < doji_threshold
win = close > close[1] and not is_doji
loss = close < close[1] and not is_doji

// Initialize variables for streak counting
var int win_streak = 0
var int loss_streak = 0
var bool in_position = false
var int hold_counter = 0

// Track streaks (only when not in a position)
if not in_position
    if win
        win_streak += 1
        loss_streak := 0
    else if loss
        loss_streak += 1
        win_streak := 0
    else
        win_streak := 0
        loss_streak := 0

// Logic for closing the position after the holding duration
if in_position
    hold_counter -= 1
    if hold_counter <= 0
        strategy.close_all() // Close all positions
        in_position := false // Reset position flag
        win_streak := 0 // Reset streaks after position is closed
        loss_streak := 0

// Trade condition (only when no position is open and streak is reached)
if not in_position
    if trade_direction == "Long" and loss_streak >= streak_threshold
        strategy.entry("Long", strategy.long) // Open a long position
        in_position := true
        hold_counter := hold_duration // Set holding period

    if trade_direction == "Short" and win_streak >= streak_threshold
        strategy.entry("Short", strategy.short) // Open a short position
        in_position := true
        hold_counter := hold_duration // Set holding period

// Plotting streaks for visualization
plot(win_streak, color=color.green, title="Winning Streak", style=plot.style_histogram, linewidth=2)
plot(loss_streak, color=color.red, title="Losing Streak", style=plot.style_histogram, linewidth=2)