股票市值统计数据结构设计和算法.docx

上传人:PIYPING 文档编号:11738470 上传时间:2021-09-02 格式:DOCX 页数:6 大小:300.24KB
返回 下载 相关 举报
股票市值统计数据结构设计和算法.docx_第1页
第1页 / 共6页
股票市值统计数据结构设计和算法.docx_第2页
第2页 / 共6页
股票市值统计数据结构设计和算法.docx_第3页
第3页 / 共6页
股票市值统计数据结构设计和算法.docx_第4页
第4页 / 共6页
股票市值统计数据结构设计和算法.docx_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《股票市值统计数据结构设计和算法.docx》由会员分享,可在线阅读,更多相关《股票市值统计数据结构设计和算法.docx(6页珍藏版)》请在三一文库上搜索。

1、股票市值统计数据结构设计和算法 红杉树(中国)信息技术有限公司朱忠益(一)数据库系统目前主要使用 Oracle,SqlServer 作为数据库平台, 管理客户信息、资金、证券和委托成交信息等。(二)委托系统 主要是客户下单买卖、撤单操作的应用程序,可以是柜台委托、电话委托、网上交易、客户自助委托、客户 嵌入式委托等。(三)行情转换系统 主要负责把最新行情信息更新到数据库证券代码表中,便于统计和查询。行情信息主要包括昨日收盘、 最新价,昨日收盘一般 1 个交易日更新 1 次,最新价可 以根据情况调整更新频率,一般可以设置每分钟 5 次 左右更新一次。(四)报盘回报系统 主要负责把客户委托发送到交

2、易所,同时把客户成交更新到数据库中,包括成交处理、撤单处理、无效 委托处理,并处理资金和股份的变动。(五)清算系统 主要负责交易结束后,根据交易所发回清算数据进行正真资金、股份变动,形成清算成交流水,增减客 户保证金、股份余额,权益入账(如权证、分红、送股等 数据处理),清理日间交易,冻结解冻资金和冻结解冻 股份等功能。一、背景随着我国经济迅速发展,金融市场也日益壮大,其中股票市场(也叫做证券市场)发展更为迅猛。可以说, 与股票有关的公司、个人在我国已非常常见。如何能准 确及时地得知自己账号的最新市值和盈亏是每个股民 非常关注的。个人可能依赖于交易系统,也就是营业部 系统查询,这就要求营业部需

3、要有及时正确的数据供 股民使用;但各类基金公司、投资公司、银行等投资机 构由于数据量大、信息更新更频繁,要求准确度更高, 这就要求他们自己建立一套能有效管理其账下股票并 能及时反映出最新状况的系统。笔者结合自己的工作经验,就如何及时、准确地计 算股票市值进行探讨,并希望对投资机构 (如证券公 司、基金公司、投资公司)起到参考作用。二、系统结构一般证券交易系统的结构主要分为数据库系统、委托系统、行情转换系统、报盘回报系统和清算系统。系统结构模块如图 1 所示。交易所远程通信算三、数据结构数 据为了准确、及时地统计账号总市值、动态市值,需要建立一个完善的数据库系统,数据库可以由实际情 况选择不同数

4、据库系统,可以选择 Oracle,SqlServer, MySql 等。由于 SqlServer 简单易用、安装方便、处理效 率高等特点,可以把它作为该系统开发模型,用户可以 根据自己实际情况随意选择。交易系统数据多、数据量大、属性众多、关系复杂,清算权益处理图 1系统结构模块 50 OCT10,2009 NO10果委托系统电话委托网上交易.自助委托中间层委撤查 托单询结清算系统行情转换系统数据库系统清权 益报盘回报系统报 盘回 报应 用 技 术2009 年 10 月 10 日 第 10 期FINANCIAL COMPUTER OF HUANAN由于现在只讨论如何有效、快速地计算市值,其他辅助

