
これは,RSI指数と取引量に基づいた反転取引戦略である. この戦略は,市場における超買超売状態を識別し,取引量確認を組み合わせ,価格が極端な状態に現れたときに反転取引を行う. この戦略の核心思想は,RSI指数が超買または超売信号を発生させ,取引量が平均レベルより高いときに取引することであり,RSIの中央線 ((50) を退出信号として使用する.
戦略は主に以下のコアコンポーネントに基づいています.
この戦略は,RSI指標と取引量分析を組み合わせて,完全な反転取引システムを構築している.戦略の設計は合理的で,優れた操作性と柔軟性がある.推奨された最適化の方向によって,戦略はさらに向上する余地がある.実地での適用では,パラメータを十分にテストし,市場特性に合わせてターゲットに最適化することを推奨している.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-02-19 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("RSI & Volume Contrarian Strategy", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, pyramiding=0)
//---------------------------
// Inputs and Parameters
//---------------------------
rsiPeriod = input.int(14, title="RSI Period", minval=1)
oversold = input.int(30, title="RSI Oversold Level", minval=1, maxval=50)
overbought = input.int(70, title="RSI Overbought Level", minval=50, maxval=100)
volMAPeriod = input.int(20, title="Volume MA Period", minval=1)
//---------------------------
// Indicator Calculations
//---------------------------
rsiValue = ta.rsi(close, rsiPeriod)
volMA = ta.sma(volume, volMAPeriod)
//---------------------------
// Trade Logic
//---------------------------
// Long Entry: Look for oversold conditions (RSI < oversold)
// accompanied by above-average volume (volume > volMA)
// In an uptrend, oversold conditions with high volume may signal a strong reversal opportunity.
longCondition = (rsiValue < oversold) and (volume > volMA)
// Short Entry: When RSI > overbought and volume is above its moving average,
// the temporary strength in a downtrend can be exploited contrarily.
shortCondition = (rsiValue > overbought) and (volume > volMA)
if longCondition
strategy.entry("Long", strategy.long)
if shortCondition
strategy.entry("Short", strategy.short)
// Exit Logic:
// Use a simple RSI midline crossover as an exit trigger.
// For longs, if RSI crosses above 50 (indicating a recovery), exit the long.
// For shorts, if RSI crosses below 50, exit the short.
exitLong = ta.crossover(rsiValue, 50)
exitShort = ta.crossunder(rsiValue, 50)
if strategy.position_size > 0 and exitLong
strategy.close("Long", comment="RSI midline exit")
log.info("strategy.position_size > 0 and exitLong")
if strategy.position_size < 0 and exitShort
strategy.close("Short", comment="RSI midline exit")
log.info("strategy.position_size > 0 and exitLong")
//---------------------------
// Visualization
//---------------------------
// Plot the RSI on a separate pane for reference
plot(rsiValue, title="RSI", color=color.blue, linewidth=2)
hline(oversold, title="Oversold", color=color.green)
hline(overbought, title="Overbought", color=color.red)
hline(50, title="Midline", color=color.gray, linestyle=hline.style_dotted)
// Optionally, you may plot the volume moving average on a hidden pane
plot(volMA, title="Volume MA", color=color.purple, display=display.none)