您的位置:首页 > 其它

聚宽

2016-03-03 17:24 274 查看






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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: