2020年春。

H江畔的L地段,是众多跨国银行的Z区及Y洲总部所在地,Z国最具影响力的金融中心之一。受全球疫情影响,今年的春天比往年要来得冷清一些,大街上偶尔经过的孤单车辆和三两行人也少了些往日的匆匆。只有这华灯初上,霓虹闪烁,似是宣告着这座城市面对疫情的信心。

一栋高大的建筑物,外墙体是一副巨型广告屏。嗖!广告屏上一只欢快的礼花从底部冲向中间。啪!的一声,开了个满屏,似是要追赶春节的尾巴。其中一扇不起眼的窗户,19寸电脑显示屏上,红绿的代码焦急的闪烁着。屏幕前,是一位妙龄少女,居家的粉红暖靴,玉腿颀长水润,红格子裙配白色毛衣,体态玲珑,面容清新。

“不行,这太热了”,说完,妙龄少女抬起纤纤玉手,在手机里滑动和点击起来,“这只股票温度太高,不急着入手了”。

妙龄少女名叫小雪,19年在S市研究生毕业,入职P公司行政。

“王哥,这太神奇了,你是怎么用程序做到的?”

小雪提到的王哥此时正在键盘上一顿操作,绒布拖鞋、绿色裤衩、格子衬衫、倔强胡渣、蓬松头发、眼圈略黑。这位王哥正是我,我叫小王,住在小雪隔壁,是小雪大学时的学长。我们一起参加过大学生数学建模竞赛,拿过特等奖。大学毕业后我在B市做了一名外包公司程序员。19年底,外包合同到期,我从B市来S市碰碰运气,在朋友圈了解到小雪在L地段租房找合租,便过来投奔了她。

我忽然感受到耳旁一股兰香,“怎么做到的?其实过程挺有趣的。”

最近,小雪报了一个学堂网课,学习炒股,昨天我在客厅吃外卖时,看到她用表格软件在做一个反映股票当前热度的演算,下载数据、表格拖动等处理较为繁琐,便夸下海口,说我能用程序做一个,就像当年参加数学建模一样。

这会儿正美滋滋的给她演示成果。

“哥,说说嘛,怎么做的?讲细一点,不要太短,我后面课程里还有知识考核的。”

“其实也就是获取数据、处理数据、展示结果。”

1 获取数据

“如何获取数据呢?”

1.1 编程准备

我觉得她是真的想听听这个程序是怎么做的,要细讲起来估计也要到比较晚了,不知道会不会影响她休息。我寻思着。

“我现在不用Matlab了,毕业了这个语言没有市场,不像是当年做数学建模。M国的这个产品没准什么时候就封锁了。我现在用python,据说是最好的编程语言。我对TA很感兴趣。”

“记得有一位大家说过,抓住自己最有兴趣的东西,由浅入深,循序渐进地学。我在B市的时候就是用这种方法熟悉了Python。”

“所以,现在的问题变成了,如何用python获取股票等金融数据。有用python爬虫的,但很多时候遇到反爬,获取数据不稳定,也面临一定的授权问题。有几种Python语言的库或api,如:tushare、baostock、pandas_datareader和yahool财经api等,可以方便调用。我喜欢用tushare。”

“tushare库是开源免费的财经数据接口包。用这个包能几乎免费的获取到金融数据。”

“想要听听代码吗?”我回头问小雪。

小雪白藕般的手臂支撑着玉颜,娇躯随着浅浅的呼吸起伏,懒绒绒地睁大眼睛,“我想要”。

嗯,可能我讲的内容有点信息量,小雪在认真的消化。

Python的特点,使用包,要先引入包。我打开PyCharm软件,开始逐行讲起代码来。

# 引入包import tushare as ts# 定义ts_token# 可从推广连接 https://tushare.pro/register?reg=378233 获取ts_token = '50b60260a0b87536a2d0231f89b4d....'# 接入tushare apipro = ts.pro_api(ts_token)

“这样数据获取的编程准备工作就做完了”。

1.2 数据获取

接入tushare api后,我们的这个参数需要使用daily_basic接口,获取全部的股票每日重要的基本面指标。重点是要用到其中的pe和pb两个指标。pe是指市盈率,总市值/净利润,亏损的pe为空。pb是指市净率,总市值/净资产。