5、数据或关系等不相关数据暂不作描述,只列出我们关 心的数据。这些数据主要有客户(账号)信息、资金信 息、证券账号信息、证券代码信息、证券余额信息,它们 之间的关系如图 2 所示。数据都跟客户号有关。客户号是客户身份识别的唯一标志,每个客户一 个,一般以数字表示,便于从各种终端输入,如电话、手 机、小键盘等,可以从 1 开始编码,也可以分段编码或 随意编码,但不能重复。以下数据一般都以客户号为单 元来统计。客户信息表为 CustomerInformation(该名称可 以暂时这么定,每个数据库表可选择自己喜欢的名称), 见表 1 所列。表 1CustomerInformation 数据库表结构(二

6、)资金信息资金信息用于记载客户所对应的各种货币的资金 余额信息,如实际资金、可用资金、可取资金、冻结资 金、长期冻结资金、未结利息等。在统计市值过程中,需要的信息有客户账号、币种 类别、期初余额、当前余额。根据以上分析,资金信息表 为 FundBalance,见表 2 所列。表 2FundBalance数据库表结构取金额(一)客户信息客户信息主要是记录客户基本信息,如客户号、客 户姓名、客户各种密码(一般有交易密码、取款密码,根 据情况可以附加各种密码)、身份证、客户类别、通信地 址等客户相关信息,主要功能是提供身份认证。而客户 唯一标志客户号,则是整个系统的纽带,下面很多(三)币种信息上面资

7、金信息中提到币种,也就是目前沪深股票 中除了 A 股用人民币结算外,还有 B 股,上海 B 股用 美元结算,深圳 B 股用港币结算。这样,需要处理多种OCT10,2009 NO1051字段名称类型中文名称备注customer_idINT客户编码PK 主键money_idTinyint币种PK 主键begin_balancemoney期初余额昨 日结算完成的余 额,不包括今天存取 金额current_balancemoney当前余额期 初 余 额 + 当 天 存frozen_balancemoney冻结金额unfrozen_balancemoney解冻金额.字段名称类型中文名称备注custome

8、r_idINT客户编码PK 主键customer_nameVarchar(50)客户姓名.51应 用 技 术2009 年 10 月 10 日 第 10 期FINANCIAL COMPUTER OF HUANAN币种。在计算总市值时,还需要有个兑换率,把它们统一兑换成人民币来计算。对应的数据库表结构 Mon- eyType 见表 3 所列。表 3MoneyType数据库表结构表 5MarketInfo 数据库表结构(六)证券代码信息为了记载股票余额,需要有股票代码,对应于各交 易市场的股票代码,也叫做证券代码。还有与代码对的 信息,如证券类别、买卖单位(以手还是以股)、涨跌幅 比例、是否统计市值

9、(权证信息如配股股权、配售股权 等不计算市值)、数量单位(以手为单位还是以股为单 位,如国债买卖都是以手为单位,记载数量也是以手为 单位也可以以张 / 股为单位)、行情信息(如昨日收盘、 今开盘、最新价)等。对应的数据库表结构 StockCode 见 表 6 所列。(四)证券账号信息股票账号也叫做证券账号,是在登记中心开户的 号码,股民股票托管在证券交易所,以证券账号为统一 管理。由于每个交易所账号信息不一样,每个交易所都 有一套账号建立规则。我们以增加交易市场代码来区 分,如上海 A 股 -1、深圳 A 股 -2、上海 B 股 -3 和深圳 B 股 -4,还可以有许多其他市场代码。每个账号都

10、有自己的信息,如属于哪个客户,证件 号码、地址、联系方式,以及与市场有关的信息,如上海 A 股需要有指定交易标志,上海 B 股需要结算会员标志等。对应的数据库表结构 StockAccount 见表 4 所列。表 6StockCode数据表的结构表 4StockAccount数据库表结构名不一样(七)证券余额信息证券余额 信 息 是 记 载 股 票 余 额 (也 叫 做 证 券 余 额),需要有交易市场、证券账号、证券代码,为了方便 统计,还需要增加客户账号、期初数量、当前数量、持仓 价(持仓金额)。为了统计买卖动态市盈率或动态市值,需要增加(五)交易市场信息证券账号信息中记载了交易市场代码来区

11、分账号 是属于哪个市场的,交易市场信息还需要记载该市场 交易参数、交易币种等一些规则。交易参数主要有开闭 市时间、结算标志等。对应的数据库表结构 MarketInfo 见表 5 所列。 52 OCT10,2009 NO10字段名称类型中文名称备注customer_idINT客户编码PK 主键se_idTinyint市场编码PK 主键stock_accountVarchar(15)证券账号PK 主键nameVarchar(50)证券账号姓名可以与客户账号姓.字段名称类型中文名称备注se_idTinyint市场编码PK 主键stock_codevarcha(r 10)证券代码PK 主键stock_

