jzm17173

【量化】聚宽

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)

 

分类:

技术点:

相关文章: