常见的策略结构主要有 3 类:
1、定时任务;
2、事件驱动任务;

3、定时任务+事件驱动任务。
我们之前学习的单均线策略,双均线策略和四日法则等等都是事件驱动任务。事件驱动任务是一种基于特定事件的触发来执行相应操作的方式,例如价格达到了某个值、或是短期均线上穿了长期均线,当这样的事件发生后,执行了下单交易,就是事件驱动任务。
二、什么是定时任务
在量化策略中,定时任务是指按照预先设定的固定时间间隔或特定时间点来执行的任务。例如像小市值策略,每月或每季度获取一次股票市值数据,然后进行从小到大排序,并以此对自己的投资组合进行调整。
不过今年上半年因为ST和退市隐患的原因,小市值策略就一言难尽了,我们还是另外找个例子吧。
三、定时任务实例
实例:在每个交易日的10:00选出涨停了的股票
“每个交易日的10:00”,这就是固定的时间,“选出涨停了的股票”,就是所执行的操作。我们先来看看完整代码:
#encoding:gbk'''十点钟定时选出涨停股票'''import time, datetimeclass a():passA = a()def init(C):# 获取沪深A股的股票列表A.hsa = C.get_stock_list_in_sector('沪深A股')# 排除创业板和科创板股票A.hsa = [stock for stock in A.hsa if not stock.startswith(('300', '688','301'))]# 设置定时任务,每个交易日10点运行 f 函数C.run_time("f","1nDay","2024-07-12 10:00:00")def f(C):print("定时任务现在开始运行……")# 获取当前时间now = datetime.datetime.now()# 获取最新分笔数据full_tick = C.get_full_tick(A.hsa)# 遍历股票列表,检查是否涨停for stock in A.hsa:last_close = full_tick[stock]['lastClose']last_price = full_tick[stock]['lastPrice']# 计算涨停价,假设涨停限制为前收盘价的110%limit_up_price = last_close 1.1# 判断当前价格是否达到涨停价if last_price >= limit_up_price:# 获取股票名称stock_name = C.get_stock_name(stock)# 获取股票价格stock_price = last_price# 计算股票涨幅rise_percentage = ((stock_price - last_close) / last_close) 100# 打印涨停股票的代码、名称、价格和涨幅print(f"{now} 涨停股票: {stock} {stock_name}, 价格: {stock_price:.2f}元, 涨幅: {rise_percentage:.2f}%")
程序运行结果如下图:
在定时任务中,我们需要导入的库是time和datetime。
然后,我们就需要为将要执行的操作设定好一个“闹钟”,这个“闹钟”就是run_time()函数。
用法:ContextInfo.run_time(funcName,period,startTime)
在本例中ContextInfo可以简写成C,参数funcName是回调函数名,本例回调函数名为f ,period为重复调用的时间间隔,1nDay表示每1天运行一次回调函数,如果写成5nSecond,就是每5秒钟就运行一次回调函数。startTime仅是策略第一次运行时间,我们可以设定一个较早的历史时间,定时器会立即启动。
#夏日生活打卡季#