自己做量化交易软件(15)通通量化AI框架的选股器设计
前面我们学会了单只股票的分析,回测功能。下面我们开始设计选股器和量化分析的功能。
在设计选股器之前,我们先要学习一些python基本操作技巧。
一、股票代码处理技巧
1、数字类型转换
我们获取的数据格式都不相同,特别是股票代码,有些是数字1,有些是字符1,有些股票代码带后缀,例如’60000.SH’,‘000001.SZ’,‘000001.XSHE’,'000300.XSHG’等等。无论什么方式,我们都做一些简单的转化为通通标准股票代码格式。
深圳股票代码: ‘000001.SZ’
上海股票代码: ‘600000.SH’
指数代码:‘000300.ZS’
各种数据转化函数命令如下:

#数字int转换为字串str
s_code=str(n_code) #字串str转换为数字int
n_code=int(s_code)

代码演示:

n_code=10
#数字int转换为字串str
s_code=str(n_code)
print(s_code,type(s_code))
#字串str转换为数字int
n_code=int(s_code)
print(n_code,type(n_code))

输出结果:
10 <class ‘str’>
10 <class ‘int’>

2、字符串处理
我们看到字串’10’ ,不够长度6,需要在前面补’0’。
字串数值前面补0,用函数zfill(),看下面演示代码和结果:

s_code='10'
#字串数字前补够0
s_code= s_code.zfill(6)

输出结果:
000010 <class ‘str’>

3、补上股票后缀
看下面股票代码演示:

#通通股票代码转换
def ttsn(s):s=s.strip()if (len(s)<6 and len(s)>0):s=s.zfill(6)+'.SZ'if len(s)==6:if s[0:1]=='0':s=s+'.SZ'else:s=s+'.SH'return s#聚宽股票代码转换
def jqsn(s):s=s.strip()if (len(s)<6 and len(s)>0):s=s.zfill(6)+'.XSHE'if len(s)==6:if s[0:1]=='0':s=s+'.XSHE'else:s=s+'.XSHG'return s

二、股票数据中的股票代码处理技巧
pandas是基于numpy构建的,为时间序列分析提供了很好的支持。pandas中有两个主要的数据结构,一个是Series,另一个是DataFrame。
Series 类似于一维数组与字典(map)数据结构的结合。它由一组数据和一组与数据相对应的数据标签(索引index)组成。这组数据和索引标签的基础都是一个一维ndarray数组。可将index索引理解为行索引。 Series的表现形式为:索引在左,数据在右。
DataFrame是一个类似表格的数据结构,索引包括列索引和行索引,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame的每一行和每一列都是一个Series,这个Series的name属性为当前的行索引名/列索引名。
股票数据一般用pandas包的 DataFrame 来存放。
上述的方法无法对 DataFrame整列数据处理。用循环操作又充分发挥了Python的速度慢的弱点,因此可以用一些Python的技巧来提高速度。
DataFrame序列中的股票格式转换可以用类似下面的命令来瞬间完成。

#短字串补全快速运算
base.code=['0'*(6-len(x)) + x for x in base.code.astype(str)]

三、股票代码的运算
我们通过若干算法,例如财务数据或者技术指标等策略, 筛选了一批数据。怎样通过这些数据建立我们的目标备选股票池。并且完成股票池之间的逻辑运算。
例如 股票池的合并、黑名单的过滤等等运算。我们可以充分利用Python的特征和优势,来快速完成股票池运算。
我们可以充分利用这些不同数据特性,快速完成所需工作。
1、pandas和numpy数据相互转换
下面给出DataFrame中的股票代码转列表例子,重点要看说明和记住例子,演示代码如下:

