지능형 시간 주기 장단기 회전 균형 거래 전략

ATR SMA RSI BB MA
생성 날짜: 2024-11-12 16:33:43 마지막으로 수정됨: 2024-11-12 16:33:43
복사: 1 클릭수: 506
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

지능형 시간 주기 장단기 회전 균형 거래 전략

개요

이 전략은 시장 환경에 따라 거래 방향을 자동으로 조정할 수 있는 유연한 포지션 관리 메커니즘을 채택하고 있으며, 위험 제어 기능을 갖추고 있다. 이 전략은 다중 포지션 양방향 거래를 지원하며, 선택적으로 스윙 거래 모드를 시작할 수 있으며, 강한 적응력을 가지고 있다.

전략 원칙

전략은 주로 시간 주기와 포지션 상태를 통해 거래를 제어한다. 우선 inActivePeriod () 함수를 통해 가장 가까운 500 K 선의 유효 거래 범위 내에 있는지 확인한다. 유효 범위 내에서 전략은 포지션 상태 (positionHeld), 포지션 시간 (barsHeld) 및 일시 중지 시간 (barsPaused) 과 같은 변수에 따라 거래 행동을 결정한다. 휘어지는 거래 모드를 활성화하면 전략은 다공간 방향에서 빠르게 회전한다. 휘어지는 거래 모드를 비활성화하면 전략은 포지션을 3주기 후 평정하고 새로운 거래 기회를 기다린다.

전략적 이점

  1. 유연성: 순수 멀티 헤드, 순수 빈 헤드 또는 다 빈 쌍방향 거래 모드를 지원합니다.
  2. 위험 조절: 주간 기간을 제한하여 장기적인 지분 위험을 피하십시오.
  3. 적응력: 시장 환경에 따라 거래 방향을 자동으로 조정할 수 있다.
  4. 간편한 운영: 거래 논리는 명확하고 이해하기 쉽고 실행이 가능합니다.
  5. 재무 효율성: 재무 사용 효율성을 높이기 위한 빈번한 순환
  6. 매개 변수 조정 가능: 핵심 매개 변수는 실제 요구에 따라 유연하게 조정할 수 있습니다.

전략적 위험

  1. 거래 빈도는 높은 수수료 비용을 초래할 수 있습니다.
  2. 위기 시장에서 빈번한 잘못된 신호가 발생할 수 있습니다.
  3. 고정 포지션 주기는 중요한 시장 기회를 놓칠 수 있습니다.
  4. 시장 추세를 고려하지 않고 주류와 반대되는 경우
  5. 극심한 상황에서는 더 큰 손실을 초래할 수 있는 손해배상 장치의 부재

전략 최적화 방향

  1. 변동률 지표 (ATR와 같은) 를 도입하여 포지션 보유 시간을 동적으로 조정합니다.
  2. 트렌드 판단 지표의 증가와 거래 방향의 정확성 향상
  3. 위험 제어 능력을 높이기 위해 손해 차단 장치를 추가합니다.
  4. 적당한 시점에 거래하는 것을 피하기 위한 최적화된 입시 시점
  5. 투자자금 관리 시스템 도입, 포지션 규모 최적화
  6. 시장 정서 지표에 추가하여 거래의 정확성을 향상시킵니다.

요약하다

이 전략은 시간주기 제어 및 다공간 회전 방식으로 시장 수익을 획득하며, 강력한 유연성과 적응력을 가지고 있다. 약간의 위험이 있지만, 합리적인 최적화 및 위험 제어 조치를 통해 전략의 안정성과 수익성을 크게 향상시킬 수 있다. 전략의 핵심 장점은 단순하고 효과적인 거래 논리이며, 기본 전략에 대한 추가 최적화 및 확장에 적합하다.

전략 소스 코드
/*backtest
start: 2024-10-12 00:00:00
end: 2024-11-11 00:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Tickerly Test Strategy", overlay=true)

// Inputs
longEnabled = input.bool(true, "Enable Long Trades")
shortEnabled = input.bool(true, "Enable Short Trades")
swingEnabled = input.bool(false, "Enable Swing Trading")

// Variables
var positionHeld = 0
var barsHeld = 0
var barsPaused = 0
var lastAction = "none"

// Function to determine if we're in the last 500 bars
inActivePeriod() => 
    barIndex = bar_index
    lastBarIndex = last_bar_index
    barIndex >= (lastBarIndex - 499)

// Main strategy logic
if inActivePeriod()
    if swingEnabled
        if positionHeld == 0 and barstate.isconfirmed
            if lastAction != "long"
                strategy.entry("Long", strategy.long)
                positionHeld := 1
                barsHeld := 0
                lastAction := "long"
            else
                strategy.entry("Short", strategy.short)
                positionHeld := -1
                barsHeld := 0
                lastAction := "short"
        
        if positionHeld != 0
            barsHeld += 1
            if barsHeld >= 2
                if positionHeld == 1
                    strategy.entry("Short", strategy.short)
                    positionHeld := -1
                    barsHeld := 0
                    lastAction := "short"
                else
                    strategy.entry("Long", strategy.long)
                    positionHeld := 1
                    barsHeld := 0
                    lastAction := "long"
    else
        if positionHeld == 0 and barsPaused >= 1 and barstate.isconfirmed
            if longEnabled and shortEnabled
                if lastAction != "long"
                    strategy.entry("Long", strategy.long)
                    positionHeld := 1
                    barsHeld := 0
                    barsPaused := 0
                    lastAction := "long"
                else
                    strategy.entry("Short", strategy.short)
                    positionHeld := -1
                    barsHeld := 0
                    barsPaused := 0
                    lastAction := "short"
            else if longEnabled
                strategy.entry("Long", strategy.long)
                positionHeld := 1
                barsHeld := 0
                barsPaused := 0
                lastAction := "long"
            else if shortEnabled
                strategy.entry("Short", strategy.short)
                positionHeld := -1
                barsHeld := 0
                barsPaused := 0
                lastAction := "short"
        
        if positionHeld != 0
            barsHeld += 1
            if barsHeld >= 3
                strategy.close_all()
                positionHeld := 0
                barsHeld := 0
                barsPaused := 0  // Reset pause counter when exiting a position
        else
            barsPaused += 1

// Plotting active period for visual confirmation
plot(inActivePeriod() ? 1 : 0, "Active Period", color=color.new(color.blue, 80), style=plot.style_areabr)