QMT动量策略回测全流程拆解,看完就能跑
昨天仔细的介绍了动量策略1的原理,计算公式,运用等,今天看怎么样利用QMT实现动量策略的回测,做策略的研究,给一个简单的学习代码 第一步打开qmt,先补充完整历史数据,点击界面的操作,下面有一个数据管理  点击自己需要的数据补充就可以,也可以自定义标的补充,自定义时间等  点击建立策略,编辑进入策略就可以,简单的回测框架的认识,账户在回测模块中不需要输入都可以  回测的开始时间,结束时间  回测的参数设置  自定义股票池回测  计算个股的动量趋势  主要注意数据的调用周期需要和右边设置周期一样,默认周期  驱动回测框架,和排序选股算法  动量的买卖轮动交易算法,不在排名的卖出,在的继续持有  其它就是检查函数,比如读取持股,账户等数据  点击回测按钮就可以,注意区分回测按钮和运行按钮,运行按钮是实盘调试当前数据,回测按钮是驱动历史回测的  点击回测就会开始回测算法  点击返回界面就可以看见回测的详细数据  标的主要是宽基,波动相对小一点  在黄金、纳指、创业板三个低相关资产中,用"加权对数回归的斜率×R²"选出趋势最强且最稳定的一个满仓持有;同时用N日均线做个股和A股指数双重止损,跌破即空仓——本质是一个"趋势跟踪+风险平价+全天候"的轮动策略。 ```python def MOM(c,date,df,index_df,etf): y = np.log(df['close'].values) df['line']=df['close'].rolling(c.line).mean() n = len(y) x = np.arange(n) weights = np.linspace(1,2, n) # 线性增加权重 slope, intercept = np.polyfit(x, y, 1, w=weights) annualized_returns = math.pow(math.exp(slope), 250) - 1 residuals = y - (slope * x + intercept) weighted_residuals = weights * residuals**2 r_squared = 1 - (np.sum(weighted_residuals) / np.sum(weights * (y - np.mean(y))**2)) last_price=df['close'].tolist()[-1] last_line=df['line'].tolist()[-1] #计算指数风控 index_df['line']=index_df['close'].rolling(c.index_line).mean() last_index=index_df['close'].tolist()[-1] last_index_line=index_df['line'].tolist()[-1] score = annualized_returns * r_squared if c.is_index=='是': #先检查是否触发指数风险 if last_index c.min_value) & (df['score'] <= c.max_value)] #安全区间,动量过高过低都不好 rank_list = list(df.index) if len(rank_list) == 0: rank_list=[] #如果全部都小于0,那么空仓或者买《国债、银华日历、黄金》避险 return rank_list ``` #动量 #策略 #qmt #量化 #交易 #金融 原理图 