好消息,ChoiceAPI最近上线了新功能!
现在,Choice量化接口的使用者们可使用截面数据函数、历史行情函数访问组合相关指标(相关指标可以通过指标手册或者Choice量化网站进行查询)以及组合报表查询相关组合报表。
组合管理,可以为用户自动处理历史上发生的分红权益等事件,并提供了强大的组合分析功能,包含组合日报、交易日报、风险分析、盈亏分析等,便于用户即时跟踪自己的组合态势,验证策略的执行效果。
体验组合管理的强大功能,只要使用下单函数执行自己的选股策略就可以了!
下面以python为例,为大家演示使用ChoiceAPI进行组合管理的全过程。1.建立组合:
data = c.pcreate('ceshi1112','波动率选股', 1000000,'波动率选股')
这样就建立了一个代码为“ceshi1112”,名称为“波动率选股”,起始资金为100000,备注为“波动率选股”的组合。
(量化接口使用的具体语法都可以在量化网站命令生成界面生成)。2.策略选股:
示例:
执行波动率选股策略——选入每天早盘买入过去十天波动率最大的前十只股票买入,次日收盘卖出。
tdate = c.tradedates('2012-01-01','2012-12-31')
for today in tdate.Dates:
date_datetime = datetime.strptime(today, '%Y/%m/%d')
today_str = date_datetime.strftime('%Y-%m-%d')
#近期交易日
date1 = c.getdate(today, -11, 'Market=CNSESH')
date2 = c.getdate(today, -1, 'Market=CNSESH')
date3 = c.getdate(today, 1, 'Market=CNSESH')
date_datetime_tom = datetime.strptime(date3.Dates[0], '%Y/%m/%d')
tom_str = date_datetime_tom.strftime('%Y-%m-%d')
secpara = 's1,STDEV,'+date1.Dates[0]+','+today+',1,1'
#选出近十个交易日波动率前十的股票
data_cps = c.cps('B_001004',secpara,' ', 'top =max([s1], 10),sectordate='+today)
price_open = c.css(data_cps.Codes,'open','tradedate=' + today + ',adjustflag=1')
price_close = c.css(data_cps.Codes, 'close', 'tradedate=' + date3.Dates[0] + ',adjustflag=1')
通过以上语言的执行,就将这个简单小策略的代码、买入价、卖出价就分别存储在data_cps、price_open、price_close这三个EmQuantData类型的结构中了。3.构建下单结构体并下单
下单结构体是一个json类型的结构,我们只需要按照产品手册中的格式构建这个字典就可以了。
示例:
for m in np.arange(10):
code_b.append(data_cps.Codes[m])
volume_b.append(money_b/10/price_open.Data[data_cps.Codes[m]][0])
price_b.append(price_open.Data[data_cps.Codes[m]][0])
price_s.append(price_close.Data[data_cps.Codes[m]][0])
date_b.append(today_str)
date_s.append(tom_str)
time_b.append('093001')
time_s.append('145959')
optype_b.append(1)
optype_s.append(2)
cost_b.append(0)
orderdict_b = {
'code':code_b,
'volume':volume_b,
'price':price_b,
'date':date_b,
'time':time_b,
'optype':optype_b,
'cost':cost_b,
'rate':cost_b
}
data = c.porder('ceshi1112',orderdict_b,'买入操作')
data_hold = c.preport('ceshi1112.pf', 'hold', 'Tradedate=' + date3.Dates[0])
for m in np.arange(10):
for v in data_hold.Data.values():
if v[1] == data_cps.Codes[m]:
sell_volume = v[3]
break
volume_s.append(sell_volume)
orderdict_s = {
'code': code_b,
'volume': volume_s,
'price': price_s,
'date': date_s,
'time': time_s,
'optype': optype_s,
'cost': cost_b,
'rate': cost_b
}
data = c.porder('ceshi1112', orderdict_s, '卖出操作')
这样我们的买单信息和卖单信息就分别存储在orderdict_b和orderdict_s中,并且通过下单函数porder成功将策略执行到组合管理中去了。4.使用截面数据函数和历史行情函数查看组合指标
组合的指标可以通过指标手册或者Choice量化网站进行查询。
示例:
NAVUNITCHGP这个指标代表区间单位净值增长,MAXDOWN代表区间最大回撤。
data = c.css('ceshi1111.pf','NAVUNITCHGP,MAXDOWN','startdate=2012-01-01,enddate=2012-12-31')
使用以上语句就可以得到我们建立的组合在2012年的表现,执行结果为:
ErrorCode=0,ErrorMsg=success, Data={'ceshi1111.PF': [0.633667, -29.592663]}
从运行结果看来,60%的年化收益虽然很客观,但同样也有30%的最大回撤,风险与收益并存。
如果想知道每天的盈亏情况,我们就需要使用历史行情函数来调用相关的指标,比如DAYPL这个指标代表当日盈亏,NAVUNIT这个指标代表单位净值。
使用历史行情月频数据来看看策略各个月份的表现吧:
data = c.csd('ceshi1111.pf','NAVUNIT,DAYPL','2012-01-01','2012-12-31','period=3,ispandas=1')
在截面数据函数和历史行情函数中加上“ispandas=1”可以使结果为Dataframe格式,更加清晰明了。
如下图:
ceshi1111.PF
2012/1/31
1.041303
41303
ceshi1111.PF
2012/2/29
1.365004
323701.3
ceshi1111.PF
2012/3/30
1.166657
-198348
ceshi1111.PF
2012/4/27
1.438181
271524.7
ceshi1111.PF
2012/5/31
1.453204
15022.92
ceshi1111.PF
2012/6/29
1.383317
-69887.4
ceshi1111.PF
2012/7/31
1.357042
-26275.4
ceshi1111.PF
2012/8/31
1.473437
116395.6
ceshi1111.PF
2012/9/28
1.518197
44759.98
ceshi1111.PF
2012/10/31
1.45524
-62957.1
ceshi1111.PF
2012/11/30
1.260499
-194741
ceshi1111.PF
2012/12/31
1.633667
373167.3
可以从中看到每个月份单位净值的变化和每个月份的实际盈亏。5.使用组合报表查询函数
提取历史数据进行分析的过程太过复杂?
没关系,组合管理已经自动生成了账户相关信息的报表,只要直接调用相关报表就可以了。
目前组合管理可以提供交易记录报表、历史持仓报表、清仓股票贡献、周期回报-阶段回报、周期回报-定期回报、盈亏分析、风险分析、var分析、组合日报、交易日报。使用组合报表,用户可以直接查询函数来直接获取这些报表。(相关代码可以通过指标手册或者Choice量化网站进行查询)
1、比如上述语句运行之后,我们就可以看到所有交易过的股票中每支股票贡献的总盈利以及相关操作记录。
data = c.preport("ceshi1111","Contri","EndDate=2018-12-04")
例如排名第一的
在这个思路的引导之下,多执行其他策略进行观察,就可以穿越时间区间,更加深刻地了解股票市场,进而更加具有针对性地执行投资策略。
2、再比如,使用交易记录查询语句,可以看到组合在相应时间区间的交易记录。
data = c.preport('ceshi1111','record','Startdate=2012-01-04,Enddate=2012-01-04')
ErrorCode=0, ErrorMsg=success, Data={'1': ['2012-01-04', '300280.SZ', '
3、使用持仓记录查询报表可以看到组合在相应交易日的持仓情况。
data = c.preport('ceshi1111','hold','Tradedate=2012-12-04')
ErrorCode=0,ErrorMsg=success, Data={'1': [1, '000799.SZ', '6、结语
相信经过上述的介绍,你已经对如何使用API的组合管理功能来执行自己的选股策略,调用自己组合的指标进行分析,或者直接调用组合报表函数来查看组合的相关报表有了一定的了解,赶紧行动起来自己去API里试试吧。
添加Choice小秘书微信(Choice8848),加入
(来源:Choice数据的财富号 2019-01-15 20:28) [点击查看原文]