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

自己做量化交易软件(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)

程序运行结果如下图:
在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/66280.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文讲通AI+金融领域量化交易和股价预测

AI金融作为优化金融业务场景的应用技术工具&#xff0c;应用于金融机构IT总体架构的中台层与渠道层&#xff0c;解决具体场景的业务数字化诉求。总体而言&#xff0c;AI金融在内生需求、资本投入、政策扶持的驱动下&#xff0c;获得广阔的发展空间。 ——艾瑞网 深度学习模型对…

【量化交易】94篇论文分析股市预测的深度学习技术

论文 | Stock Market Prediction via Deep Learning Techniques: A Survey 作者 | Jinan Zou, Qingying Zhao, Yang Jiao, Haiyao Cao, Yanxi Liu, Qingsen Yan, Ehsan Abbasnejad, Lingqiao Liu, Javen Qinfeng Shi 一 本文摘要 由于其非线性、高度波动性和复杂性&#xff0c;…

磨金石教育摄影技能干货分享|摄影拼贴技法的运用与效果

河南省-黄阳惠智-《那是山吗》 画面中是一片群山景象。我们看上去感觉像是画出来的&#xff0c;又像是电脑做的图。 其实这是摄影师用了中国山水画的特有表现手法&#xff0c;对桂林山水的景象&#xff0c;进行了拼贴在创造。 作者用一些非山非水的现代物品&#xff0c;像织女一…

磨金石教育摄影技能干货分享|古风人像修图与调色技巧

上一篇文章我们介绍了古风人像的拍摄技巧&#xff0c;这期我们再来了解一下后期修图与调色的技巧。 一、修 饰 皮 肤 首先我们把拍好的照片拖到PS里。 1、ctrlj复制一个图层。然后选择污点修复画笔把脸部瑕疵去掉&#xff0c;嘴巴部位使用的是修复画笔。这样我们可以看到人像…

【推荐】网络安全应急响应与实践资料合集

应急响应对应的英文是Incident Response或Emergency Response等&#xff0c;通常是指一个组织为了应对各种意外事件的发生所做的准备以及在事件发生后所采取的措施。 计算机网络安全事件应急响应的对象是指针对计算机或网络所存储、传输、处理的信息的安全事件&#xff0c;事件…

企业发现数据泄露威胁时如何应对

By Jeffrey - 资深IT经理人&#xff0c;IT运营和安全顾问&#xff0c;历任多家知名跨国企业包括麦肯锡大中华区、通用电气公司、壳牌石油、英美烟草等公司IT总经理 疫情的爆发使得很多企业采用远程办公或者混合办公模式&#xff0c;在线办公的增多使得网络犯罪也渐渐猖獗。有报…

[软件自动修复领域] 偏实证分析类论文阅读-2019年8月9日

文章目录 前言论文列表Better Test Cases for Better Automated Program RepairA Theoretical and Empirical Analysis of Program Spectra DiagnosabilityAn empirical study on TensorFlow program bugsAn Empirical Study on Real Bug FixesLogTracker: Learning Log Revisi…

隐私保护论文题目汇总(一定要保持更新)

Motivation 既然放养&#xff0c;只能自救&#xff0c;大家都是我的导师。 研究方向争取不乱串。隐私保护。 2022.5.26 1 Blockchain Empowered Asynchronous Federated Learning for Secure Data Sharing in Internet of Vehicles &#xff08;2020 IEEE Trans on vehicul…

论文学习笔记(二):面对多步攻击的网络安全态势评估

文章目录 1. 引言2. 网络安全态势评估基础2.1 基本术语2.2 网络安全态势评估流程 3. 实时攻击阶段识别3.1 攻击场景聚类3.2 实时攻击阶段识别算法3.3 攻击阶段识别算法的改进 4 网络安全态势量化分析4.1 攻击安全概率4.2 攻击阶段实现概率4.3 网络安全态势值 5 实验结果及分析5…

个人信息安全事件应急处理和报告

声明 本文是学习GB-T 35273-2020 信息安全技术 个人信息安全规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 个人信息安全事件处置 个人信息安全事件应急处置和报告 对个人信息控制者的要求包括&#xff1a; 应制定个人信息安全事件应急预案&…

论文总结:云安全研究方向及进展综述