#引入包import datetime# 待获取数据的股票代码ts_code = ‘000001.SZ’# 获取多长时间的股票数据,如10年days = 365 * 10# 获取数据的日期范围# 终止日期设置为当前日期end_date = datetime.date.today().strftime('%Y%m%d')# 起始日期设置为10年前start_date = (datetime.date.today() - datetime.timedelta(days=days)).strftime('%Y%m%d')# 获取每日指标stock_data = pro.daily_basic(ts_code=ts_code, start_date=start_date, end_date=end_date,fields='ts_code,trade_date,close,turnover_rate,volume_ratio,pe,pb,total_mv')

这样数据获取完毕。这里面ts_code, trade_date, close, turnover_rate, volume_ratio, pe, pb, total_mv依次指TS股票代码、交易日期、当日收盘价、换手率、量比、市盈率、市净率,这些名称股票课程里面应该是有的。

2 处理数据

“如何处理数据呢?”小雪将吃完的辣条包装袋扔进略显拥挤的垃圾桶,并“呲呲”地从所剩无几的抽纸盒里拿出两张卫生纸,将辣条袋口渗出的油仔细的擦拭掉,又小心的将卫生纸放入桶里。“很久没吃过辣条啦。你屋里快没纸了。”

“还有很多在柜子里。”我略显尴尬,她知道什么了?

“如果操作过量,即使对市场判断正确,仍会一败涂地。”她用手掩着嘴笑了起来,银铃般的笑声在屋内回荡,似是能熔化这清冷的春,“股票学习群里有人说这是鲁迅说的。”

“鲁迅老师那时候有股票这事儿吗?”

2.1 股票温度

“小雪,你还记得我们学过概率论与数理统计这门课程吗?”

“好像学过。怎么了?”

“说来话长了,简单点讲。这门课程研究随机事件,就是我们事先不知道什么情况会发生的事件,比如,抛硬币,不知道硬币落地时哪面朝上。”

“帮忙桌上拿盒奶”,我喝了口奶,顿了顿,继续说到,“随机事件是可以数量化的,如硬币有花的一面为0,另一面为1。”

“为什么不能是一面为1,另一面为2呢?”

“呃,你说得对,也可以一面为1,另一面为2。有人因为一个量从0开始还是从1开始还大打出手过呢。总之,这种映射可以自己定义。数量化的好处是可以用数学分析的方法来研究随机现象。”

“说得有点远了,拉回来。我现在硬生生说两个概念,如果要引出这两个概念,要花费的比喻比较多。第一个概念是随机变量,直观理解为对随机事件一次观察结果的可能数值,它取到某个值是有一定的概率的。第二个概念是概率分布函数,可以理解为取值小于某个值的概率。”

“嗯,概率论与数理统计里好像是有这两个基本概念,前几节课就学了,到课程学完我都不理解是什么意思。你跟我说这个干嘛?”小雪不解的问。

“这个概率分布函数几乎就是你昨天算的股票温度。”

“这么神奇?我还以为这个温度是个新概念。”小雪挺了挺胸,来了精神。身前的小桌经不住挤压,自己“吱吱”地往前挪了挪。

“想想看,你们说的这个股票温度,反应的就是历史数据中,低于股票当前估值出现的概率。其实就是概率分布函数,取值小于某个值的概率。”

“哦,这样啊。不懂。有点懂。”小雪若有所思。

“概念上是一致的,形式上略有差别。我看了你昨天计算的公式。概率分布函数取值是0到1之间。你这个股票温度取值是0到100。其实就是pe和pb分别计算概率分布函数,然后求两个值的平均值,再乘以100,表现得就像一个温度的值一样。”

“温度越低,历史上低于当前估值的概率越小,股票价值越可能被低估。反之亦然。”

“我表哥老韭明天从C岛过来”,小雪漫不经心的刷着手机,“他是专门做金融投资的,最近做得很不顺利,亏了很多。”

“是韭菜盒子的那个老韭吗?看来名字很重要。”

“排行第九的老九。你刚刚说什么。”

“我说明天请他吃串。正好有个不解的问题想请教他。你昨天股票温度的公式里,也就是概率分布函数的计算中,要从样本中计算出均值和方差来,但每次使用的均值和方差对应的数据时间尺度都是不一样的。对应到现实情况,股票的价值其实是在变化的,离估算时刻时间越早,对当前价值估算影响可能越小,我觉得应该要引入等长的时间窗概念,在时间窗的范围内估算均值和方差。”

“又开始建模了,喜欢看你认真的样子。”小雪嫣然一笑间。似是因为这一笑,天地间万物复苏,春来到。