12、typecha(r 1)证券类别amount_unittinyint数量单位1- 以 股 为 单 位 ,2- 以手为单位hand_amountint每手数量如 果 以 手 为 单 位 , 则实际数量必须乘 以该数字market_val- ue_flagtinyint统计市值标志1- 统计,2- 不统计pre_pricefloat昨收盘new_pricefloat最新价debt_interestfloat国债利息字段名称类型中文名称备注money_idTinyint币种PK 主键(1- 人民币,2- 美元,3- 港币 .)money_namevarchar(20)币种名称人民币、美元、港币.ch

13、arge_ratefloat兑换率一 般记载最新兑换 率以供参考字段名称类型中文名称备注se_idTinyint市场编码PK 主键money_idTinyint币种52应 用 技 术2009 年 10 月 10 日 第 10 期FINANCIAL COMPUTER OF HUANAN买入数量和卖出数量。买入数量是当天买入股票、基金、国债等的数量,卖出数量是当天卖掉该股票、基金、 国债等的数量,数量单位与在证券代码中的单位相同。 另外,还需要增加买入金额和卖出金额 2 个信息,买入 金额是当天买入各种证券所花掉的资金 (冻结资金), 包括各种手续费,如佣金、印花税、过户费等;卖出金额 是卖出股票

14、数量和价格的乘积减去各种手续费。对应 的数据库表结构 Stock 见表 7 所列。2. 按币种期初市值按币种期初市值 = 期初资金 +(股票期初余额 昨日收盘) 该公式说明如下:(1)没有昨日收盘价则取持仓价来计算。没有昨日 收盘价的股票一般是该代码在行情库中已经不存在, 但需要统计市值,如上海新股上市前一天晚上会中签 数量,那时代码在行情库中不存在,也就没有昨日收盘 价,需要取持仓价作为昨日收盘价来计算;(2)如果是国债,需要把昨日收盘价加上每张国债 利息作为昨日收盘价格;(3)如果余额单位为手,则所有数量需要乘以每手 股数或张数。如国债是以手为单位,则必须乘以 10,余 额数量都必须考虑股

15、份余额单位;(4)如果证券代码表中统计市值,标志位为 2;不统 计,该代码股份市值为 0。3. 折合期初市值折合期初市值 = (按币种期初市值 汇率)= (期初资金 + (股票期初余 额 昨日收盘) 汇率)4. 每只股票期初盈亏每只股票期初盈亏 = 股票期初余额 昨日收盘 持仓金额5. 按币种期初股票盈亏按币种期初股票盈亏 = (股票期初余额 昨日 收盘 持仓金额)6. 折合期初股票盈亏折合期初股票盈亏 = (按币种期初股票盈亏汇率)(二)动态市值统计和盈亏分析 动态统计跟静态比起来稍微复杂点,需要考虑最新数据和买卖变化。1. 每只股票动态市值每只股票动态市值 =( 当前数量 - 卖出数量 +

16、 买 入数量 ) 最新价(以手为单位乘以每手股数或张 数,否则乘以 1)该公式说明如下:(1)没有最新价,如该股票停牌,则取昨日收盘价, 如果没有昨日收盘价则取持仓价作为最新价来计算;(2)如果是国债,需要把最新价加上每张国债利息 作为最新价格;表 7Stock数据库表结构四、计算方法有了以上数据,我们统计市值和盈亏分析就比较简便,具体计算如下分析。(一)期初市值统计和盈亏分析 期初市值统计一般用于在结算或早上初始化后的数据整理分析,这时数据都回到原始状态,没有冻结解 冻金额,没有存取款,也没有买卖,计算最简单方便。1. 持仓价持仓价 = 持仓金额 / 期初数量OCT10,2009 NO105

