量化交易-定时器(四)

2020-05-17  本文已影响0人  爱玩保龄球

基于米宽

定时器的使用

scheduler.run_daily(function)  
    #每个月只运行一次,, 每月第一个交易之运行 
    scheduler.run_monthly(get_data,tradingday=1)
image.png
# 可以自己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

上一篇下一篇

猜你喜欢

热点阅读