美文网首页
量化交易-定时器(四)

量化交易-定时器(四)

作者: 爱玩保龄球 | 来源:发表于2020-05-17 20:32 被阅读0次

    基于米宽

    定时器的使用

    • scheduler 定时器数据获取
    • 只能在init 里面使用
    • 每日运行一次
    scheduler.run_daily(function)  
    
    • 每周运行一次
    • 每月运行一次
    • get_data 为每月运行的函数,在里面实现函数需要执行的动作
        #每个月只运行一次,, 每月第一个交易之运行 
        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
    
    

    相关文章

      网友评论

          本文标题:量化交易-定时器(四)

          本文链接:https://www.haomeiwen.com/subject/wbteohtx.html