
本策略名为“PlanB RSI跟踪策略”。该策略运用相对强弱指数(RSI)作为主要技术指标,设定买入和卖出信号,实现自动化交易。
该策略主要基于以下原理:
如果过去6个月RSI指数最高超过90%,并下跌至低于65%,则产生卖出信号。
如果过去6个月RSI指数最低低于50%,并从最低点反弹超过2%,则产生买入信号。
具体来说,卖出条件判断逻辑是:
如果(过去6个月RSI指数最大值>90% 且 当前RSI<65%)
则卖出
买入条件判断逻辑是:
如果(过去6个月RSI指数最小值<50% 且 RSI指数从最低点反弹>2%)
则买入
以上卖出和买入规则来自熟知量化策略的PlanB的文章。该策略致力于复制其研究结果,使更多交易者能够验证这一交易策略的效果。
这一交易策略具有以下几点优势:
使用相对简单的RSI指标作为唯一技术指标,降低了策略复杂度。
买入和卖出规则清晰,容易理解,方便实盘验证。
买入和卖出信号的判断全面考虑市场涨跌信息。卖出信号判断结合长期指标高点和短期调整; 买入信号判断结合了长期指标低点和短期反弹。
策略参考了知名量化大牛PlanB的研究成果,可作为他文章结论的独立验证。
作为初学者策略,相对简单易操作的规则,利于量化交易技能的培养。
这一交易策略也存在一些主要风险:
作为基于单一技术指标RSI的策略,无法应对更复杂的市场情况。RSI指标本身也会产生误导性信号。
固定的买入卖出参数设置可能错过部分交易机会,或者形成交易信号偏迟。需要优化参数以适应不同市场周期。
策略过于简单追随PlanB文章结论,没有考虑独立的模型优化,可能导致实盘交易效果不佳。
买入卖出规则相对粗放,没有结合止损和止盈确保收益、控制风险。这在实盘中容易形成较大亏损。
对策略进行以下几点优化可以降低风险,提高实盘表现:
1. 增加副指标判断,避免RSI指标误导;
2. 优化参数设置适应不同周期特征;
3. 增加止损止盈机制,有效控制风险;
4. 结合独立数据训练出策略参数,确保参数稳健性。
为提高策略实盘表现,可从以下几个维度进行优化:
增加副指标判断:仅依赖RSI指标容易产生误导信号。可以引入诸如KD、MACD等副指标进行综合判断,提高信号准确性。
动态参数优化:当前买入卖出参数设置为固定数值,这难以适应市场的长短期变化。引入动态参数优化模块,实时调整参数,能显著提高策略表现。
止损/止盈机制:策略当前没有止损止盈设置。添加trailing stop等止损机制,以及移动止盈点,可以有效控制单笔损失和锁定盈利。
独立参数训练:直接使用PlanB文章的参数,没有经过独立验证。应用机器学习等方法,基于历史数据训练出最优参数组合。
复制组合优化:将多个类似简单策略组合,可以提高整体稳定性和收益,降低单一策略风险。
本策略“PlanB RSI跟踪策略”遵循PlanB的经典文章设计思路,使用RSI指标构建了较为简单的量化交易策略。策略优势在于规则清晰、易于实现,适合量化入门学习。但策略也存在依赖单一指标、参数不够优化等问题。未来可从增加副指标、动态参数优化、止损/止盈设置、独立参数训练等方面进行策略增强,大幅提高实盘表现。
/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © fillippone
//@version=4
strategy("PlanB Quant Investing 101", shorttitle="PlanB RSI Strategy", overlay=true,calc_on_every_tick=false,pyramiding=0, default_qty_type=strategy.cash,default_qty_value=1000, currency=currency.USD, initial_capital=1000,commission_type=strategy.commission.percent, commission_value=0.0)
r=rsi(close,14)
//SELL CONDITION
//RSI was above 90% last six months AND drops below 65%
//RSI above 90% last six month
selllevel = input(90)
maxrsi = highest(rsi(close,14),6)[1]
rsisell = maxrsi > selllevel
//RSIdrops below 65%
drop = input(65)
rsidrop= r < drop
//sellsignal
sellsignal = rsisell and rsidrop
//BUY CONDITION
//IF (RSI was below 50% last six months AND jumps +2% from the low) THEN buy, ELSE hold.
//RSI was below 50% last six months
buylevel = input(50)
minrsi = lowest(rsi(close,14),6)[1]
rsibuy = minrsi < buylevel
//IF (RSI jumps +2% from the low) THEN buy, ELSE hold.
rsibounce= r > (minrsi + 2)
//buysignal=buyrsi AND rsidrop
//buysignal
buysignal = rsibuy and rsibounce
//Strategy
strategy.entry("Buy Signal",strategy.long, when = buysignal)
strategy.entry("Sell Signal",strategy.short, when = sellsignal)