加密货币均线策略与传统MACD(介绍下回测框架的择时功能)
使用 加密货币分钟级多因子回测框架
对应视频讲解 加密货币量化交易
本文介绍下回测框架如何使用择时信号进行回测。
用传统的均线策略与MACD策略作为例子进行演示,想了解A股均线策略结果点 此处
首先介绍下常见的均线策略,以传统5日均线与10日均线做一下回测,设置金叉买,死叉卖
计算方法
def calculate_ma_cross(group, short_period=120, long_period=240):"""计算均线金叉死叉因子:param group: 单个币种的数据DataFrame:param short_period: 短期均线周期(默认5):param long_period: 长期均线周期(默认10):return: 添加了均线因子的DataFrame"""# 计算均线group['ma_short'] = group['open'].rolling(short_period, min_periods=1).mean()group['ma_long'] = group['open'].rolling(long_period, min_periods=1).mean()# 计算均线差值group['ma_diff'] = group['ma_short'] - group['ma_long']# 识别金叉信号(短期均线上穿长期均线)group['golden_cross'] = ((group['ma_diff'] > 0) &(group['ma_diff'].shift(1) <= 0)).astype(int)# 识别死叉信号(短期均线下穿长期均线)group['death_cross'] = ((group['ma_diff'] < 0) &(group['ma_diff'].shift(1) >= 0)).astype(int)# 计算金叉/死叉强度(均线差值百分比)group['cross_strength'] = group['ma_diff'] / group['ma_long']return group
通过这个算出golden_cross和death_cross,回测时,以golden_cross作为过滤,来决定每根k线是否满足持仓条件,持仓周期没有限制,不止盈止损,以death_cross形成时为清仓信号。
即当持仓遇到death_cross信号时进行相应清仓。
可以理解成在投资标的上打上一系统字段标记,golden_cross和death_cross,策略回测时买入可以正常走截面排序逻辑(用golden_cross做过滤)来实时择时,卖出则按death_cross的信号出现为择时平仓信号。
标的做的BTC

可以看到纯均线的择时没什么用,盈亏次数比例大概1:2

接下来介绍一下经典的MACD均线策略,同样算出信号量后进行复现
def calculate_macd(group):"""计算MACD指标:param group: 单个币种的数据DataFrame:return: 添加了MACD指标的DataFrame"""# 参数设置fast_period = 12*24slow_period = 26*24signal_period = 9*24# 计算EMAema_fast = group['open'].ewm(span=fast_period, adjust=False).mean()ema_slow = group['open'].ewm(span=slow_period, adjust=False).mean()# 计算MACD线和信号线group['macd_line'] = ema_fast - ema_slowgroup['signal_line'] = group['macd_line'].ewm(span=signal_period, adjust=False).mean()group['macd_hist'] = group['macd_line'] - group['signal_line']# 识别金叉/死叉group['macd_golden_cross'] = ((group['macd_line'] > group['signal_line']) &(group['macd_line'].shift(1) <= group['signal_line'].shift(1))).astype(int)group['macd_death_cross'] = ((group['macd_line'] < group['signal_line']) &(group['macd_line'].shift(1) >= group['signal_line'].shift(1))).astype(int)return group
同样以BTC作为标的,MACD金叉作为买入信号,死叉为清仓信号,不做止盈止损。


胜率还是在35%左右,均线策略的共性就是胜率30+,盈亏比一般比较好看。
总结,加密货币市场和A股市场一样,裸均线或者MACD的胜率都在1/3左右,大部分时候都是亏损,少数时候赚一波大的,纯靠基础技术位约等于浪费时间,建议投资者们不要沉迷其中需要结合其它的更多信息来进行筛选。
