morganchenjp / stockManager

An easy way to manage your stock information

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

炒股多年,一直苦于没有一个特别让我满意的股票交易记录软件,于是这周花了点时间写了一个类似的工具,同时也学习了一些相关的知识。

效果如下 (并非真实数据):

image.png

主要的特点包括:

  • 完整而精确的个股、整体数据指标。
  • 完整的个股操作记录。
  • 自动生成除权除息记录。
  • 准确的个股排序功能。
  • 极简界面,无广告,无妖艳的干扰元素。

技术方案

后端

我实在找不到一个不选择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的客户端,于是我果断去了离家最近的网鱼网咖,在一堆社会人打游戏的叫骂中,胆战心惊地安装券商软件,导出了所有的股票交易记录...即使如此,表格的解析,数据的校对极其繁琐耗时,也是整个工作中最花时间的地方。

搭建方式

  1. 安装Python3,pip,git。
  2. 使用pip安装django,baoStock,pandas等模块。
  3. 依次安装node,npm,vue,element ui,axios等前端依赖。
  4. git clone相关代码:https://github.com/gunerguner/stockManager
  5. 进入frontend目录, npm install 前端部分的依赖。
  6. 在frontend目录,npm run build 生成目标文件。
  7. 在主目录下python manage.py migrate 生成数据库(或者直接copy数据库文件)。
  8. 添加自己的股票操作记录,可以使用自己的脚本,或者在django admin界面添加(或者直接copy数据库文件)。
  9. 在主目录下,python manage.py runserver

About

An easy way to manage your stock information


Languages

Language:Python 49.4%Language:JavaScript 33.0%Language:Vue 17.2%Language:HTML 0.4%