
Данная стратегия представляет собой количественную торговую систему, основанную на скользящей средней, индикаторе RSI и скользящем стоп-лоссе. Он объединяет отслеживание тренда и индикаторы импульса в техническом анализе для достижения контролируемых по риску транзакций путем установки строгих условий входа и выхода. Основная логика стратегии заключается в поиске возможностей перепроданности для входа на рынок при восходящем тренде и использовании скользящих стоп-лоссов для защиты прибыли.
Стратегия использует 200-дневную простую скользящую среднюю (SMA) в качестве базовой линии для оценки тренда и объединяет ее с индексом относительной силы (RSI) для генерации торговых сигналов. Конкретно:
Это количественная торговая стратегия с законченной структурой и четкой логикой. Он объединяет несколько технических индикаторов для получения стабильной прибыли и одновременного контроля рисков. Несмотря на то, что есть возможности для оптимизации, базовая структура обладает хорошей практичностью и масштабируемостью. Стратегия подходит для среднесрочных и долгосрочных инвесторов и хорошо адаптируется к различным рыночным условиям.
/*backtest
start: 2025-01-09 00:00:00
end: 2025-01-16 00:00:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy("200 SMA Crossover Strategy", overlay=false)
// Define inputs
smaLength = input.int(200, title="SMA Length")
rsiLength = input.int(14, title="RSI Length")
rsiThreshold = input.float(40, title="RSI Threshold")
trailStopPercent = input.float(5.0, title="Trailing Stop Loss (%)")
waitingPeriod = input.int(10, title="Waiting Period (Days)")
// Calculate 200 SMA
sma200 = ta.sma(close, smaLength)
// Calculate RSI
rsi = ta.rsi(close, rsiLength)
// Plot the 200 SMA and RSI
plot(sma200, color=color.blue, linewidth=2, title="200 SMA")
plot(rsi, color=color.purple, title="RSI", display=display.none)
// Define buy and sell conditions
var isLong = false
var float lastExitTime = na
var float trailStopPrice = na
// Explicitly declare timeSinceExit as float
float timeSinceExit = na(lastExitTime) ? na : (time - lastExitTime) / (24 * 60 * 60 * 1000)
canEnter = na(lastExitTime) or timeSinceExit > waitingPeriod
buyCondition = close > sma200 and rsi < rsiThreshold and canEnter
if (buyCondition and not isLong)
strategy.entry("Buy", strategy.long)
trailStopPrice := na
isLong := true
// Update trailing stop loss if long
if (isLong)
trailStopPrice := na(trailStopPrice) ? close * (1 - trailStopPercent / 100) : math.max(trailStopPrice, close * (1 - trailStopPercent / 100))
// Check for trailing stop loss or sell condition
if (isLong and (close < trailStopPrice or close < sma200))
strategy.close("Buy")
lastExitTime := time
isLong := false
// Plot buy and sell signals
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=(isLong and close < trailStopPrice) or close < sma200, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")