目录 1、云安全在信息安全领域所处位置 2、云计算环境面临的威胁和挑战 2.1 云安全发展史 2.2 云计算安全与传统计算安全区别[5] 2.3 从顶层框架的角度看云安全研究目标 3、研究进展和解决方案 3.1 虚拟化、数据、应用安全[6] 3.2 系统安全、网络安全、数据安全[7] 3.3…

信息系统安全实验之文件上传漏洞导致主页篡改实验

一、实验目的 1.了解文件上传漏洞的原理和攻击方式。 2.在学习该漏洞的出现原因的过程中了解该漏洞的防范和加固方式。 二、实验环境 1.操作系统&#xff1a;Windows 7&#xff08;虚拟机环境&#xff09;。 2.工具&#xff1a;phpStudy、Burp Suite、中国蚁剑、Firefox浏…

使用崩溃服务,获取不到崩溃报告怎么办

华为AGC推出的崩溃服务&#xff0c;零代码集成&#xff0c;只需要添加SDK即可。有时可能集成了SDK&#xff0c;在AGC页面获取不到崩溃报告&#xff0c;总结了一下可以排查以下几点&#xff1a; 1、首先确认下端侧有没有上报 执行“adb shell setprop log.tag.AGC_LOG VERBOSE…

说说计算这事儿:从开关到人工智能

目录 一 前言 二 计算历史 三 计算探秘 四 算力优化 五 未来展望 一 前言 计算本身其实是一个比较抽象的词&#xff0c;或者说比较笼统。很多场景都可能用到计算这个词&#xff0c;因此具体的含义就需要根据上下文来确定。今天我们讨论的计算&#xff0c;是比较狭义的计算…

稚晖君,被百度投了!估值被曝已超独角兽

推荐阅读&#xff1a;“程序员交友网站” SO 突然裁员 10%&#xff0c;网友&#xff1a;ChatGPT 出来后就不咋用了 衡宇 发自 凹非寺量子位 | 公众号 QbitAI “华为天才少年”稚晖君创业项目&#xff0c;刚被百度风投投了&#xff01; 量子位获悉&#xff0c;稚晖君创业项目智元…

充能书单|618,买什么都不如买知识!

前言 “IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台&#xff0c;致力于帮助读者在广义的IT领域里&#xff0c;掌握更专业、更实用的知识与技能&#xff0c;快速提升职场竞争力。 点击蓝色微信名可快速关注我们。 一年一度的618又到啦&#xff01;今年的618就不要乱买…

华为鸿蒙os有微信吗,华为“鸿蒙OS”合作的多个软件 没有微信你还会用吗

花火网讯 11月12日消息&#xff0c;华为“鸿蒙OS”合作了很多个软件&#xff0c;但是里面竟然没有微信&#xff0c;你还会选择华为鸿蒙OS吗&#xff1f; 手机如今大家都离不开它&#xff0c;并且如今的手机给了我们很多的方便&#xff0c;也正因为如此&#xff0c;现在的人越来…

鸿蒙取得成功后,互联网企业牵头研发操作系统挑战安卓

在鸿蒙系统突破3亿用户数之后&#xff0c;日前传出消息指国内互联网巨头腾讯与酷派合作再研发手机操作系统&#xff0c;此举或许有望吸引国内诸多手机企业参与&#xff0c;将为国产手机操作系统打破安卓的垄断再添一份力。 华为可以说是被迫上鸿蒙系统的吧&#xff0c;2019年的…

汇聚开发者星星之火,华为鸿蒙系统有希望成为国产之光?

作者 | 雷架 来源 | 爱笑的架构师&#xff08;ID&#xff1a;DancingOnYourCode&#xff09; 头图 | CSDN 下载自东方IC 鸿蒙系统2.0的发布给国人带来极大的振奋&#xff0c;虽然有一部分人不断唱衰&#xff0c;觉得是大家被爱国情怀所左右&#xff0c;但大部分人的激动其实原…

华为背水一战,未来所有终端将仅用鸿蒙系统

有知名大V透露华为将在3月份发布最后一个基于安卓系统开发的EMUI11.1系统&#xff0c;此后将完全采用鸿蒙系统&#xff0c;这显示出它在面临巨大困难之后作出的抉择。 华为此前研发的EMUI系统说到底还是安卓系统&#xff0c;EMUI主要用于国内的手机上&#xff0c;而在海外市场则…