本策略是一个结合了相对强弱指数(RSI)和移动平均线趋同/发散指标(MACD)的量化交易策略。策略的核心在于通过观察RSI超买超卖区域,结合MACD指标在近5个交易周期内的交叉信号来确定市场趋势方向,并设置了止盈止损来控制风险。这种方法不仅能够提供更准确的交易信号,还能有效降低虚假信号带来的风险。
策略主要基于以下几个核心组件: 1. RSI指标使用14周期作为参数设置,通过判断资产是否处于超买(>70)或超卖(<30)状态来识别潜在的反转机会。 2. MACD指标采用经典的12-26-9参数组合,通过在5个交易周期内寻找MACD线与信号线的交叉来确认趋势变化。 3. 入场逻辑包括两个条件: - 做多条件:RSI在5个周期内的最低值低于30,同时MACD线在近5个周期内出现与信号线的向上交叉。 - 做空条件:RSI在5个周期内的最高值高于70,同时MACD线在近5个周期内出现与信号线的向下交叉。 4. 风险控制采用对称的2%止损和2%止盈设置。
该策略通过结合RSI和MACD指标,配合灵活的入场条件和风险控制机制,构建了一个相对完整的交易系统。虽然存在一些需要优化的地方,但基本框架具有良好的可扩展性,通过进一步的优化和完善,有望发展成为一个更加稳健的交易策略。
/*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)