构建动量量化选股系统,量化自动炒股
量化交易软件(15)自行进行所有量化AI框架的股东选择设计。
我们之前学过单株分析和回测的功能。接下来,我们开始设计链和定量分析的功能。
在设计struts之前,先学习一些python的基本操作技巧。
一、股票代码处理技术
1、数字类型转换
采集的数据格式都不一样。尤其是股票代码,有些有数字1,字母1, 60000.sh , 00001.sz , 00001.xshe , 00300.xshg 等后缀。无论如何,我们可以很容易地转换成所有标准的股票代码格式。
深圳证券代码:“00001.sz”
上海证券代码:“”600000。嘘"
索引代码:“”000300。ZS”
各种数据转换功能命令如下:
# Convert number int to string strs _ code=str(n _ code)string str to number intn _ code=int)s _ code代码演示:
N_code=10# number int是字符串strs _ code=str(n _ code)print(s _ code,type) s _ code)) string str是数字intn_code=int。
10级 str
10级 int
2.字符串处理
可以看到字符串“10”。不够长。必须在前面添加“0”。
在字符串中的数字前面加0,然后使用函数zfill(参见下面的演示代码和结果。
S_code=10#在字符串编号前添加0s_code=s_code.zfill(6)。输出结果:
000010类“str”
3.添加股票后缀。
请参见以下股票代码演示:
#全共享代码转换def ttsn (s): s=s.strip) if) len) 6和len (s) s) 0): s=s.zfill (6) 6)。sz if len (s) wide-share代码转换定义qsn (s): s=s.strip)
Pandas基于numpy构建,支持时间序列分析。Pandas有两种主要的数据结构:序列和数据帧。
Series类似于一维数组和字典(map)数据结构的组合。它由一组数据和对应于该数据的一组数据标签(索引)组成。这个数据和tab的基础是一维ndarray数组。索引可以理解为行索引。系列表示索引在左,数据在右。
DataFrame是一种类似于表的数据结构。索引包含一个列索引和一个行索引,每个列包含一组排序的列,这些列可以是不同的值类型(数字、字符串、布尔值等。).DataFrame中的每一行每一列都是Series,这个Series的name属性就是当前的行索引名/列索引名。
股票数据一般存储在熊猫包的数据框中。
上述方法不能处理数据帧的所有列数据。在循环操作中,Python速度慢的弱点得到了充分的发挥,所以可以利用一些Python技巧来提高速度。
您可以通过以下命令立即转换DataFrame数组的股票格式:
#短字符串补全快速运算base . code=[ 0 *(6-len)x))xforxinbase . code . astype(str)]III。股票代码操作
我们通过一些算法选取了一系列数据,比如财务数据、技术指标等。如何从这些数据中建立我们的目标备选股票池。完成股票池之间的逻辑运算。
如股票池合并、黑名单过滤等。充分利用Python的特点和优势,快速计算股票池。
我们可以充分利用这些不同的数据特征,快速完成所需的工作。
1.pandas和numpy之间的数据转换
以下是DataFrame股票代码列表的示例。专注于说明,记住例子。演示代码如下。
importadasasportnumpyasnpimporthp _ dataashp #性能报告数据 report_data以下列格式返回数据:代码、代码名、名称esp和EPS esp。
Its_yoy,同比净利润(%)distrib,分配方案report_date,发布日期 #获取2015年第四季度业绩报告数据t 2015=HP . Get _ report _ data(2015年4月)#选择eps_yoy同比每股收益(%)排名前20的股票数据。Top 20=t2015。Sort _ values (by= EPS _ YOY ,升序=false)。Head (20) #获取股票代码的系列序列,用原始数据index S _ code=top 20 . code # data frame重建索引,Sequence s _ code2=s _ code。reset _ index (drop=true) #从0到列表数据l_code=S_code.tolist()#把列表list变成数组数据,它和数列数据的区别在于没有索引。A_code=np.array( l_code)#数组序列数据转换为数列,加上从0开始的自然索引。S _ code3=pd。Series (a _ code,name= code) #部分数据内容输出结果print (\ n - s _ code -股票代码的序列,带原始数据索引)print(s _ code)print( \ n-Sequence from 0 )print(s _ code 2)print( \ n-l _ code-把股票代码序列变成列表数据)print(l _ code)-print( \ n-a _ code-把列表变成数组数据。)print(a _ code)print( \ n-s _ code 3-将数组序列数据变为序列序列,并添加从0开始的自然索引。)打印(S_code3)程序运行如下:
2.列表和集合相互转换。
Python数据格式包括list和set。
列表有重复数据,并且是有序的。
该集合没有重复数据,并且是无序的。
我们可以利用集合的不重复特性,将股票代码转化为集合,快速完成股票代码删除、股票代码池合并、股票黑名单删除等操作。
(1)列表操作
#假设我们筛选出股票池列表bk1=[ 600000 , 600001 , 600002 , 600003 , 600004 , 00001 , 00010] #我们通过策略2筛选出股票池列表bk2。Bk2=[600,000 , 600,001 , 600,002 , 600,981 , 600,080 ]#检查bk1,list.insert(i,data) BK1=BK1.insert ( 300751) #在指定位置插入一个元素#添加数据bk2=bk2.append(600390)#删除最后一个数据bk2=bk2.pop() #删除
Python的集合与其他语言类似,是一个不重复元素的无序集合。它的基本功能包括关系测试和消除重复元素。set对象还支持并(union)、交(intersection)、差(difference)和对称差(对称差集)等数学运算。
set支持x in set、len(set)和for x in set。作为一个无序集合,sets不记录元素的位置或插入点。因此,sets不支持索引、切片或其他类似序列的操作。
t,s支持一系列标准运算,包括并、交、差和对称差,比如:
t和s的并集
b=t s # t和s的交点
c=TS #差异集(项目在T中,但不在S中)
D=t s #对称差集(该术语在t或s中,但不会同时出现在两者中)
下面是集合操作的演示。
# set st1,ST2 print( \ n-st1-)st1=set([ 002027 , 600061 , 60080 , 600659 ])print(st1)print( \)600088 , 00002 ])print(ST2)# set中的加法可以通过list list增加,然后转换成set。#您也可以通过集合联合操作添加元素。Print (\ n-60090在ST1中添加)ST1=ST1 . union(set([ 600090 ]))print(ST1)print( \ N-A=ST1 st2-)#集合运算a=st1 st2 # st1和ST2的并集(A)print( \ N-B=ST1 ST2 # ST2-)B=ST1 ST2 # ST1和N-C=st1-st2-) C=st1-st2 #差集n-d=ST1 ST2-)但不会同时出现)print(d)print( \ n-ST2 remove 60088-)# collection element deletion ST2=ST2 . difference(set([ 600088 ]))print(ST2)print(type(ST1)。
(3)列表和集合转换
根据算法的需要,我们利用链表和集合的特性来实现我们的要求。
#假设我们通过策略1筛选出股票池列表bk1,但是股票是重复的BK1=[600000 , 60001 , 60002 , 600001 , 00001 , 00010 , 000000 N-list BK1-)print(BK1- \ N-set a-)#转换为set a去掉重复的a=set(BK1)print(a) \ print
今天介绍了关于股票代码和股票板块操作的基础知识。下次开始设计选股器的屏幕。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。