• 【量化】聚宽


    def initialize(context):
        # context: UserContext对象, 存放有当前的账户/股票持仓信息
        # portfolio Portfolio对象
        # current_dt 当前单位时间的开始时间, datetime.datetime对象
        # universe 此策略操作的股票池
        
        # 定义一个全局变量, 保存要操作的股票
        # 000001(股票:平安银行)
        g.security = '000001.XSHE'
        # 初始化此策略
        # 设置我们要操作的股票池, 这里我们只操作一支股票
        # 当前持仓的股票仍然会在股票池里, 所以最终的股票池包括security_list和持仓股票
        set_universe([g.security])
        
        print(context.universe)
        
        #
        # get_industry_stocks 获取一个行业的所有股票
        stocks = get_industry_stocks('I64')
        print(stocks)
        # 获取一个指数给定日期在平台可交易的成分股列表
        stocks = get_index_stocks('000300.XSHG')
        print(stocks)
    
    # 每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次
    def handle_data(context, data):
        print('---------------------handle_data---------------')
        # data
        # {'000001.XSHE': SecurityUnitData({'volume': 62658355, 'high_limit': 7.03, 'money': 402708864.0, 'price': 6.43, 'low_limit': 5.75, 'high': 6.51, 'paused': 0.0, 'pre_close': 6.39, 'low': 6.39, 'factor': 0.41732241429013761, 'close': 6.51, 'security': '000001.XSHE', 'open': 6.41})}
        
        security = g.security
        # 取得过去五天的平均价格
        # data[security] SecurityUnitData
        # 一个单位时间内的股票的数据
        average_price = data[security].mavg(5)
        # 取得上一时间点价格
        current_price = data[security].price
        # 取得当前的现金
        # Portfolio 当前的资金,股票信息
        # cash 当前持有的现金
        cash = context.portfolio.cash
    
        # 如果上一时间点价格高出五天平均价1%, 则全仓买入
        if current_price > 1.01*average_price:
            # 计算可以买多少只股票
            number_of_shares = int(cash/current_price)
            # 购买量大于0时,下单
            if number_of_shares > 0:
                # 买入股票
                # order(security, amount, style=None)
                # order('000001.XSHE', 100) # 下一个市价单
                # order('000001.XSHE', 100, MarketOrderStyle()) # 下一个市价单, 功能同上
                # order('000001.XSHE', 100, LimitOrderStyle(10.0)) # 以10块价格下一个限价单
                order(security, +number_of_shares)
                
                # order_target(security, amount, style=None)
                # 买卖股票, 使最终股票的数量达到指定的amount
                
                # order_value(security, value, style=None)
                # 买卖价值为value的股票
                
                # order_target_value(security, value, style=None)
                # 调整股票仓位到value价值
                
                # 记录这次买入
                log.info("Buying %s" % (security))
        # 如果上一时间点价格低于五天平均价, 则空仓卖出
        # Portfolio positions 当前持有的可卖出的股票, 一个dict, key是股票代码, value是Position对象
        # Position 持有的某个股票的信息 amount 数量
        elif current_price < average_price and context.portfolio.positions[security].amount > 0:
            # 卖出所有股票,使这只股票的最终持有量为0
            order_target(security, 0)
            # 记录这次卖出
            log.info("Selling %s" % (security))
        # 画出上一时间点的价格
        # 我们会帮您在图表上画出收益曲线和基准的收益曲线,您也可以调用record函数来描画额外的曲线
        # 因为我们是按天展现的,如果您使用按分钟回测,我们画出的点是您最后一次调用record的值
        record(stock_price=data[security].price)
    
    # 该函数会在每天开始交易前被调用一次, 您可以在这里添加一些每天都要初始化的东西
    def before_trading_start(context):
        print('----------before_trading_start---------------')
        
    # 该函数会在每天结束交易后被调用一次, 您可以在这里添加一些每天收盘后要执行的内容. 这个时候所有未完成的订单已经取消
    def after_trading_end(context):
        print('----------after_trading_end------------------')
        # 获取当天的所有订单
        print(get_orders())
        #得到当前未完成订单
        orders = get_open_orders()
        #循环,撤销订单
        for _order in orders.values():
            cancel_order(_order)
            #cancel_order(_order.order_id)
  • 相关阅读:
    Atitit  atiMail atiDns新特性 v2  q39
    Atitit  atiMail atiDns新特性 v2  q39
    Atitit.aticmd v4  新特性q39 添加定时器释放功能
    Atitit.aticmd v4  新特性q39 添加定时器释放功能
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException  v2 q31
    知也atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException  v2 q31无涯 - I
  • 原文地址:https://www.cnblogs.com/jzm17173/p/5239422.html
Copyright © 2020-2023  润新知