开发成功,qmt小市值策略,随策略配入大盘择时的资金配置使用,

再加入动量策略,排序选择,涨幅最大的股票,进行购买。

不废话,上图

开始解读代码:

	ContextInfo.Stock = '000001.SH'
	ContextInfo.zj = 1
	ContextInfo.m_days = 25 #动量参考天数
	dpprice = get_price(ContextInfo,ContextInfo.Stock )
	if dpprice>3300:
		ContextInfo.zj = 0.3
	elif dpprice>3200:
		ContextInfo.zj = 0.4
	elif dpprice>3100:
		ContextInfo.zj = 0.5
	elif dpprice>3000:
		ContextInfo.zj = 0.6
	elif dpprice>2900:
		ContextInfo.zj = 0.7
	elif dpprice>2900:
		ContextInfo.zj = 0.9
	else:
		ContextInfo.zj = 1

根据大盘的数据,选择资金仓位,然后同时设置动量策略,

动量策略:

def score(ContextInfo,code_list):
	score_list = []
	start_time = timetag_to_datetime(ContextInfo.get_bar_timetag(ContextInfo.barpos-ContextInfo.m_days),'%Y%m%d')
	end_time = timetag_to_datetime(ContextInfo.get_bar_timetag(ContextInfo.barpos),'%Y%m%d')
	for i in code_list:
		#etf = adjust_stock(etf)
		data = ContextInfo.get_market_data_ex(fields=["close"],stock_code=[i], period = "1d", start_time = start_time, end_time = end_time,count=ContextInfo.m_days)
		df = data[i]
		y = df['log'] = np.log(df.close)
		x = df['num'] = np.arange(df.log.size)
		slope, intercept = np.polyfit(x, y, 1)
		annualized_returns = math.pow(math.exp(slope), 250) - 1
		r_squared = 1 - (sum((y - (slope * x + intercept))**2) / ((len(y) - 1) * np.var(y, ddof=1)))
		score = annualized_returns * r_squared
		score_list.append(score)
	df = pd.DataFrame(index=code_list, data={'score':score_list})
	df = df.sort_values(by='score', ascending=False)
	rank_list = list(df.index)  
	return rank_list

本策略采用小市值技术指标策略,叠加动量策略,所有选取品种,都是历史长期优势上市公司,基本面稳定。

总结:

通过本文的学习,相信你已经掌握如何在QMT学会小市值叠加技术指标策略了。希望本文可以帮助你!

 

Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