量化交易软件(15 )自行进行所有量化AI框架的股东选定设计
之前我们学习了单株分析、回测功能。 接下来,我们开始设计股线和量化分析的功能。
在设计撑杆之前,学习一些python的基本操作技巧。
一、股票代码处理技术
1、数字类型转换
获取的数据格式都不同。 特别是股票代码,有的带有数字1、字母1、’60000.sh’、’000001.SZ’、’000001.xshe’、’000300.xshg’等后缀。 无论如何,我们都很容易转换成所有标准的股票代码格式。
深圳股票代码:“‘000001.SZ”
上海股票代码:“‘600000.SH”
指数代码:“‘000300.ZS”
各种数据转换函数命令如下:
#将数字int转换为字符串strs_code=str(n_code )字符串str转换为数字intn_code=int ) s_code代码演示文稿:
n_code=10#数字int是字符串strs_code=str(n_code ) print (s_code,type ) s _ code ) )字符串str是数字intn_code=int
10类‘str’
10类‘int’
2 .字符串处理
可以看到字符串“10”。 不够长6。 必须在前面补充’0’。
在字符串中的数字前面添加0,然后使用函数zfill (查看以下演示代码和结果。
s_code='10'#字符串数字前加上0s_code=s_code.zfill(6)输出结果:
000010 class‘str’
3、添加股票后缀
请看下面的股票代码演示:
#全股代码转换defttsn(s ) : s=s.strip ) if ) len )6 and len(s ) s )0) : s=s.zfill(6)6).SZ' if len(s ) 宽股代码转换defjqsn(s ) : s=s.strip ) if(len ) s )6andl lsn==6: ifs [ 0:1 ]=='0' : s=s '.xshe '
pandas基于numpy构建,支持时间序列分析。 pandas有两种主要的数据结构: Series和DataFrame。
Series类似于一维数组和词典(map )数据结构的组合。 它由一组数据和一组与数据相对应的数据标签(索引索引)组成。 此数据和索引标签的基础都是一维ndarray数组。 索引可以理解为行索引。 Series表示索引为左,数据为右。
DataFrame是一种类似于表的数据结构,索引包含列索引和行索引,而每一列都包含一组排序的列,可以是不同的值类型(数字、字符串、布尔值等)。 DataFrame中的每一行和每一列都是Series,该Series的name属性是当前行索引名/列索引名。
股票数据一般存储在pandas包的数据框架中。
上述方法无法处理数据帧的所有列数据。 在循环操作中又充分发挥了Python速度慢的弱点,所以可以使用一些Python的技巧来提高速度。
可以通过以下命令立即对DataFrame数组进行股票格式转换:
#短字符串补全快速运算base.code=['0'*(6-len ) x ) ) xforxinbase.code.astype(str ) ]三、股票代码运算
我们通过一些算法,如财务数据和技术指标等战略,筛选出了一系列数据。 如何从这些数据构建我们的目标替代股票池。 完成股票池之间的逻辑运算。
例如股票池合并、黑名单过滤等运算。 充分利用Python的特点和优势,快速进行股票池的计算。
我们可以充分利用这些不同的数据特性,快速完成所需的工作。
1、pandas与numpy数据的相互转换
以下是DataFrame股票代码列表的示例。 重点是看说明记住例子。 演示代码如下。
importpandasaspdimportnumpyasnpimporthp _ dataa shp #业绩报告数据' ' report_data返回数据格式如下: code,代码name,名称esp,每股利润esp
its_yoy,净利润同比(%)distrib,分配方案report_date,发布日期'''#获取获取2015年第4季度的业绩报告数据t2015=hp.get_report_data(2015,4) #选取eps_yoy,每股收益同比(%)的排名前20位股票数据。top20=t2015.sort_values(by='eps_yoy',ascending=False).head(20)#获取股票代码的Series序列,带原始数据索引S_code=top20.code#dataframe重建索引,从0开始顺序S_code2 = S_code.reset_index(drop=True)#将股票代码Series序列转为列表list数据l_code=S_code.tolist()#将列表list转为array序列数据,与Series序列区别是无索引。a_code=np.array( l_code)#将array序列数据转为 Series序列,增加了从0开始顺序自然索引。S_code3= pd.Series(a_code, name = 'code')#部分数据内容输出结果print('n----S_code-----获取股票代码的Series序列,带原始数据索引')print(S_code)print('n----S_code2-----重建索引,从0开始顺序')print(S_code2)print('n----l_code-----将股票代码Series序列转为列表list数据')print(l_code)print('n----a_code-----将列表list转为array序列数据,与Series序列区别是无索引。')print(a_code)print('n----S_code3-----将array序列数据转为 Series序列,增加了从0开始顺序自然索引。')print(S_code3)程序运行结果如下图:
2、列表(list)和集合(set)相互转换
Python数据格式有列表(list)和集合(set)。
列表有重复数据,并且 有序。
集合无重复数据,并且无序。
我们可以利用集合(set)的无重复特性,将股票代码转化为集合(set),能够快速完成股票代码去掉重复,股票代码池的合并,剔除股票黑名单等运算。
(1) 列表运算
(2) 集合运算
python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算。
sets 支持 x in set, len(set),和 for x in set。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets不支持 indexing, slicing, 或其它类序列(sequence-like)的操作。
集合t,s支持一系列标准操作,包括并集、交集、差集和对称差集,例如:
a = t | s # t 和 s的并集
b = t & s # t 和 s的交集
c = t – s # 求差集(项在t中,但不在s中)
d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中)
下面给出集合运算的演示。
程序运行结果如下图:
(3)列表和集合转换
我们根据算法需要,利用列表和集合的特性,来实现我们的要求
程序运行结果如下图:
今天我给大家介绍了关于股票代码和股票板块运算的基本知识。下次开始设计有关选股器画面的设计。