聚宽

聚宽_第1张图片

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)

 

你可能感兴趣的:(聚宽)