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

지능적인 시간 기반의 장기 단기 회전 균형 거래 전략

저자:차오장, 날짜: 2024-11-12 16:33:43
태그:ATRSMARSIBBMA

img

전반적인 설명

이 전략은 특정 기간 내에 긴 짧은 로테이션 거래를 통해 수익을 창출하고자 하는 시간 기간에 기반한 지능형 로테이션 전략이다. 전략은 시장 조건에 따라 자동으로 거래 방향을 조정할 수 있는 유연한 위치 관리 메커니즘을 사용하여 위험 제어 기능을 통합한다. 양방향 거래 및 선택적인 스윙 거래 모드를 지원하며 강력한 적응력을 보여준다.

전략 원칙

이 전략은 주로 시간 기간과 위치 상태를 통해 거래를 제어합니다. 첫째, inActivePeriod (() 함수는 거래가 마지막 500 바의 효과적인 거래 간격 내에 있는지 여부를 결정합니다. 효과적인 간격 내에서 전략은 위치 상태 (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)

관련

더 많은