量化交易-定时器(四)
2020-05-17 本文已影响0人
爱玩保龄球
基于米宽
定时器的使用
- scheduler 定时器数据获取
- 只能在init 里面使用
- 每日运行一次
scheduler.run_daily(function)
- 每周运行一次
- 每月运行一次
- get_data 为每月运行的函数,在里面实现函数需要执行的动作
#每个月只运行一次,, 每月第一个交易之运行
scheduler.run_monthly(get_data,tradingday=1)
- 运行顺序和逻辑
- 整体例子
# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。
# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def get_data(context, bar_dict):
# 查询财务状况
q = query(
fundamentals.eod_derivative_indicator.pb_ratio
).filter(
fundamentals.eod_derivative_indicator.pb_ratio > 10
).filter(
fundamentals.stockcode.in_(context.index_list)
)
fund = get_fundamentals(q)
logger.info("get_fundamentals :" + str(fund.T))
def init(context):
# 在context中保存全局变量
context.s1 = "000001.XSHE" #某个股票代码
context.stock = "000002.XSHE"
# 实时打印日志
logger.info("RunInfo: {}".format(context.run_info))
# 获取行业
# api 参考
# https://www.ricequant.com/doc/rqdata-institutional#research-API-industry
context.stock_list = industry('C36') #汽车制造业
#logger.info("汽车制造业列表:" + str(context.stock_list))
#sector - 获取某板块股票列表
#https://www.ricequant.com/doc/rqdata-institutional#research-API-sector
context.secotr_list = sector('Energy') #汽车制造业
#logger.info("secotr_list - Energy:" + str(context.secotr_list))
#指数成分股票的接口
#"000001.XSHE"
#"000300.XSHG" 沪深300
#“000905.XSHG”
context.index_list = index_components("000300.XSHG")
#logger.info("index_list - 000300: :" + str(context.index_list))
#定义每月运行一次一个定时器
#每个月只运行一次,, 每月第一个交易之运行
scheduler.run_monthly(get_data,tradingday=1)
# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):
#print(context.stock)
#logger.info(context.stock)
#logger.info(context.stock_list)
pass
# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
# 开始编写你的主要的算法逻辑
# bar_dict[order_book_id] 可以拿到某个证券的bar信息
# context.portfolio 可以拿到现在的投资组合信息
# 获取最近2个5分钟bar数据时间戳以及成交量
#logger.info('INCLUDE NOW')
# 获取历史的交易行情数据 history_bars
# p1 股票代码
# p2 目前开始-倒推 x 天的数据,5 天
# p3 获取频率 1d 一天
# p4 close - 收盘价格
#history_bars_close = history_bars(context.s1, 5, '1d', 'close')
#logger.info("history_bars_close: :" + str(history_bars_close))
# 获取多个指标 开盘价 和 收盘价
history = history_bars(context.s1, 5, '1d', ['open','close'])
#logger.info("history: :" + str(history))
# 查询财务数据: 基本面数据,公司的数据
# 回测的时候用来 选股
# 获取财务数据,默认获取所有A 股
# 创建查询语句
#q = query(fundamentals.eod_derivative_indicator.pb_ratio)
# 创建查询语句
# 并支持filter
# orderby 默认 小-> 大
# q = query(
# fundamentals.eod_derivative_indicator.pb_ratio,
# fundamentals.eod_derivative_indicator.pcf_ratio
# ).filter(
# fundamentals.eod_derivative_indicator.pb_ratio > 20,
# fundamentals.eod_derivative_indicator.pcf_ratio < 50
# ).orderby(
# undamentals.eod_derivative_indicator.pb_ratio
# )
q = query(
fundamentals.eod_derivative_indicator.pb_ratio,
fundamentals.eod_derivative_indicator.pcf_ratio
).filter(
fundamentals.eod_derivative_indicator.pb_ratio > 20,
fundamentals.eod_derivative_indicator.pcf_ratio < 50
).limit(
(20)
)
# 回测不需要日志,默认当天数据
fund = get_fundamentals(q)
#logger.info("get_fundamentals :" + str(fund.T))
# TODO: 开始编写你的算法吧!
# 使用order_shares(id_or_ins, amount)方法进行落单
#order_shares(context.s1, 1000)
# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):
pass