zoukankan      html  css  js  c++  java
  • 【量化】聚宽

    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)
  • 相关阅读:
    java 字符串split有很多坑,使用时请小心!!
    Java并发编程:线程池的使用
    java自带线程池和队列详细讲解
    merge into的用法
    Oracle中如何使用REGEXP_SUBSTR函数
    oracle分组统计某列逗号隔开数据
    oracle一列中的数据有多个手机号码用逗号隔开,我如何分别取出来?
    css box-shadow使用---转
    201706问题记录
    201705问题记录
  • 原文地址:https://www.cnblogs.com/jzm17173/p/5239422.html
Copyright © 2011-2022 走看看