本文将QMT自带的双均线策略改写的非常简洁,适合QMT入门。
代码如下:
#encoding:gbk
import numpy as np
import datetime
"""
示例说明:双均线实盘策略,通过计算快慢双均线,在金叉时买入,死叉时做卖出
"""
class _a():
pass
A = _a() #创建空的类的实例 用来保存全局变量
def init(C):
A.stock= C.stockcode + '.' + C.market #品种为模型交易界面选择品种,本例默认为沪深300指数
A.line10=10 #快线周期
A.line20=20 #慢线周期
#设置股票池 订阅品种行情
C.set_universe([A.stock])
def handlebar(C):
#K线的日期
Kline_date = timetag_to_datetime(C.get_bar_timetag(C.barpos),'%Y%m%d')
#真实的时间
real_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
#获取行情数据
data = C.get_history_data(max(A.line10, A.line20)+1, '1d', 'close',dividend_type='front_ratio')
#获取收盘价格列表
close_list = data[A.stock]
#获取两条均线前一天的数值
pre_line1 = np.mean(close_list[-A.line10-1: -1])
pre_line2 = np.mean(close_list[-A.line20-1: -1])
#获取两条均线当天的数值
current_line1 = np.mean(close_list[-A.line10:])
current_line2 = np.mean(close_list[-A.line20:])
#如果快线穿过慢线,则买入
if pre_line1 < pre_line2 and current_line1 > current_line2:
msg = f"{real_time}|{Kline_date} 双均线实盘 {A.stock} 上穿均线 买入"
print(msg)
#如果快线下穿慢线,则卖出
if pre_line1 > pre_line2 and current_line1 < current_line2:
msg = f"{real_time}|{Kline_date} 双均线实盘 {A.stock} 下穿均线 卖出 "
print(msg)
一些知识点讲解一下:
9-11行,这里定义一个空类,用来保存一些全局量化。Python有自己的全局变量定义和使用方法,但不如定义空类简洁。也可以将全局变量保存到ContextInfo,但不提倡,两个原因:1、ContextInfo中的内容很多,如果再将自定义变量保存进去,会拖慢策略运行速度。2、一些变量保存不到ContextInfo中去。
20行,函数里面的参数C,为ContextInfo的缩写,缩写一下的话,整个策略可以减少很多代码量的。
22行,这里获取了K线时间,后续用来显示回测重要时件是在哪条K线上发生的。
30-34,获取两条均线前一天和当天的数值,后续用来判断形式了金叉还是死叉。
以上就是简洁的双均线策略,后续再慢慢补充上细节,就会形成一个完整的双均线策略。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/73404
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!