
이 전략은 상대적으로 강한 지표 ((RSI) 와 동력 진동기 ((AO) 의 조화 작용에 기반한 정량화 거래 전략이다. 전략은 주로 RSI가 50호선을 돌파하고 AO가 마이너스 영역에 있는 조화 신호를 포착하여 잠재적인 더 많은 기회를 식별한다. 전략은 백분율 스톱 손실 메커니즘을 사용하여 위험을 관리하고, 기본으로 계좌의 10%의 자금을 사용하여 거래한다.
이 전략의 핵심 논리는 두 가지 기술 지표의 협동적 협력에 기반합니다.
이것은 RSI와 AO 지표를 결합한 트렌드 추적 전략으로, 과매도 지역의 반전 신호를 포착하여 다중 거래한다. 전략은 합리적으로 설계되어 있으며, 위험은 통제되어 있지만 여전히 최적화 할 여지가 있다. 거래자는 실장 사용 전에 충분한 역사 회귀를 수행하고 실제 시장 상황에 따라 매개 변수 설정을 조정하는 것이 좋습니다. 전략은 위험 감수성이 강하고, 기술적 분석에 대한 어느 정도 이해가 있는 거래자가 사용하는 데 적합하다.
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="🐂 BUY Only - RSI Crossing 50 + AO Negative", shorttitle="🐂 AO<0 RSI+50 Strategy", overlay=true)
// -----------------------------
// --- User Inputs ---
// -----------------------------
// RSI Settings
rsiPeriod = input.int(title="RSI Period", defval=14, minval=1)
// AO Settings
aoShortPeriod = input.int(title="AO Short Period", defval=5, minval=1)
aoLongPeriod = input.int(title="AO Long Period", defval=34, minval=1)
// Strategy Settings
takeProfitPerc = input.float(title="Take Profit (%)", defval=2.0, minval=0.0, step=0.1)
stopLossPerc = input.float(title="Stop Loss (%)", defval=1.0, minval=0.0, step=0.1)
// -----------------------------
// --- Awesome Oscillator (AO) Calculation ---
// -----------------------------
// Calculate the Awesome Oscillator
ao = ta.sma(hl2, aoShortPeriod) - ta.sma(hl2, aoLongPeriod)
// Detect AO Crossing Zero
aoCrossOverZero = ta.crossover(ao, 0)
aoCrossUnderZero = ta.crossunder(ao, 0)
// -----------------------------
// --- Relative Strength Index (RSI) Calculation ---
// -----------------------------
// Calculate RSI
rsiValue = ta.rsi(close, rsiPeriod)
// Detect RSI Crossing 50
rsiCrossOver50 = ta.crossover(rsiValue, 50)
rsiCrossUnder50 = ta.crossunder(rsiValue, 50)
// -----------------------------
// --- Plotting Arrows and Labels ---
// -----------------------------
// Plot AO Cross Over Arrow (AO+)
plotshape(series=aoCrossOverZero,
location=location.belowbar,
color=color.green,
style=shape.labelup,
title="AO Crosses Above Zero",
text="AO+",
textcolor=color.white,
size=size.small)
// Plot AO Cross Under Arrow (AO-)
plotshape(series=aoCrossUnderZero,
location=location.abovebar,
color=color.red,
style=shape.labeldown,
title="AO Crosses Below Zero",
text="AO-",
textcolor=color.white,
size=size.small)
// Plot RSI Cross Over Arrow (RSI Up)
plotshape(series=rsiCrossOver50,
location=location.belowbar,
color=color.blue,
style=shape.labelup,
title="RSI Crosses Above 50",
text="RSI Up",
textcolor=color.white,
size=size.small)
// Plot RSI Cross Under Arrow (RSI Down)
plotshape(series=rsiCrossUnder50,
location=location.abovebar,
color=color.orange,
style=shape.labeldown,
title="RSI Crosses Below 50",
text="RSI Down",
textcolor=color.white,
size=size.small)
// -----------------------------
// --- Buy Signal Condition ---
// -----------------------------
// Define Buy Signal: AO is negative and previous bar's RSI > 50
buySignal = (ao < 0) and (rsiValue[1] > 50)
// Plot Buy Signal
plotshape(series=buySignal,
location=location.belowbar,
color=color.lime,
style=shape.triangleup,
title="Buy Signal",
text="BUY",
textcolor=color.black,
size=size.small)
// -----------------------------
// --- Strategy Execution ---
// -----------------------------
// Entry Condition
if buySignal
strategy.entry("Long", strategy.long)
// Exit Conditions
// Calculate Stop Loss and Take Profit Prices
if strategy.position_size > 0
// Entry price
entryPrice = strategy.position_avg_price
// Stop Loss and Take Profit Levels
stopLevel = entryPrice * (1 - stopLossPerc / 100)
takeProfitLevel = entryPrice * (1 + takeProfitPerc / 100)
// Submit Stop Loss and Take Profit Orders
strategy.exit("Exit Long", from_entry="Long", stop=stopLevel, limit=takeProfitLevel)