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

양적 거래 신호 추적 및 다중 출구 전략 최적화 시스템

저자:차오장, 날짜: 2024-12-13 11:39:06
태그:

img

전반적인 설명

이 전략은 LuxAlgo® 신호와 오버레이를 기반으로 한 양적 거래 시스템이다. 주로 사용자 지정 알레트 조건을 캡처하여 긴 포지션을 시작하고 여러 출구 신호를 통해 포지션을 관리합니다. 시스템은 모듈형 디자인을 사용하여 스마트 트레일링 스톱, 트렌드 역전 확인 및 전통적인 비율 기반 스톱 손실을 포함한 다양한 출구 조건을 지원합니다. 또한 시스템은 포지션 스케일링을 지원하여 돈 관리에 더 많은 유연성을 제공합니다.

전략 원칙

핵심 논리는 다음의 주요 구성 요소를 포함합니다.

  1. 엔트리 신호 시스템: 사용자 정의 LuxAlgo® 경고 조건을 통해 긴 엔트리 신호를 유발합니다.
  2. 포지션 스케일링: 기존 지분에 대한 포지션을 늘리기 위한 선택적 스케일링 기능.
  3. 다층 출구 메커니즘
    • 스마트 트레일링 스톱: 스마트 트레일링 라인과의 가격 관계를 모니터링합니다.
    • 트렌드 확인 출구: 기본 및 강화된 하향 확인 신호를 포함합니다.
    • 내장 출구 신호: 지표에 내재된 여러 출구 조건을 사용합니다.
    • 전통적인 스톱 로스: 비율 기반 고정 스톱 로스 설정을 지원합니다.
  4. 시간 창 관리: 유연한 백테스팅 날짜 범위 설정을 제공합니다.

전략적 장점

  1. 체계적인 리스크 관리: 다층 출구 메커니즘을 통해 하향 리스크를 효과적으로 제어합니다.
  2. 유연한 포지션 관리: 시장 조건에 적응할 수 있는 다양한 확장 전략을 지원합니다.
  3. 높은 사용자 정의성: 사용자는 개인화된 거래 시스템을 만들기 위해 다른 출구 조건을 자유롭게 결합 할 수 있습니다.
  4. 모듈형 설계: 상대적으로 독립적인 기능 모듈은 유지 보수와 최적화를 촉진합니다.
  5. 완전한 백테스팅 지원: 상세한 백테스팅 매개 변수 설정 및 역사 데이터 검증을 제공합니다.

전략 위험

  1. 신호 의존성 위험: 전략은 LuxAlgo® 지표 신호의 품질에 크게 의존합니다.
  2. 시장 환경 적응성 위험: 전략 성과는 다른 시장 조건에 따라 크게 달라질 수 있습니다.
  3. 매개 변수 감수성 위험: 여러 가지 종료 조건 조합은 조기 종료 또는 놓친 기회를 초래할 수 있습니다.
  4. 유동성 위험: 시장 유동성 문제는 출입 및 출출 실행 효과에 영향을 줄 수 있습니다.
  5. 기술 실행 위험: 기술 실패를 피하기 위해 지표와 전략의 안정적인 작동을 보장해야 합니다.

전략 최적화 방향

  1. 신호 시스템 최적화:
    • 신호 확인을 위한 더 많은 기술 지표를 도입
    • 적응적 신호의 임계 조정 메커니즘을 개발
  2. 위험 관리 강화:
    • 변동성 적응 스톱 로스 메커니즘을 추가합니다.
    • 동적 위치 관리 시스템 개발
  3. 성능 최적화:
    • 자원 소비를 줄이기 위해 계산 효율을 최적화
    • 지연 시간을 줄이기 위해 신호 처리 논리를 개선
  4. 기능 확장:
    • 더 많은 시장 환경 분석 도구를 추가
    • 보다 유연한 매개 변수 최적화 프레임워크를 개발

요약

이 전략은 LuxAlgo®의 고품질 신호와 다층 리스크 관리 시스템을 결합함으로써 양적 거래에 대한 포괄적인 솔루션을 제공합니다. 모듈형 설계 및 유연한 구성 옵션은 좋은 적응성과 확장성을 제공합니다. 일부 내재된 위험이 있지만 전략의 전반적인 성능은 지속적인 최적화 및 정교화를 통해 개선 할 수있는 상당한 여지가 있습니다. 사용자는 시장 조건의 변화에주의를 기울이고 그에 따라 매개 변수 설정을 조정하고 실제 응용 프로그램에서 지속적인 리스크 모니터링을 유지해야합니다.


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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Chart0bserver
// This strategy is NOT from the LuxAlgo® developers.  We created this to compliment their hard work.  No association with LuxAlgo® is intended nor implied.

// Please visit https://chart.observer to test your Tradingview Strategies in our paper-trading sandbox environment. Webhook your alerts to our API.
// Past performance does not ensure future results.  This strategy provided with absolutely no warranty and is for educational purposes only

// The goal of this strategy is to enter a long position using the Custom Alert condition feature of LuxAlgo® Signals & Overlays™ indicator
// To trigger an exit from the long position, use one or more of the common exit signals which the Signals & Overlays™ indicator provides.
// You will need to connect those signals to this strategy in the dialog box.  
// We're calling this a "piggyback" strategy because the LuxAlgo® Signals & Overlays indicator must be present, and remain on the chart.
// The Signals and Overlays™ indicator is invite-only, and requires a paid subscription from LuxAlgo® - https://luxalgo.com/?rfsn=8404759.b37a73

