导读:近期朋友私信想了解关于“量化投资”的股票知识,下面小编就通过“指数增强(股票)”来讲解这一股票知识内容,下面就来进行简要的介绍,1.# coding=utf-82.from__future__ imp
本文有1206个文字,大小约为4KB,预计阅读时间4分钟1.# coding=utf-8
2.from__future__ importprint_function,absolute_import,unicode_literals
3.importnumpy asnp
4.fromgm.api import*
5.frompandas importDataFrame
6.
7.'''
8.本策略以0.8为初始权重跟踪指数标的沪深300中权重大于0.35%的成份股.
9.个股所占的百分比为(0.8*成份股权重)*100%.然后根据个股是否:
10.1.连续上涨5天 2.连续下跌5天
11.来判定个股是否为强势股/弱势股,并对其把权重由0.8调至1.0或0.6
12.回测时间为:2017-07-01 08:50:00到2017-10-01 17:00:00
13.'''
14.
15.
16.definit(context):
17.# 资产配置的初始权重,配比为0.6-0.8-1.0
18.context.ratio =0.8
19.# 获取沪深300当时的成份股和相关数据
20.stock300 =get_history_constituents(index='SHSE.000300',start_date='2017-06-30',end_date='2017-06-30')[0][
21.'constituents']
22.stock300_symbol =[]
23.stock300_weight =[]
24.
25.forkey instock300:
26.# 保留权重大于0.35%的成份股
27.if(stock300[key]/100)>0.0035:
28.stock300_symbol.append(key)
29.stock300_weight.append(stock300[key]/100)
30.
31.context.stock300 =DataFrame([stock300_weight],columns=stock300_symbol,index=['weight']).T
32.print('选择的成分股权重总和为: ',np.sum(stock300_weight))
33.subscribe(symbols=stock300_symbol,frequency='1d',count=5,wait_group=True)
34.
35.
36.defon_bar(context,bars):
37.# 若没有仓位则按照初始权重开仓
38.forbar inbars:
39.symbol =bar['symbol']
40.position =context.account().position(symbol=symbol,side=PositionSide_Long)
41.ifnotposition:
42.buy_percent =context.stock300['weight'][symbol]*context.ratio
43.order_target_percent(symbol=symbol,percent=buy_percent,order_type=OrderType_Market,
44.position_side=PositionSide_Long)
45.print(symbol,'以市价单开多仓至仓位:',buy_percent)
46.else:
47.# 获取过去5天的价格数据,若连续上涨则为强势股,权重+0.2;若连续下跌则为弱势股,权重-0.2
48.recent_data =context.data(symbol=symbol,frequency='1d',count=5,fields='close')['close'].tolist()
49.ifall(np.diff(recent_data)>0):
50.buy_percent =context.stock300['weight'][symbol]*(context.ratio +0.2)
51.order_target_percent(symbol=symbol,percent=buy_percent,order_type=OrderType_Market,
52.position_side=PositionSide_Long)
53.print('强势股',symbol,'以市价单调多仓至仓位:',buy_percent)
54.elifall(np.diff(recent_data)<0):
55.buy_percent =context.stock300['weight'][symbol]*(context.ratio -0.2)
56.order_target_percent(symbol=symbol,percent=buy_percent,order_type=OrderType_Market,
57.position_side=PositionSide_Long)
58.print('弱势股',symbol,'以市价单调多仓至仓位:',buy_percent)
59.
60.
61.if__name__ =='__main__':
62.'''
63.strategy_id策略ID,由系统生成
64.filename文件名,请与本文件名保持一致
65.mode实时模式:MODE_LIVE回测模式:MODE_BACKTEST
66.token绑定计算机的ID,可在系统设置-密钥管理中生成
67.backtest_start_time回测开始时间
68.backtest_end_time回测结束时间
69.backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
70.backtest_initial_cash回测初始资金
71.backtest_commission_ratio回测佣金比例
72.backtest_slippage_ratio回测滑点比例
73.'''
74.run(strategy_id='strategy_id',
75.filename='main.py',
76.mode=MODE_BACKTEST,
77.token='token_id',
78.backtest_start_time='2017-07-01 08:50:00',
79.backtest_end_time='2017-10-01 17:00:00',
80.backtest_adjust=ADJUST_PREV,
81.backtest_initial_cash=10000000,
82.backtest_commission_ratio=0.0001,
83.backtest_slippage_ratio=0.0001)