
Cette stratégie est une stratégie de trading quantitative combinant un indice relativement faible (RSI) et un indicateur de tendance/diffusion moyen mobile (MACD). Le cœur de la stratégie consiste à déterminer la direction de la tendance du marché en observant les zones de survente et de survente du RSI, en combinant les signaux croisés du MACD avec les signaux croisés de près de 5 cycles de négociation, et en définissant des arrêts de perte pour contrôler les risques. Cette approche permet non seulement de fournir des signaux de trading plus précis, mais aussi de réduire efficacement les risques liés aux faux signaux.
La stratégie repose sur les éléments fondamentaux suivants :
La stratégie a été construite en combinant les indicateurs RSI et MACD, avec des conditions d’entrée flexibles et des mécanismes de contrôle des risques, pour constituer un système de trading relativement complet. Bien qu’il y ait des points à optimiser, le cadre de base présente une bonne extensibilité et, avec une optimisation et une amélioration supplémentaires, est susceptible de devenir une stratégie de trading plus stable et plus robuste.
/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-12 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MACD & RSI Strategy with SL/TP and Flexible Entry (5 bars)", overlay=true)
// Параметры для RSI и MACD
rsiLength = 14
overbought = 70
oversold = 30
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
// Рассчитаем RSI
rsi = ta.rsi(close, rsiLength)
// Проверка пересечения MACD
macdCrossOver = ta.crossover(macdLine, signalLine)
macdCrossUnder = ta.crossunder(macdLine, signalLine)
// Логика для проверки пересечения MACD за последние 5 баров
var bool macdCrossOverRecent = false
var bool macdCrossUnderRecent = false
// Проверяем пересечения за последние 5 баров
for i = 0 to 4
if macdCrossOver[i]
macdCrossOverRecent := true
if macdCrossUnder[i]
macdCrossUnderRecent := true
// Условия для шортовой сделки: RSI выше 70 (перекупленность) + пересечение MACD за последние 5 баров
shortCondition = ta.highest(rsi, 5) > overbought and macdCrossOverRecent
// Условия для лонговой сделки: RSI ниже 30 (перепроданность) + пересечение MACD за последние 5 баров
longCondition = ta.lowest(rsi, 5) < oversold and macdCrossUnderRecent
// Процент для стоп-лосса и тейк-профита
takeProfitPercent = 0.02
stopLossPercent = 0.02
// Открытие шортовой позиции
if (shortCondition)
strategy.entry("Short", strategy.short)
// Открытие лонговой позиции
if (longCondition)
strategy.entry("Long", strategy.long)
// Рассчитываем стоп-лосс и тейк-профит для шорта
shortStopLoss = strategy.position_avg_price * (1 + stopLossPercent)
shortTakeProfit = strategy.position_avg_price * (1 - takeProfitPercent)
// Рассчитываем стоп-лосс и тейк-профит для лонга
longStopLoss = strategy.position_avg_price * (1 - stopLossPercent)
longTakeProfit = strategy.position_avg_price * (1 + takeProfitPercent)
// Устанавливаем выход по стоп-лоссу и тейк-профиту для шортов
if (strategy.position_size < 0) // Проверяем, что открыта шортовая позиция
strategy.exit("Take Profit/Stop Loss Short", "Short", stop=shortStopLoss, limit=shortTakeProfit)
// Устанавливаем выход по стоп-лоссу и тейк-профиту для лонгов
if (strategy.position_size > 0) // Проверяем, что открыта лонговая позиция
strategy.exit("Take Profit/Stop Loss Long", "Long", stop=longStopLoss, limit=longTakeProfit)
// Графики для отображения RSI и MACD
plot(rsi, "RSI", color=color.purple)
hline(overbought, "Overbought", color=color.red)
hline(oversold, "Oversold", color=color.green)
plot(macdLine, "MACD Line", color=color.blue)
plot(signalLine, "Signal Line", color=color.orange)