本策略运用MACD指标判断市场趋势和寻找潜在买卖点,同时结合RSI指标确认超买超卖现象,在MACD指标发出买入/卖出信号时,只有当RSI也同时确认市场处于超卖/超买状态时,才会生成交易信号,进行买入或卖出。该策略可以有效过滤假信号,提高策略稳定性。
MACD指标由快速移动平均线(EMA)与慢速移动平均线的差值构成,反映短期和长期平均价格变动趋势的差异。本策略中,快速线的周期为12日,慢速线的周期为26日。
当快速线上穿慢速线时为金叉信号,表示市场步入上涨趋势;当快速线下穿慢速线时为死叉信号,表示市场步入下跌趋势。
RSI指标反映市场的超买超卖现象。本策略中,RSI的参数周期设置为14。
RSI BELOW 30 when buyers outpaced sellers for an extended period suggests ASSET was OVERSOLD.
RSI ABOVE 70 when selling pressure outpaced buying pressure over the tracked timeline suggests ASSET was OVERBOUGHT.
当RSI低于30时表示市场处于超卖状态;当RSI高于70时,表示市场处于超买状态。
仅依靠MACD指标生成交易信号时,会出现一定的假信号。本策略运用RSI指标过滤信号,只有当MACD发出信号的同时,RSI也确认市场超买超卖状态,才会生成实际的交易信号。
具体来说,当MACD形成金叉信号,如果这时RSI<=34,确认市场处于超卖状态,则产生买入信号;当MACD形成死叉信号,如果这时RSI>=75,确认市场处于超买状态,则产生卖出信号。
这种双重确认机制,可以过滤掉许多不可靠的交易信号,从而提高策略的稳定性和可靠性。
本策略运用MACD与RSI两个指标相结合,进行双重确认。这可以有效减少假信号的干扰,过滤掉一些不可靠的交易信号,从而提高信号的可靠性和稳定性。
MACD作为一个量价指标,可以清楚判断市场的涨跌趋势。结合RSI指标的超买超卖判断,可以准确抓住市场重要的反转点,进出仓信号明确。
本策略MACD和RSI的参数可以进行优化调整,适应不同周期和不同品种,优化空间较大。通过参数调整可以针对性的因地制宜,获得更好的策略效果。
该策略运用的MACD和RSI等指标都是非常典型和常用的技术指标,易于理解,代码实现也非常简单直观。这为参数调整与优化带来了便利。
本策略采用的是比较谨慎的双重确认策略,为过滤假信号而可能错过一些单一指标条件下就可以获得利润的交易机会。
当行情出现剧烈变化时,MACD和RSI指标都可能会延迟作出判断,导致策略生成错误的交易信号产生亏损。
本策略的效果很大程度上取决于MACD和RSI等参数的设置。如果参数设置不当,容易获得反向的交易信号。
可以设置价格止损或指标止损规则,在亏损扩大到一定程度时止损出场,有效控制单笔损失。
可以通过调整MACD的快慢线周期、RSI的超买超卖阈值等参数,优化参数设置,使其更加适合不同周期和品种的行情特征。
可以在不同的品种如股票指数、数字货币、外汇、商品等上进行回测,找到策略效果最好的品种。
可以在现有MACD和RSI的基础上,引入 stoch、OBV、CCI等其它指标,实现多指标確認,进一步提高信号质量。
本策略基于MACD指标判断市场趋势方向和交易信号。为了过滤假信号,加入RSI指标确认超买超卖现象,只有两者同时满足条件时才产生交易信号。这种双重指标確認机制,可以有效提高信号的质量和稳定性。
通过参数优化、止损机制的应用、多指标確認等改进手段,策略的效果可以得到进一步提升。该策略操作简单,稳定性较好,是一种适合初学者实践和优化的量化交易策略。
/*backtest
start: 2023-11-17 00:00:00
end: 2023-12-17 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(default_qty_type = strategy.percent_of_equity, default_qty_value = 25, pyramiding = 10, title="MACD crossover while RSI Oversold/Overbought", overlay=true, shorttitle="MACD Cross + RSI Oversold Overbought", initial_capital = 1000)
//MACD Settings
fastMA = input(title="Fast moving average", defval = 12, minval = 7) //7 16
slowMA = input(title="Slow moving average", defval = 26, minval = 7) //24 26
signalLength = input(9,minval=1) //9 6
//RSI settings
RSIOverSold = input(34 ,minval=1) //26
RSIOverBought = input(75 ,minval=1) //77
src = close, len = input(14, minval=1, title="Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
wasOversold = rsi[0] <= RSIOverSold or rsi[1] <= RSIOverSold or rsi[2] <= RSIOverSold or rsi[3] <= RSIOverSold or rsi[4] <= RSIOverSold or rsi[5] <= RSIOverSold
wasOverbought = rsi[0] >= RSIOverBought or rsi[1] >= RSIOverBought or rsi[2] >= RSIOverBought or rsi[3] >= RSIOverBought or rsi[4] >= RSIOverBought or rsi[5] >= RSIOverBought
[currMacd,_,_] = macd(close[0], fastMA, slowMA, signalLength)
[prevMacd,_,_] = macd(close[1], fastMA, slowMA, signalLength)
signal = ema(currMacd, signalLength)
crossoverBear = cross(currMacd, signal) and currMacd < signal ? avg(currMacd, signal) : na
crossoverBull = cross(currMacd, signal) and currMacd > signal ? avg(currMacd, signal) : na
plotshape(crossoverBear and wasOverbought , title='MACD-BEAR', style=shape.triangledown, text='overbought', location=location.abovebar, color=orange, textcolor=orange, size=size.tiny)
plotshape(crossoverBull and wasOversold, title='MACD-BULL', style=shape.triangleup, text='oversold', location=location.belowbar, color=lime, textcolor=lime, size=size.tiny)
// Configure backtest start date with inputs
startDate = input(title="Start Date",
defval=8, minval=1, maxval=31)
startMonth = input(title="Start Month",
defval=3, minval=1, maxval=12)
startYear = input(title="Start Year",
defval=2021, minval=1800, maxval=2100)
afterStartDate = (time >= timestamp(syminfo.timezone,
startYear, startMonth, startDate, 0, 0))
if (afterStartDate==true)
posSize = abs(strategy.position_size)
strategy.order("long", strategy.long, when = crossoverBull and wasOversold)
strategy.order("long", long=false, qty=posSize/3, when = crossoverBear and wasOverbought)