
Это стратегия для отслеживания тенденций, которая сочетает в себе равномерный пересечение и относительно сильный показатель ((RSI)). Эта стратегия определяет направление рыночных тенденций с помощью пересечения краткосрочных и долгосрочных скользящих средних, а также использует RSI в качестве динамического фильтра для подтверждения силы тенденции, что повышает надежность торговых сигналов.
В качестве основного индикатора тренда стратегия использует 9-циклические и 21-циклические простые скользящие средние (SMA). Когда краткосрочные средние пересекают долгосрочные средние вверх и RSI больше 50, система генерирует многосигналы; когда краткосрочные средние пересекают долгосрочные средние вниз и RSI меньше 50, система генерирует сигналы задержки. Такая конструкция обеспечивает соответствие направления торгов с тенденциями и динамикой рынка.
Это целостная, логически ясная стратегия отслеживания трендов. Основные направления тренда обеспечиваются с помощью равномерного пересечения, RSI обеспечивает подтверждение динамики, а затем в сочетании с механизмом управления рисками образует целостную торговую систему. Несмотря на некоторые присущие ей ограничения, эта стратегия, благодаря постоянной оптимизации и корректировке, может сохранить стабильную производительность в различных рыночных условиях.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Moving Average Crossover + RSI Strategy", overlay=true, shorttitle="MA RSI Strategy")
// --- Input Parameters ---
shortMA = input.int(9, title="Short MA Period", minval=1)
longMA = input.int(21, title="Long MA Period", minval=1)
rsiLength = input.int(14, title="RSI Length", minval=1)
rsiOverbought = input.int(70, title="RSI Overbought Level", minval=50, maxval=100)
rsiOversold = input.int(30, title="RSI Oversold Level", minval=0, maxval=50)
stopLossPercent = input.float(1, title="Stop Loss Percentage", minval=0.1, maxval=10.0) / 100
takeProfitPercent = input.float(2, title="Take Profit Percentage", minval=0.1, maxval=10.0) / 100
// --- Calculate Moving Averages ---
shortMA_value = ta.sma(close, shortMA)
longMA_value = ta.sma(close, longMA)
// --- Calculate RSI ---
rsi_value = ta.rsi(close, rsiLength)
// --- Buy and Sell Conditions ---
longCondition = ta.crossover(shortMA_value, longMA_value) and rsi_value > 50
shortCondition = ta.crossunder(shortMA_value, longMA_value) and rsi_value < 50
// --- Plot Moving Averages ---
plot(shortMA_value, color=color.blue, linewidth=2, title="Short MA")
plot(longMA_value, color=color.red, linewidth=2, title="Long MA")
// --- Plot RSI (Optional) ---
hline(rsiOverbought, "Overbought", color=color.red)
hline(rsiOversold, "Oversold", color=color.green)
plot(rsi_value, color=color.purple, title="RSI")
// --- Strategy Execution ---
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
// --- Risk Management (Stop Loss and Take Profit) ---
longStopLoss = close * (1 - stopLossPercent)
longTakeProfit = close * (1 + takeProfitPercent)
shortStopLoss = close * (1 + stopLossPercent)
shortTakeProfit = close * (1 - takeProfitPercent)
// Set the stop loss and take profit for long and short positions
strategy.exit("Long Exit", from_entry="Long", stop=longStopLoss, limit=longTakeProfit)
strategy.exit("Short Exit", from_entry="Short", stop=shortStopLoss, limit=shortTakeProfit)