import pandas as pd
import numpy as np
import HP_data as hp
#获取业绩报告数据
'''
report_data返回数据格式 如下:
code,代码
name,名称
esp,每股收益
eps_yoy,每股收益同比(%)
bvps,每股净资产
roe,净资产收益率(%)
epcf,每股现金流量(元)
net_profits,净利润(万元)
profits_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) 列表运算

#假定我们通过策略1筛选出股票池列表bk1
bk1=['600000', '600001', '600002', '600003', '600004', '000001', '000010']#我们通过策略2筛选出股票池列表bk2,我们可以看到前面3个数据重复。
bk2=['600000', '600001', '600002','600981',  '600080', '600191']#给bk1查入数据数据,list.insert(i, 数据)
bk1=bk1.insert(1, '300751')    #在指定位置插入元素#给bk2增加数据
bk2=bk2.append('600390')#删除bk2最后一个数据
bk2=bk2.pop()    #将最后一位的元素删除#删除bk1中间第3个数据。
bk1=bk1.pop(3)    #删除指定位置的元素

(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中,但不会同时出现在二者中)
下面给出集合运算的演示。

#建立集合st1,st2
print('\n----st1----')
st1=set(['002027', '600061', '600080','600659'])
print(st1)print('\n----st2----')
st2=set(['000001', '600061', '600088','000002'])
print(st2)#集合中增加可以通过列表list增加,再转换为集合set。
#也可以通过集合并集运算来增加元素。
print('\n----st1---- st1中增加600090')
st1=st1.union(set(['600090']))
print(st1)print('\n----a = st1 | st2-----')
#集合运算
a = st1 | st2   # st1 和 st2的并集
print(a)print('\n----b = st1 & st2 -----')
b = st1 & st2  # st1和 st2的交集
print(b)print('\n----c = st1 - st2 -----')
c = st1 - st2   # 求差集(项在st1中,但不在st2中)
print(c)print('\n----d = st1 ^ st2-----')
d = st1 ^ st2  # 对称差集(项在st1或st2中,但不会同时出现在二者中)
print(d)print('\n----st2 remove 600088-----')
#集合元素删除
st2=st2.difference(set(['600088']))
print(st2)
print(type(st1),type(st2))

程序运行结果如下图:

(3)列表和集合转换
我们根据算法需要,利用列表和集合的特性,来实现我们的要求

#假定我们通过策略1筛选出股票池列表bk1,但又股票重复
bk1=['600000', '600001', '600002', '600001', '600000', '000001', '000010','000002']
print('\n-----列表bk1----')
print(bk1)print('\n-----集合A----')
#转换为集合A来去掉重复
A=set(bk1)
print(A)print('\n-----列表bk2----')
#将结果转为列表bk2
bk2=list(A)
print(bk2)print('\n-----列表bk2排序----')
#对bk2进行排序
bk3=bk2.sort()
print(bk2)

程序运行结果如下图:

今天我给大家介绍了关于股票代码和股票板块运算的基本知识。下次开始设计有关选股器画面的设计。

自己做量化交易软件(15)通通量化AI框架的选股器设计1相关推荐

  1. 自己做量化交易软件(11)通通量化AI框架的核心--框架结构

    自己做量化交易软件(11)通通量化AI框架的核心–框架结构 既然我说了要开源通通量化AI框架,就算大家得到了代码,也不清楚怎么去改进和修改.因此我在最后完善框架的空闲,逐步介绍框架的核心设计思想,大家 ...

  2. 自己做量化交易软件(10)通通量化AI框架的数据获取与格式

    自己做量化交易软件(10)通通量化AI框架的数据获取与格式 我与2018年07月08日开始学习python编程和设计通通量化AI框架,到昨天晚上2018年10月30日,基本框架已经完成.能够显示K线图 ...

  3. 自己做量化交易软件(12)通通量化AI框架的使用1-与通通AI对话聊天

    自己做量化交易软件(12)通通量化AI框架的使用1-与通通AI对话聊天 到今天为止,通通AI量化框架基本完成了.下来要做的工作是进行完善,另外打算做macbook版本软件,我对macbook不熟悉,有 ...

  4. 自己做量化交易软件(9通通量化框架的雏形建立

    自己做量化交易软件(9通通量化框架的雏形建立 前面我们做了各种学习尝试,现在开始逐步搭建一个通通量化框架.我做了一部分工作,但是很多朋友有python知识,也想自己能快速搭建程序.因此我放出了全部的开 ...

  5. 自己做量化交易软件(1)通通量化分析环境安装使用

    自己做量化交易软件(1) 通通量化分析环境安装使用 (独狼荷蒲 QQ:2775205) 一.安装python Anaconda包含有超过720个关于科学,数据,工程和数据分析的Python和R包,如果 ...

  6. 自己做量化交易软件(6)通通量化历史交易回测设计1

    前面我们介绍的通通量化软件的一些程序设计. 自己做量化交易软件(1)通通量化分析环境安装使用 https://blog.csdn.net/hepu8/article/details/81866694 ...

  7. 自己做量化交易软件(4)通通量化分析框架构成2

    自己做量化交易软件(4)通通量化分析框架构成2 通通股票量化分析框架采用模块化设计,每个模块存放在不同的py文件中. 我们接着上一篇介绍. 五.基础窗口画面框架 HP_view.py HP_view. ...

  8. 自己做量化交易软件(3)通通量化分析框架构成1

    自己做量化交易软件(3)通通量化分析框架构成1 通通股票量化分析框架采用模块化设计,每个模块存放在不同的py文件中. 通通股票量化分析框架下载: https://download.csdn.net/d ...

  9. 自己做量化交易软件(5)通通量化中创作的布林指标BOLL线

    自己做量化交易软件(5)通通量化中创作的布林指标BOLL线 我们读者下载了通通量化演示框架的源代码.在这个代码中没有发现BOLL指标线的算法和绘图函数,我在这篇文章中,假设用户自己创作了新指标BOLL ...

最新文章

  1. 10的预览模式_谷歌相机2020年3月更新汇总,适配米10等五摄手机,30s手动曝光
  2. java rest 图_SpringMVC视图及REST风格
  3. 详解 GNU C 标准中的 typeof 关键字
  4. 从AndroidStudio同步上传项目代码到GitHub
  5. 基于大中台小前台模式设计高并发电商架构
  6. K3Cloud开放数据模型
  7. python如何用xpath爬取指定内容_Python如何利用Xpath选择器爬取京东网商品信息
  8. HTML自我介绍表格代码制作
  9. 优秀的 WIFI 渗透工具汇总
  10. 全志a20 开发板 linux,全志A83T开发板SDK资料,A20/A31S升级,QT5,Android5.1,Lubuntu
  11. 英语口语测试评分软件,7款超人气英语口语app深度测评
  12. 计算机面板上英文字母的意识,电脑键盘上有英语的汉语的意识
  13. ava.io.IOException: Downloaded file /var/lib/jenkins/plugins/credentials.jpi.tmp does not match expe
  14. 手机端编程以及mgit工具使用
  15. 用uni.previewImage({}) 来直接做图片的预览和识别二维码
  16. 计算机的本质到底是什么?
  17. Linux复制一个或多个文件到另一个目录下
  18. Apollo Cyber实践之talker-listener通信
  19. 【两行代码——最简单装X 哈哈哈】
  20. 吃灰5年的iMac,今天才发现为啥那么卡。

热门文章

  1. 微信小程序蓝牙功能全套开发流程介绍
  2. android 华为手机拍照,拍照:同为1300万像素画质却有差距_华为手机_手机Android频道-中关村在线...
  3. 【7】疯壳开源蓝牙智能健康手表(心率血压血氧心电监测可定制)_充电
  4. MATLAB数字图像去噪处理系统[GUI]
  5. 弱 dive into Ubuntu - syy(一)
  6. 开关电源PCB设计中的走线技巧
  7. 全球各国IP地址数Top10:中国拥有3.31亿居第二
  8. 南京师范大学计算机复试刷人吗,复试被刷为什么偏偏是你。正确认识南师大复试...
  9. centos7添加win10引导项及修改启动顺序
  10. openapi_没有理由手工编写openapi