
이 전략은 역동적으로 트래킹한 스톱로스, 리스크 보상 비율, 그리고 RSI 극한이 빠져나가는 것을 결합한 고급 거래 시스템이다. 전략은 시장의 특정 형태를 식별하여 거래한다. ATR와 최근 하락점을 사용하여 역동적인 스톱로스 지점을 설정하고, 미리 설정된 리스크 수익 비율에 따라 수익 목표를 결정한다. 시스템은 또한 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)