OPEN-SOURCE SCRIPT
Trend + RSI + Volume

//version=5
strategy("SPY Trend RSI Volume Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === Inputs ===
emaFastLen = input.int(20, title="Fast EMA")
emaSlowLen = input.int(50, title="Slow EMA")
rsiLen = input.int(14, title="RSI Period")
rsiLongThresh = input.int(55, title="RSI Threshold for Long")
rsiShortThresh = input.int(45, title="RSI Threshold for Short")
volumeMultiplier = input.float(1.5, title="Volume Multiplier")
atrLen = input.int(14, title="ATR Length")
riskReward = input.float(2.0, title="Risk-Reward Ratio")
atrMult = input.float(1.5, title="ATR Multiplier")
// === Indicators ===
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
rsi = ta.rsi(close, rsiLen)
avgVolume = ta.sma(volume, 20)
atr = ta.atr(atrLen)
// === Conditions ===
// Trend
isBullish = emaFast > emaSlow
isBearish = emaFast < emaSlow
// Volume
volSpike = volume > avgVolume * volumeMultiplier
// Entry conditions
longCondition = isBullish and rsi > rsiLongThresh and volSpike and close > emaFast
shortCondition = isBearish and rsi < rsiShortThresh and volSpike and close < emaFast
// === Entries ===
if (longCondition)
stopLoss = close - atr * atrMult
takeProfit = close + (close - stopLoss) * riskReward
strategy.entry("Long", strategy.long)
strategy.exit("TP/SL Long", from_entry="Long", stop=stopLoss, limit=takeProfit)
if (shortCondition)
stopLoss = close + atr * atrMult
takeProfit = close - (stopLoss - close) * riskReward
strategy.entry("Short", strategy.short)
strategy.exit("TP/SL Short", from_entry="Short", stop=stopLoss, limit=takeProfit)
// === Plotting ===
plot(emaFast, title="EMA 20", color=color.orange)
plot(emaSlow, title="EMA 50", color=color.blue)
strategy("SPY Trend RSI Volume Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === Inputs ===
emaFastLen = input.int(20, title="Fast EMA")
emaSlowLen = input.int(50, title="Slow EMA")
rsiLen = input.int(14, title="RSI Period")
rsiLongThresh = input.int(55, title="RSI Threshold for Long")
rsiShortThresh = input.int(45, title="RSI Threshold for Short")
volumeMultiplier = input.float(1.5, title="Volume Multiplier")
atrLen = input.int(14, title="ATR Length")
riskReward = input.float(2.0, title="Risk-Reward Ratio")
atrMult = input.float(1.5, title="ATR Multiplier")
// === Indicators ===
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
rsi = ta.rsi(close, rsiLen)
avgVolume = ta.sma(volume, 20)
atr = ta.atr(atrLen)
// === Conditions ===
// Trend
isBullish = emaFast > emaSlow
isBearish = emaFast < emaSlow
// Volume
volSpike = volume > avgVolume * volumeMultiplier
// Entry conditions
longCondition = isBullish and rsi > rsiLongThresh and volSpike and close > emaFast
shortCondition = isBearish and rsi < rsiShortThresh and volSpike and close < emaFast
// === Entries ===
if (longCondition)
stopLoss = close - atr * atrMult
takeProfit = close + (close - stopLoss) * riskReward
strategy.entry("Long", strategy.long)
strategy.exit("TP/SL Long", from_entry="Long", stop=stopLoss, limit=takeProfit)
if (shortCondition)
stopLoss = close + atr * atrMult
takeProfit = close - (stopLoss - close) * riskReward
strategy.entry("Short", strategy.short)
strategy.exit("TP/SL Short", from_entry="Short", stop=stopLoss, limit=takeProfit)
// === Plotting ===
plot(emaFast, title="EMA 20", color=color.orange)
plot(emaSlow, title="EMA 50", color=color.blue)
開源腳本
本著TradingView的真正精神,此腳本的創建者將其開源,以便交易者可以查看和驗證其功能。向作者致敬!雖然您可以免費使用它,但請記住,重新發佈程式碼必須遵守我們的網站規則。
免責聲明
這些資訊和出版物並不意味著也不構成TradingView提供或認可的金融、投資、交易或其他類型的意見或建議。請在使用條款閱讀更多資訊。
開源腳本
本著TradingView的真正精神,此腳本的創建者將其開源,以便交易者可以查看和驗證其功能。向作者致敬!雖然您可以免費使用它,但請記住,重新發佈程式碼必須遵守我們的網站規則。
免責聲明
這些資訊和出版物並不意味著也不構成TradingView提供或認可的金融、投資、交易或其他類型的意見或建議。請在使用條款閱讀更多資訊。