이 전략은 RSI 지표와 평균 회전 원리에 기반한 양적 거래 시스템이다. 가격 범위 분석과 폐쇄 가격 위치와 결합하여 과소 구매 및 과소 판매 조건을 탐지하여 시장 회전 기회를 식별합니다. 핵심 개념은 극단적인 시장 조건 후 평균 회전 기회를 포착하고 엄격한 진입 기준과 동적 스톱 로스 메커니즘을 통해 위험을 관리하는 것입니다.
이 전략은 거래 신호를 결정하기 위해 여러 필터링 메커니즘을 사용합니다. 첫째, 가격은 초판 시장 상태를 나타내는 10 기간의 최저치를 만들어야합니다. 둘째, 하루의 가격 범위는 시장 변동성을 증가시키는 지난 10 일 동안 가장 큰 범위가어야합니다. 마지막으로, 폐쇄 가격이 하루의 범위의 상위 쿼틸에 있는지 확인하여 잠재적 인 반전 신호를 확인합니다. 엔트리는 브레이크아웃 확인을 통해 실행되며, 거래 조건이 충족된 후 2 일 이내에 가격이 이전 최고치를 넘으면 긴 거리를 이동합니다. 스톱-러스는 수익을 보호하기 위해 후속 메커니즘을 통해 구현됩니다.
이 전략은 명확한 논리를 가진 잘 구성된 평균 회귀 전략이다. 다중 조건 필터링과 동적 스톱 로스 관리를 통해 전략은 위험을 제어하는 동시에 시장 과반 판매 리바운드 기회를 효과적으로 포착한다. 일부 제한이 있지만 합리적인 최적화와 정교화로 전반적인 성능을 향상시킬 수 있다. 투자가들은 실시간 거래에서 전략을 적용할 때 특정 시장 특성과 그들의 위험 관용에 기반한 매개 변수를 조정하는 것이 좋습니다.
/*backtest start: 2024-11-04 00:00:00 end: 2024-12-04 00:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Larry Conners SMTP Strategy", overlay=true, margin_long=100, margin_short=100) // --- Inputs --- // Corrected the input type declaration by removing 'type=' tickSize = input.float(0.01, title="Tick Size (e.g., 1/8 for stocks)") // --- Calculate conditions --- // 1. Today the market must make a 10-period low low10 = ta.lowest(low, 10) is10PeriodLow = low == low10 // 2. Today's range must be the largest of the past 10 bars rangeToday = high - low maxRange10 = ta.highest(high - low, 10) isLargestRange = rangeToday == maxRange10 // 3. Today's close must be in the top 25 percent of today's range rangePercent = (close - low) / rangeToday isCloseInTop25 = rangePercent >= 0.75 // Combine all buy conditions buyCondition = is10PeriodLow and isLargestRange and isCloseInTop25 // --- Buy Entry (on the next day) --- var float buyPrice = na var bool orderPending = false var float stopLoss = na // Initialize stopLoss at the top level to avoid 'Undeclared identifier' errors if (buyCondition and strategy.position_size == 0) buyPrice := high + tickSize stopLoss := low orderPending := true // Condition to place buy order the next day or the day after if orderPending and ta.barssince(buyCondition) <= 2 strategy.entry("Buy", strategy.long, stop=buyPrice) orderPending := false // --- Stop-Loss and Trailing Stop --- if (strategy.position_size > 0) stopLoss := math.max(stopLoss, low) // Move stop to higher lows (manual trailing) strategy.exit("Exit", from_entry="Buy", stop=stopLoss) // --- Plotting --- // Highlight buy conditions bgcolor(buyCondition ? color.new(color.green, 50) : na) //plotshape(series=buyCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="Buy Setup") // Plot Stop-Loss level for visualization //plot(strategy.position_size > 0 ? stopLoss : na, color=color.red, linewidth=2, title="Stop-Loss Level")