이 전략은 특정 기간 내에 긴 짧은 로테이션 거래를 통해 수익을 창출하고자 하는 시간 기간에 기반한 지능형 로테이션 전략이다. 전략은 시장 조건에 따라 자동으로 거래 방향을 조정할 수 있는 유연한 위치 관리 메커니즘을 사용하여 위험 제어 기능을 통합한다. 양방향 거래 및 선택적인 스윙 거래 모드를 지원하며 강력한 적응력을 보여준다.
이 전략은 주로 시간 기간과 위치 상태를 통해 거래를 제어합니다. 첫째, inActivePeriod (() 함수는 거래가 마지막 500 바의 효과적인 거래 간격 내에 있는지 여부를 결정합니다. 효과적인 간격 내에서 전략은 위치 상태 (positionHeld), 보유 시간 (barsHeld), 휴식 시간 (barsPaused) 등의 변수에 따라 거래 행동을 결정합니다. 스윙 거래 모드가 활성화되면 전략은 긴 방향과 짧은 방향 사이에서 빠르게 회전합니다. 비활성화되면 3 기간 후에 포지션을 닫고 새로운 거래 기회를 기다립니다.
이 전략은 시간 기간 통제와 긴 단기 회전을 통해 시장 수익을 달성하여 강력한 유연성과 적응력을 보여줍니다. 특정 위험이 존재하지만 합리적인 최적화 및 위험 관리 조치로 전략의 안정성과 수익성이 크게 향상 될 수 있습니다. 핵심 장점은 간단하면서도 효과적인 거래 논리이며 추가 최적화 및 확장에 대한 기초 전략으로 적합합니다.
/*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)