17、3字段名称类型中文名称备注se_idTinyint市场编码PK 主键stock_accountVarchar(15)证券账号PK 主键customer_idINT客户编码stock_codevarcha(r 10)证券代码PK 主键pre_amountINT期初数量current_amountINT当前数量buy_amountINT买入数量sale_amountINT卖出数量buy_amountINT买入数量sale_amountINT卖出数量buy_moneymoney买入金额sale_moneymoney卖出金额frozen_amountINT冻结数量unfrozen_amountINT解

18、冻数量hold_moneymoney持仓金额53应 用 技 术2009 年 10 月 10 日 第 10 期FINANCIAL COMPUTER OF HUANAN(3)如果余额单位为手计算的,则所有数量需要乘以每手股数或张数,如国债是以手为单位记载的,则必 须乘以 10,以下数量都必须考虑股份余额单位;(4)如果证券代码表中统计市值,标志位为 2;不统计,该代码股份市值为 0。2. 按币种股票动态市值按币种股票动态市值 =(每只股票动态市值 + 卖 出金额 买入金额)3. 按币种动态总市值按币种动态总市值 = 当前资金余额 + 按币种股票 动态市值4. 折合动态总市值折合动态总市值 =(按币

19、种动态总市值 汇率)5. 每只股票动态盈亏每只股票动态盈亏 =(当前数量 - 卖出数量 + 买入 数量) 最新价 - 持仓金额 买入金额 + 卖出金额6. 按币种股票动态盈亏按币种股票动态盈亏 = ( 每只股票动态盈亏)7. 折合股票动态盈亏折合股票动态盈亏 = ( 按币种股票动态盈亏 汇率)(三)买卖过程数据变化 上面各种市值、盈亏计算,在统计过程并不会涉及冻结解冻资金和股票,所以买卖过程中委托和撤单并 不影响市值统计,有影响的是成交交易。只要我们能准 确记载每笔成交的数量和金额以及手续费计算,就能正确计算出需要的动态市值和动态盈亏。1. 买入成交如果该笔买入数量为 buy_amount1,

20、买入成交价格 为 buy_price1,原来买入数量为 buy_amount,原来买入金额为 buy_money,则修改后结果为: buy_amount = buy_amount + buy_amount1 buy_money=buy_money +buy_amount1buy_price1 +该笔成交手续费 其中,买入金额、买入数量和成交价都为正。2. 卖出成交如果该笔卖出数量为 sale_amount1,卖出成交价格 为 sale_price1,原来卖出数量为 sale_amount,原来卖出金额为 sale_money,则修改后结果为:sale_amount = sale_amount

21、+ sale_amount1sale_money=sale_money+sale_amount1sale_price1-该笔成交手续费 其中,卖出金额、卖出数量和卖出价都为正,并对以上公式作如下说明:(1)手续费计算中,由于成交过程是分笔成交,结 算时计算是合并计算手续费的,而事实计算是分笔计算,这样会产生由于有最低手续费和佣金打折计算误 差,但对于动态分析来说应该影响不大,有条件也可以 实时修复分笔计算的误差;(2)国债买卖价格需要加上国债利息;(3)国债买卖金额需要乘以手为单位的每手股数。(四)结算过程1. 清除买卖过程中产生的冻结解冻资金、冻结解 冻股票、买入卖出股票数量、买入卖出股票的

22、金额。如果从严谨角度出发,可以根据冻结解冻流水逐笔做反 向处理。买卖数量和买卖金额可以做简单处理,直接清零。2. 一般股票买卖包括买入和卖出 2 个环节。(1)买入。合并分笔成交,成交数量为分笔成交数 量合计,买入金额为分笔成交数量乘以分笔成交价格 的合计,根据成交金额计算各种费用,包括佣金、印花税、过户费等,还需要考虑最低费用。具体计算公式为: 成交数量 = (分笔成交数量)成交金额 = (分笔成交数量分笔成交价格) 成交价格 =(成交金额 / 成交数量)取小数 3 位 成交数量需要考虑余额单位,国债以手为单位,成交数量需要乘以 10。佣金 = min(成交金额佣金比例,最低佣金额), 取小