“但我不是这个行业的,不敢乱改这个模型。先用你那个公式做的。”

“是怎么实现的?”

2.2 编程准备

“要用到几个Python的库。”

“Numpy算矩阵的,我用它来计算均值、方差等。Scipy做科学计算的,我用它来计算概率分布函数。我发现公众号‘Python专栏’里有文章对这几个库都讲得较明白。”

我对着PyCharm的窗口逐行讲解。

#引入包import numpy as npimport scipy.stats as st

2.3 温度计算

“然后就是温度计算了。”

#引入包import numpy as npimport scipy.stats as st# stock_data变量是数据获取部分得到的每日指标值# 增加温度描述列,默认温度50度(0.5*100)stock_data['pe_temperature'] = 0.5stock_data['pb_temperature'] = 0.5# 计算每日温度for i in range(1, len(stock_data)):    # 计算pe均值mean = np.mean(stock_data['pe'][0:(i + 1)])# 计算pe方差std = np.std(stock_data['pe'][0:(i + 1)], ddof=1)# 计算pe概率分布函数值stock_data['pe_temperature'].iloc[i] = st.norm.cdf(stock_data['pe'].iloc[i], loc=mean, scale=std)# 计算pb均值mean = np.mean(stock_data['pb'][0:(i + 1)])# 计算pb方差std = np.std(stock_data['pb'][0:(i + 1)], ddof=1)# 计算pb概率分布函数值stock_data['pb_temperature'].iloc[i] = st.norm.cdf(stock_data['pb'].iloc[i], loc=mean, scale=std)# 计算个股股票温度stock_data['temperature'] = (stock_data['pe_temperature'] + stock_data['pb_temperature']) * 50

3 数据展示

“噗哧”,小雪忍不住笑出了声,“你们宅男有福利了。”

“啥情况?”

“我们海上邻国开发出了‘机器人女友’。”

“UI咋样?”

“啥?”

“长得好看吗?好使吗?”

“外观与真人相比很逼真了。”小雪把手机翻过来,给我看看“机器人女友”长啥样。

“没有灵魂,我还是喜欢一双会流泪的眼睛。”

“你这话要是机器人公司的产品经理给开发说,估计产品会被邀请去爬山。你算完了吗?”

“算完了。”

“算的这么快,我怎么不知道。”

“你在手机上思考的时候,我就算完了。”

“好吧,你的结果怎么做成屏幕上那样效果的?”

“下面,我们进行数据展示。”

3.1 编程准备

“数据打印,我用matplotlib库。”

“又是库。”

“所以说Python是世界上最好的语言,没有安装一个库解决不了的问题。”

“一个不行呢?”

“那就再安装一个。”

“还不行呢?”

“再装一个。”

。。。

“这个库还是你那个‘Python专栏’公众号上了解的吗?”

“抢答正确。看看准备工作。”

# 导入matplotlib库import matplotlib.pyplot as pltfrom matplotlib.ticker import MultipleLocator

“这就完了?”

“导入库准备工作做完了。”

“好短啊。”

3.2 展示收工

“结果展示也很方便,我们把一只股票的股票温度与收盘价一起打印出来。看看这个代码。”

# 数据获取中得到的stock_data# 按照trade_date做一下排序,升序排列# 这样在便于按照时间从前到后的顺序展示出来stock_data.sort_values(by='trade_date', ascending=True, inplace=True)# 左轴fig, ax1 = plt.subplots()ax1.set_title('stock temperature')ax1.set_xlabel('time')ax1.set_ylabel('temperature')# 定义右轴ax2 = ax1.twinx()ax2.set_ylabel('close')# x轴共显示10个日期,避免文字相互覆盖data_length = stock_data.shape[0]xmajorLocator = MultipleLocator(data_length/10)ax1.xaxis.set_major_locator(xmajorLocator)ax2.xaxis.set_major_locator(xmajorLocator)# 左轴数据,股票温度ax1.plot(stock_data['trade_date'], stock_data['temperature'], linestyle='--', marker='.', alpha=0.5, color='r', label='temperature')# 右轴数据,收盘价ax2.plot(stock_data['trade_date'], stock_data['close'], linestyle='-', marker='.', color='g', label='close')# 图示位置ax1.legend(loc='upper left')ax2.legend(loc='upper right')# 打印plt.show()

“运行,就得到了股票温度、收盘价-日期图如下。”

