이 전략은 역동적 인 트레이링 스톱, 리스크-어워드 비율 및 RSI 극단적 인 출구를 결합 한 고급 거래 시스템입니다. 이 시스템은 트레이드 입시에 대한 특정 패턴 (평행 바 패턴 및 핀 바 패턴) 을 식별하고, 동적 인 스톱 손실 배치에 대한 ATR 및 최근 최저치를 활용하며 미리 설정된 리스크-어워드 비율에 따라 수익 목표를 결정합니다. 이 시스템은 또한 RSI 기반 시장 과잉 구매 / 과잉 판매 출구 메커니즘을 통합합니다.
핵심 논리는 몇 가지 핵심 요소를 포함합니다. 1. 두 가지 패턴에 기반한 입력 신호: 평행 바 패턴 (큰 하향 바를 따르는 큰 상승 바) 및 이중 핀 바 패턴. 2. 최근 N-bar 최저에 조정 된 ATR 곱셈을 사용하여 동적 인 트레일링 스톱, 시장 변동성에 적응하는 스톱 손실 수준을 보장합니다. 3. 각 거래에 대한 위험 가치 ®를 이용하여 계산된 고정된 위험/이익 비율에 기초하여 설정된 수익 목표. 4. 고정된 위험 금액과 거래당 위험 가치에 기초하여 동적으로 계산된 포지션 사이징. 5. RSI 극단적 출구 메커니즘은 시장 극단에서 포지션 폐쇄를 유발합니다.
이것은 완벽한 거래 시스템을 구축하기 위해 여러 성숙한 기술 분석 개념을 결합한 잘 설계된 거래 전략입니다. 전략의 강점은 포괄적인 위험 관리 시스템과 유연한 거래 규칙에 있으며 매개 변수 최적화 및 시장 적응성에주의가 필요합니다. 제안된 최적화 방향을 통해 전략의 추가 개선이 가능합니다.
/*backtest start: 2024-11-10 00:00:00 end: 2024-12-09 08:00:00 period: 2h basePeriod: 2h 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/ // © ZenAndTheArtOfTrading | www.TheArtOfTrading.com // @version=5 strategy("Trailing stop 1", overlay=true) // Get user input int BAR_LOOKBACK = input.int(10, "Bar Lookback") int ATR_LENGTH = input.int(14, "ATR Length") float ATR_MULTIPLIER = input.float(1.0, "ATR Multiplier") rr = input.float(title="Risk:Reward", defval=3) // Basic definition var float shares=na risk = 1000 var float R=na E = strategy.position_avg_price // Input option to choose long, short, or both side = input.string("Long", title="Side", options=["Long", "Short", "Both"]) // RSI exit option RSIexit = input.string("Yes", title="Exit at RSI extreme?", options=["Yes", "No"]) RSIup = input(75) RSIdown = input(25) // Get indicator values float atrValue = ta.atr(ATR_LENGTH) // Calculate stop loss values var float trailingStopLoss = na float longStop = ta.lowest(low, BAR_LOOKBACK) - (atrValue * ATR_MULTIPLIER) float shortStop = ta.highest(high, BAR_LOOKBACK) + (atrValue * ATR_MULTIPLIER) // Check if we can take trades bool canTakeTrades = not na(atrValue) bgcolor(canTakeTrades ? na : color.red) //Long pattern //Two pin bar onepinbar = (math.min(close,open)-low)/(high-low)>0.6 and math.min(close,open)-low>ta.sma(high-low,14) twopinbar = onepinbar and onepinbar[1] notatbottom = low>ta.lowest(low[1],10) // Parallel bigred = (open-close)/(high-low)>0.8 and high-low>ta.sma(high-low,14) biggreen = (close-open)/(high-low)>0.8 and high-low>ta.sma(high-low,14) parallel = bigred[1] and biggreen atbottom = low==ta.lowest(low,10) // Enter long trades (replace this entry condition) longCondition = parallel if (longCondition and canTakeTrades and strategy.position_size == 0 and (side == "Long" or side == "Both")) R:= close-longStop shares:= risk/R strategy.entry("Long", strategy.long,qty=shares) // Enter short trades (replace this entry condition) shortCondition = parallel if (shortCondition and canTakeTrades and strategy.position_size == 0 and (side == "Short" or side == "Both")) R:= shortStop - close shares:= risk/R strategy.entry("Short", strategy.short,qty=shares) // Update trailing stop if (strategy.position_size > 0) if (na(trailingStopLoss) or longStop > trailingStopLoss) trailingStopLoss := longStop else if (strategy.position_size < 0) if (na(trailingStopLoss) or shortStop < trailingStopLoss) trailingStopLoss := shortStop else trailingStopLoss := na // Exit trades with trailing stop strategy.exit("Long Exit", "Long", stop=trailingStopLoss, limit = E + rr*R ) strategy.exit("Short Exit", "Short", stop=trailingStopLoss, limit = E - rr*R) //Close trades at RSI extreme if ta.rsi(high,14)>RSIup and RSIexit == "Yes" strategy.close("Long") if ta.rsi(low,14)<RSIdown and RSIexit == "Yes" strategy.close("Short") // Draw stop loss plot(trailingStopLoss, "Stop Loss", color.red, 1, plot.style_linebr)