本策略综合运用移动平均线聚散指标(MACD)和相对强弱指数(RSI)两个强力指标,设定买入和卖出条件,以捕捉股价的反转机会。
计算MACD指标,包括快线、慢线和信号线。快线和慢线交叉为买卖信号。
计算RSI指标,设置超买区和超卖区阈值。RSI指标可以判断超买超卖情况。
结合MACD指标的金叉死叉信号和RSI指标的超买超卖区判断,制定买入和卖出条件:
买入条件:MACD快线上穿慢线形成金叉,同时RSI指标刚刚从超卖区回落,具有反转信号;
卖出条件:MACD快线下穿慢线形成死叉,同时RSI指标进入超买区,具有反转信号。
这样可以同时利用两个强力指标的优势,在反转点位精确买入卖出。
MACD指标可以判断股价趋势和买卖时机。RSI指标可以判断超买超卖情况。两者结合可以提高买卖精准度。
同时利用两个指标过滤信号,可以避免因单一指标产生的假信号。
MACD结合RSI,可以在反转点前买入,反转点后卖出,捕捉反转机会。
该策略操作频率适中,既可以跟踪趋势,也可以捕捉反转,灵活运用。
MACD指标在震荡行情中容易产生假信号。RSI指标参数设置需要优化,否则也会出现假信号。
股价短期内可能存在剧烈波动,跌破策略的止损点造成损失。
需要优化RSI和MACD的参数设置,否则可能出现过多信号或信号不足。
实盘交易中需要严格把控资金管理和风险控制。
优化MACD参数的快慢均线设置,寻找最佳的参数组合。
优化RSI的超买超卖阈值,防止假信号的产生。
加入止损机制,以控制单笔损失。
可以考虑加入其他指标,如布林带、KDJ等,形成多重过滤。
可以测试不同的买卖策略,如突破策略、趋势跟踪策略等。
本策略同时运用MACD和RSI两个强力指标,在反转点买入卖出,具有较强的实战价值。但需要持续优化参数设置,严格做好资金管理,才能在实盘中取得好的效果。该策略整体较为灵活,可适应不同行情,值得实盘验证与长期跟踪。
/*backtest
start: 2022-11-13 00:00:00
end: 2023-11-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
// © sabirt
strategy(title='MACD and RSI', overlay=true, shorttitle='MACD&RSI')
//MACD Settings
fastMA = input.int(title='Fast moving average', defval=12, minval=1)
slowMA = input.int(title='Slow moving average', defval=26, minval=1)
signalLength = input.int(9, minval=1)
//RSI settings
RSIOverSold = input.int(35, minval=1)
RSIOverBought = input.int(80, minval=1)
src = close
len = input.int(14, minval=1, title='Length')
up = ta.rma(math.max(ta.change(src), 0), len)
down = ta.rma(-math.min(ta.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, _, _] = ta.macd(close[0], fastMA, slowMA, signalLength)
[prevMacd, _, _] = ta.macd(close[1], fastMA, slowMA, signalLength)
signal = ta.ema(currMacd, signalLength)
avg_1 = math.avg(currMacd, signal)
crossoverBear = ta.cross(currMacd, signal) and currMacd < signal ? avg_1 : na
avg_2 = math.avg(currMacd, signal)
crossoverBull = ta.cross(currMacd, signal) and currMacd > signal ? avg_2 : na
strategy.entry('buy', strategy.long, when=crossoverBull and wasOversold)
strategy.close('buy', when=crossoverBear and wasOverbought)