炒股多年,一直苦于没有一个特别让我满意的股票交易记录软件,于是这周花了点时间写了一个类似的工具,同时也学习了一些相关的知识。
效果如下 (并非真实数据):
主要的特点包括:
- 完整而精确的个股、整体数据指标。
- 完整的个股操作记录。
- 自动生成除权除息记录。
- 准确的个股排序功能。
- 极简界面,无广告,无妖艳的干扰元素。
我实在找不到一个不选择django的理由,用它搭建一个简单的Web api实在是太简单了。而数据的获取和计算,使用Python也非常方便。
数据库使用sqlite,我们需要存储的数据很少,用最轻量级调试最方便的方案就行。
我之前其实完全没有用过django,但作为流行了很多年的技术方案,django的相关文档十分丰富,基本上遇到的常见问题连百度都能很方便的找到解决方案。
前端采用Vue + element-ui的方案,其实stockManager的前端就一个页面,相对比较简单。同时因为django前后端分离的架构设计,以后如果想要切换成例如react + antd这样的方案也很简单。
我之前的前端代码写得不多,在实际编码的时候,还是花了一点时间去学习框架和处理交互视觉问题。
实时的交易指标来自于新浪的接口:http://hq.sinajs.cn/list=sh600000
支持多代码查询,支持股票、场内基金等产品,获取数据后做个简单的处理即可。
离线交易指标来自baoStock:http://baostock.com/baostock/index.php
主要用来获取历史除权除息的数据。
之前也调研过Tushare,历史除权数据好像要积分才能查询...整个数据拉取工作,比较坑爹的地方是新浪的返回数据竟然是gb18030的编码...
所有的计算公式来自雪球:
1、成本价
持股数 = ∑买入数量 + ∑红股数量 + ∑拆股所增数量 - ∑卖出数量 - ∑合股所减数量
摊薄成本 = (∑买入金额 - ∑卖出金额 - ∑现金股息) / 持股数
持仓成本 = ∑买入金额 / (∑买入数量 + ∑红股数量 + ∑拆股所增数量 - ∑合股所减数量)
2、浮动盈亏
浮动盈亏额 = (当前价 - 持仓成本) * 多仓持股数
浮动盈亏率 = 浮动盈亏额 / (持仓成本价 * 持股数)
分市场浮动盈亏额 = ∑个股浮动盈亏额
分市场浮动盈亏率 = 分市场浮动盈亏额 / ∑(个股持仓成本 * 个股持股数)
3、累计盈亏
个股累计盈亏额 = 多仓市值 - (∑买入金额 - ∑卖出金额 - ∑现金股息)
4、当日盈亏
昨日市值 > 0
当日盈亏额 = (现市值 - 昨收市值 + 当日∑卖出 - 当日∑买入)
当日盈亏率 = 当日盈亏额 / (昨市值 + 当日∑买入 + 当日∑卖空)
昨日市值 = 0
当日盈亏额 = (现价 - 持仓成本) * 股数 + 当日∑卖出 - 当日∑买入
当日盈亏率 = 当日盈亏额 / 当日∑买入
现金 = 本金+累计盈亏-市值
比较坑爹的是,一个股票持仓成本计算的时候,只计算清仓后最近一次开始的持股成本。
这块计算花了我整整一个下午的时间来做,有很多小逻辑细节,都体现在了代码里。
个人交易的数据可以从券商的软件获取,如果之前在别的平台有记录也可以做导出。
我在想导出的时候发现我的券商没有Mac的客户端,于是我果断去了离家最近的网鱼网咖,在一堆社会人打游戏的叫骂中,胆战心惊地安装券商软件,导出了所有的股票交易记录...即使如此,表格的解析,数据的校对极其繁琐耗时,也是整个工作中最花时间的地方。
- 安装Python3,pip,git。
- 使用pip安装django,baoStock,pandas等模块。
- 依次安装node,npm,vue,element ui,axios等前端依赖。
- git clone相关代码:https://github.com/gunerguner/stockManager
- 进入frontend目录,
npm install
前端部分的依赖。 - 在frontend目录,
npm run build
生成目标文件。 - 在主目录下
python manage.py migrate
生成数据库(或者直接copy数据库文件)。 - 添加自己的股票操作记录,可以使用自己的脚本,或者在django admin界面添加(或者直接copy数据库文件)。
- 在主目录下,
python manage.py runserver
。