//@version=6
strategy("Simple Backtester for LuxAlgo® Signals & Overlays™", "Simple Backtester for LuxAlgo® S&O ", true, pyramiding=3, default_qty_type = 'percent_of_equity', calc_on_every_tick = true, process_orders_on_close=false, calc_on_order_fills=true, default_qty_value = 33, initial_capital = 10000, currency = currency.USD, commission_type = format.percent, commission_value = 0.10 )

// Initialize a flag to track order placement
var bool order_placed = false

// Reset the flag at the start of each new bar
if (not na(bar_index) and bar_index != bar_index[1])
    order_placed := false

// === Inputs which the user needs to change in the configuration dialog to point to the corresponding LuxAlgo alerts === //
// === The Signals & Overlays indicator must be present on the chart in order for this to work === //
la_EntryAlert = input.source(close, "LuxAlgo® Custom Alert signal", "Replace 'close' with your LuxAlgo® entry signal. For example, try using their Custom Alert.", display=display.none, group="Enter Long Position")
useAddOnTrades = input.bool(false, "Add to your long position on LuxAlgo® signals", display=display.none, group="Add-On Trade Signal for Longs")
la_AddOnAlert = input.source(close, "Add to open longs with this signal", "Replace 'close' with your desired Add-On Trade Signal", display=display.none, group="Add-On Trade Signal for Longs")
la_SmartTrail = input.source(close, "LuxAlgo® Smart Trail", "Replace close with LuxAlgo® Smart Trail", display=display.none, group="LuxAlgo® Signals & Overlays™ Alerts")
la_BearishConfirm = input.source(close, "LuxAlgo® Any Bearish Confirmation", "Replace close with LuxAlgo® Any Bearish Confirmation", display=display.none, group="LuxAlgo® Signals & Overlays™ Alerts")
la_BearishConfirmPlus = input.source(close, "LuxAlgo® Bearish Confirmation+", "Replace close with LuxAlgo® Bearish Confirmation+", display=display.none, group="LuxAlgo® Signals & Overlays™ Alerts")
la_BuiltInExits = input.source(close, "LuxAlgo® Bullish Exit", "Replace close with LuxAlgo® Bullish Exit", display=display.none, group="LuxAlgo® Signals & Overlays™ Alerts")
la_TrendCatcherDn = input.source(close, "LuxAlgo® Trend Catcher Down", "Replace close with LuxAlgo® Trend Catcher Down", display=display.none, group="LuxAlgo® Signals & Overlays™ Alerts")

// === Check boxes alowing the user to select exit criteria from th long position === //
exitOnSmartTrail = input.bool(true, "Exit long trade on Smart Trail Switch Bearish", group="Exit Long Conditions")
exitOnBearishConf = input.bool(false, "Exit on Any Bearish Confirmation", group="Exit Long Conditions")
exitOnBearishConfPlus = input.bool(true, "Exit on Bearish Confirmation+", group="Exit Long Conditions")
exitOnBuiltInExits = input.bool(false, "Exit on Bullish Exits", group="Exit Long Conditions")
exitOnTrendCatcher = input.bool(false, "Exit on Trend Catcher Down", group="Exit Long Conditions")

// === Optional Stop Loss ===//
useStopLoss = input.bool(false, "Use a Stop Loss", group="Optional Stop Loss")
stopLossPercent = input.float(0.25, "Stop Loss %", minval=0.25, step=0.25, group="Optional Stop Loss")

// Use Lux Algo's signals as part of your strategy logic
buyCondition = la_EntryAlert > 0 

if useAddOnTrades and la_AddOnAlert > 0 and strategy.opentrades > 0 and not buyCondition
    buyCondition := true

sellCondition = false
sellComment = ""

if exitOnSmartTrail and ta.crossunder(close, la_SmartTrail)
    sellCondition := true
    sellComment := "Smart Trail"

if exitOnBearishConf and la_BearishConfirm == 1
    sellCondition := true
    sellComment := "Bearish"

if exitOnBearishConfPlus and la_BearishConfirmPlus == 1
    sellCondition := true
    sellComment := "Bearish+"

if exitOnBuiltInExits and la_BuiltInExits == 1
    sellCondition := true
    sellComment := "Bullish Exit"

if exitOnTrendCatcher and la_TrendCatcherDn == 1
    sellCondition := true
    sellComment := "Trnd Over"

// Stop Loss Calculation
stopLossMultiplyer = 1 - (stopLossPercent / 100)
float stopLossPrice = na
if strategy.position_size > 0
    stopLossPrice := strategy.position_avg_price * stopLossMultiplyer

// -----------------------------------------------------------------------------------------------------------//
// Back-testing Date Range code  ----------------------------------------------------------------------------//
// ---------------------------------------------------------------------------------------------------------//
fromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12, group='Back-Testing Date Range')
fromDay = input.int(defval=1, title='From Day', minval=1, maxval=31, group='Back-Testing Date Range')
fromYear = input.int(defval=2024, title='From Year', minval=1970, group='Back-Testing Date Range')
thruMonth = 1 
thruDay = 1 
thruYear = 2112 

// === START/FINISH FUNCTION ===
start = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59)  // backtest finish window
window() =>  // create function "within window of time
    time >= start and time <= finish ? true : false
// End Date range code -----//

if buyCondition and window() and not order_placed
    strategy.entry("Long", strategy.long)
    order_placed := true

if sellCondition and window() and not order_placed
    strategy.close("Long", comment=sellComment)
    order_placed := true

if useStopLoss and window()
    strategy.exit("Stop", "Long", stop=stopLossPrice)

더 많은