“这是单只股票的,我们把数据换成全市场的股票,就是江湖上流传的那张‘价值万金的图’。你觉得我画得好看吗?”

“嗯,有点饿了。为了奖励你,今天为你下面吃。”

“下面条吃那是极好的,荣幸之至。”说完,我的手终于离开了键盘。心里寻思着,小雪的课程里面还有很多需要Python编程实现的,我给她建立一个Python的代码版本库,需要什么我就实现什么,没准她报的课程还会请我讲讲内容的实现什么的,再弄个最近很火的视频号,做成教程,或许还能解决工作的事情。不过,这都不重要啦,重要的是。。。

小雪下的面条真好吃。

源码获取私信小编01

我用python写了一套股票万金油,回报小雪下面给我吃!相关推荐

  1. python写炒股软件_Python桌面股票工具

    微信图片_20190725142216.png 开发一个桌面显示股票.可转债.ETF行情信息的桌面工具,这样你再也不用一直拿着手机不放了. 需要用到的python库: tkinter 绘制界面 req ...

  2. python 股票分析包_如何利用Python开发一套股票分析软件

    股票数据分析对象为沪深300,通过对数据的爬取以及分析,使数据可视化,这些为该分析软件要满足的功能. 确定目标,然后 JUST DO IT ! 第一步:获取数据 沪深300历史交易数据的 URL 地址 ...

  3. python写一个系统-使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

  4. python写一个系统-熬了一晚上,小白用Python写了一个股票提醒系统

    码农小马七夕节去相亲了,见了一个不错的姑娘,长的非常甜美!聊着聊着很投缘!通过介绍人了解到,对方也很满意--想着自己单身多年的生活就要结束啦,心里满是欢喜,美美哒!但是突然想起年初还有几万块在股市里面 ...

  5. 用python读取股票价格_使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

  6. python股票分析系统_熬了一晚上,小白用Python写了一个股票提醒系统

    码农小马七夕节去相亲了,见了一个不错的姑娘,长的非常甜美!聊着聊着很投缘!通过介绍人了解到,对方也很满意--想着自己单身多年的生活就要结束啦,心里满是欢喜,美美哒!但是突然想起年初还有几万块在股市里面 ...

  7. python量化股票源码_使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

  8. python股票全套系统_熬了一晚上,小白用Python写了一个股票提醒系统

    码农小马七夕节去相亲了,见了一个不错的姑娘,长的很是甜美!聊着聊着很投缘!通过介绍人了解到,对方也很满意--想着自己单身多年的生活就要结束啦,心里满是欢喜,美美哒!可是突然想起年初还有几万块在股市里面 ...

  9. python写炒股软件_使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

最新文章

  1. pandas将列表list插入到dataframe的单元格中、pandas使用read_csv函数读取文件并设置保留数值的前置0( leading zeroes)
  2. Java基础学习三:循环结构的使用
  3. Win7 PPTP/L2TP设置详细图解教程
  4. 5G NR 定时提前 Timing advance
  5. jquery checked 操作多选
  6. DELPHI学习---结构类型
  7. python编程语言优缺点_原创001 第一次接触这个神奇而又无所不能的编程语言:Python...
  8. linux时间路径,关于linux中的时间 时区问题
  9. 第十一节: EF的三种模式(一) 之 DBFirst模式(SQLServer和MySQL两套方案)
  10. [ZJOI2005]沼泽鳄鱼 矩乘dp
  11. java解析csv文件工具类,java操作CSV文件工具类
  12. gdi和gdi+并用
  13. java反编译使用报错_Java反编译class
  14. matlab2014中GUI之菜单栏设计
  15. 如何压缩ppt大小的方法不减画质?
  16. zblog导航小智收录网导航模板
  17. python求派_python求π
  18. Mac_IOS_报:The Xcode build system has crashed. Please close and reopen your workspace.
  19. Windows11 Docker-Compose 因为挂载问题报错
  20. 客户旅程_从编码训练营到报价—我的1280小时旅程

热门文章

  1. stl之emplace函数的使用
  2. DFA 算法选型思路
  3. Windows C++ CreateThread
  4. 对VB注册全局热键的思考——是不是RegisterHotKey的1个ID可以注册多组热键?
  5. XSHELL提示更新版本才能用
  6. pyqt_Matplot
  7. CentOS服务器版本一开始使用会碰到的几个问题
  8. pycharm分屏设置
  9. python:实现中文转英文(附完整源码)
  10. 如何更方便的查看GitHub上的代码?