23、数 2 位印花税 = (分笔成交数量分笔成交价格印花税率,取小数 2 位),印花税必须分笔计算取小数 2 位 再合计过户费 = min(成交数量过户费比例),上海 A 股有过户费 其他费用:按金额、数量或笔数收取清算金额 = 0.0 -( 成交金额 + 佣金 + 印花税 + 过 户费 + 其他费用)修改资金信息:当前余额 = 当前余额 + 清算金额 修改股票信息: 54 OCT10,2009 NO1054应 用 技 术2009 年 10 月 10 日 第 10 期FINANCIAL COMPUTER OF HUANAN持仓金额 =(原来)持仓金额 + abs(清算金额)当前数量 = 当前数量

24、+ 成交数量(2)卖出。合并分笔成交,成交数量为分笔成交数 量合计,卖出金额为分笔成交数量乘以分笔成交价格的合计,根据成交金额计算各种费用,包括佣金、印花 税、过户费等,还需要考虑最低费用。具体计算公式为:成交数量 = (分笔成交数量)成交金额 = (分笔成交数量分笔成交价格) 成交价格 =(成交金额 / 成交数量)取小数 3 位成交数量需要考虑余额单位,国债以手为单位,成 交数量需要乘以 10。佣金 = min(成交金额佣金比例,最低佣金额), 取小数 2 位印花税 =(分笔成交数量分笔成交价格印花税率,取小数 2 位),印花税必须分笔计算取小数 2 位 再合计过户费 = min(成交数量过

25、户费比例),上海 A 股 有过户费其他费用:按金额、数量或笔数收取清算金额 = 成交金额 - 佣金 - 印花税 - 过户费 - 其他费用修改资金信息:当前余额 = 当前余额 + 清算金额 修改股票信息:持仓金额 =(原来)持仓金额 - 清算金额当前数量 = 当前数量 - 成交数量3. 如果是配股,可以把买入和卖出都统一为买入, 计算方法跟股票买入一样,只是不计算持仓价,股票当前数量修改为:当前数量 = 当前数量 - 成交数量 这样会出现花钱配股,股权越配越少,资金也减少,但市值没有增加的情况。这是目前很多系统都存在的问题,如需解决,可以另增加表来保存和计算。4. 其他交易,如指定交易、撤销指定

26、交易、配售、配 号等,这些交易都跟市值计算影响不大,具体就不再详细介绍。5. 删除当前数量为 0 的股票记录,如果需要连续 计算股票盈亏,可以把该记录盈亏记录到备用表中,供以后买入时自动修改持仓金额。6. 修改期初资金为当前资金和修改期初股票数量为当前股票数量。(五)其他股份资金变动1. 红利 如果红利入账,则持仓金额减去红利金额。2. 红股 增加当前数量,不修改持仓金额。3. 配股到账上海 A 股配股代码和上市代码是不相同的,数量 直接加到现有数量中或新增加一条记录,持仓金额则需要找到原来配股的代码信息中昨日收盘价,将收盘 价乘以到账数量的结果作为该入账持仓金额,加到已经存在持仓金额中或新增

27、记录中,最后删除对应配股 权证代码的所有记录。深圳新股增加到账,直接用交易所传过来数量和金额作为新增加数量和持仓金额,删除对应配股权证 代码的所有记录。4. 新股增发到账上海 A 股新股申购代码和上市代码是不相同的, 数量直接加到现有数量中或新增加一条记录,持仓金额则需要找到原来申购的代码,取到申购时的持仓金额作为该入账持仓金额,加到已经存在持仓金额或新 增记录中,最后删除全部申购余额记录。深圳新股到账可以用校验方法,如果数量跟系统一样则保持不动,否则以交易所为准,并且交易所有资 金字段都可以作为该数据的持仓金额。5. 权证增加权证数量,如果原来有权证,则替换原来数 量,持仓金额为 0。五、结束语上面所列的是最 常用 的股份变动和最简 单 的 市值统计、盈亏分析方法。目前交易系统中还有融资融 券、ETF 交易等,需要复杂计算,不过也可以通过辅助表来完成,这里就不再详细展开。本文讨论的简易计算还有缺陷,如不能记录历史盈亏 、不能准确推断上 海股票到账数据持仓金额、没有讲述融资和融券计算过程等。笔者希望能与大家一起讨论完善该统计 过 程,给刚入门或准备自己做一套分析系统的读者提供 最基本的参考。(责任编辑:梁春丽)OCT10,2009 NO105555

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1