一种节省存储空间的追溯资产所有权变更历史的方法与流程

文档序号:12887993阅读:327来源:国知局
一种节省存储空间的追溯资产所有权变更历史的方法与流程

[技术领域]

本发明涉及数据处理技术领域,具体来说是一种节省存储空间的追溯资产所有权变更历史的方法。

[

背景技术:
]

随着无纸化交易的广泛使用,大量金融资产开始摆脱实物凭证形式,以电子化的形式存在,典型例子如沪深交易所交易流通的无纸化证券。为了加强对金融资产交易的监管,除了记录、查询历史交易记录之外,业务上存在追踪特定资产所有权变更历史的要求。不同于房产等实物资产,电子化形式存在的金融资产具有所谓“可替换性”。同一银行账户中存在的两份1元钱彼此价值完全相同,类似地,股票中也存在“同股同权”的现象,同一类型的两份股份价值完全相同,因此在完成支付、交收时买卖双方都不在意究竟交换的是哪一份资产。由此,资产转出方并不会在交易时主动指定具体是哪一份资产被转移,此时就由技术系统按某种策略来替用户来指派转让的是哪几份资产,并基于此对特定资产所有权变更历史进行追踪。

具体实现方法上,以股票为例,目前支持追溯股票交易历史信息的方法是通过“一票一号”的方式,就是对每股股票进行编号(类似每张人民币上的钞票编号),这个编号具有全局唯一性,根据这个唯一编号可以定位单位股票的交易历史信息。此方法虽然简单易行,但按照这种方式,不管某次交易含有多少股股票,对每一股股票都会产生一笔所有权变更记录,然后才能根据此追溯所有权变更历史。如果资产的最小分割单位很小,比如用来追踪美元资产的所有权变更历史,对于每一美分就都要有一个编号,一方面存储空间急剧增加,另一方面美分上也并无编号,因此存在很大的问题。

[

技术实现要素:
]

本发明的目的在于解决现有技术的不足,提供一种节省存储空间的追溯资产所有权变更历史的方法,通过一个金融资产买卖的累积量区间,得到该区间所对应的金融资产来源于哪几笔买入或卖出交易,该账户的买入或卖出交易,也是交易对手方的卖出或买入交易,所以根据每笔买入或卖出交易,可以得到交易对手方的一个买卖累积量区间,如此循环往复,即可追溯所有股票的转手历史信息。

为了实现上述目的,设计一种节省存储空间的追溯资产所有权变更历史的方法,其特征在于采用先进先出的策略完成金融资产的交易并统计每个账户的买入累积量和卖出累积量,给出待求账户的任意买入累积量区间或卖出累积量区间,该买入累积量区间或卖出累积量区间必定与至少一个来源账户的卖出累积量区间或买入累积量区间相对应,根据相对应的累积量区间即能追溯到给出的待求账户任意买入累积量区间或卖出累积量区间内金融资产的来源。

所述的统计每个账户的买入累积量和卖出累积量具体是指:在数据库中为每个账户设有一个买入累积量字段和卖出累积量字段,字段中包括每笔交易的交易流水号和当前累积量数据,数据库按照交易发生的顺序分别记录买入累积量和卖出累积量的数据变化。所述的数据库还记录有每笔交易的金融资产代号,账户信息以及交易量。

追溯给出的待求账户任意累积买入量区间或累积卖出量区间内金融资产来源的步骤具体如下:

a.给出待求账户一项金融资产的买入累积量区间或卖出累积量区间[x,y];

b.查找并得到买入累积量区间或卖出累积量区间[x,y]所对应的至少一笔交易的交易流水号及与交易流水号对应的买入累积量区间或卖出累积量区间;

c.根据交易流水号追溯到来源账户,根据与交易流水号对应的买入累积量区间或卖出累积量区间得到来源账户的卖出累积量区间或买入累积量区间。

在完成步骤a-c之后重复步骤b-c,能继续向前追溯交易来源,直至追溯到待求账户买入累积量区间或卖出累积量区间[x,y]的原始来源。

所述的步骤a的函数原型:

f(a,stockid,[x,y])=((txid1,[累积量区间1]),(txid2,[累积量区间2])…);

其中a为待求账户的账户代号,stockid为金融资产代号,txid为交易流水号。

所述的步骤b具体如下:

使用二分法查找inacculist.get(i).inaccuamt>=x并且

inacculist.get(i-1).inaccuamt<x的下标i,

如果inacculist.get(i).inaccuamt>y,则txid=inacculist.get(i).txid的累积量区间是[x,y];

否则如果inacculist.get(i+1).inaccuamt>y,

则txid1=inacculist.get(i).txid,

累积量区间1是[x,inacculist.get(i).inaccuamt],

txid2=inacculist.get(i+1).txid,

累积量区间2是(inacculist.get(i).inaccuamt,y],

根据下标i递增依次寻找对应的交易流水号和与交易流水号对应的累计量,直到inacculist.get(j).inaccuamt>y,则

txid1=inacculist.get(i).txid

累积量区间1是[x,inacculist.get(i).inaccuamt]

txid2=inacculist.get(i+1).txid

累积量区间2是(inacculist.get(i).inaccuamt,y]

txidn=inacculist.get(j).txid

累积量区间n是[inacculist.get(j).inaccuamt,y]

式中:inacculist.get(i).inaccuamt是指第i笔交易之后的账户买入累积量或卖出累积量的值,inacculist.get(i).txid是指第i笔交易的交易流水号。

所述的步骤c具体如下:根据交易流水号追溯到来源账户,步骤b将待求账户的买入累积量或卖出累积量区间划分为来源于至少一笔交易的买入累积量或卖出累积量区间,设定其中每笔交易的买入累积量或卖出累积量区间为[m,n],根据每笔交易的买入累积量或卖出累积量区间[m,n]可以获得该笔交易来源账户的卖出累积量或买入累积量区间:

[outaccuamt.curraccuamt-(inaccuamt.curraccuamt-m),outaccuamt.curraccuamt-(inaccuamt.curraccuamt-n)]。

另一优选的实施方式是,追溯给出的待求账户任意累积买入量区间或累积卖出量区间内金融资产来源的步骤具体如下:

a.根据数据库中的交易记录获得交易买入方和卖出方的信息,根据金融资

产代号获得交易买入方和卖出方的累积量集合;

b.根据交易流水号获得买入方和卖出方该笔交易的买入累积量和卖出累积量信息;

c.根据查询到的卖出交易累积量可以获得来源账户的卖出交易累积量区间。

本发明同现有技术相比,其优点在于:不需要对每一份金融资产或者每一分钱进行编号,只需要通过很小的字段记录交易累积量,从而节省了大量存储空间,又能依据先进先出策略完成资产转让时的指派,且能高效支持对于任意指定资产的所有权变更历史的追溯,极大地节约了数据的存储空间,对于单笔交易金额或交易量较大的业务场景,存储空间的节省尤其明显。

[附图说明]

图1是本发明发法的追溯示意图;

图2是实施咧1中本发明发法的追溯示意图;

图3是实施例2中本发明发法的追溯示意图。

[具体实施方式]

下面结合附图对本发明作进一步说明,这种方法的原理对本专业的人来说是非常清楚的。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明方法采用先进先出的策略,即对于特定账户持有的特定资产,总是按其收入的顺序被转让出去,比如5天前转入的资产会比2天前转入的资产先转让出去。

参见图1,以股票交易为例,txid=10@100股中txid表示交易流水号,100股代表该笔交易卖出了100股,该笔交易对应的累积量是180,其表示的是该交易对应的累积卖出量,也就是截止到本笔交易总共卖出了180股。a持仓账户下面的一条指向下方的线表示累积量,累积量按照箭头所指的方向单调递增,右侧的带箭头的线表示买入交易,左侧带箭头的线表示卖出交易,以a账户为例,图一中a账户累积量线上左侧的坐标值80,180,400表示累计卖出量,右侧的100,300,530代表累计买入量。对于任意一个累积量区间,所述的累积量区间包括买入累积量区间和卖出累积量区间,以a账户的买入累积量区间[180,400]为例,其对应的交易来源是(txid=7,[180,300])和(txid=8,(300,400]),其中(txid=7,[180,300])代表a账户累积量为180到300的股票来源于交易流水号为txid=7的交易,并且是交易txid=7的后120(300-180=120)股股票。

数据结构设计如下:

式中,accuamt是交易累积量类,有两个字段,txid表示交易流水号,curraccuamt表示当前累积量,包括买入累积量和卖出累积量。

account表示用户的账户类,有两个字段,inaccumap按照stockid存储买入交易累积量list集合,outaccumap按照stockid存储卖出交易累积量list集合。这里的list集合中的数据是按照交易发生的顺序添加。

txrecord表示交易记录类,txid表示交易流水号,stockid表示股票编号,from表示卖出方,to表示买入方,txamt表示交易量。

对于a账户某一股票编号stockid的任意一个累计卖出量区间[x,y],追踪该批股票转手历史的方法如下。

函数原型:f(a,stockid,[x,y])=((txid1,[累积量区间1]),(txid2,[累积量区间2])…)

step1:根据stockid获得inacculist=a.inaccumap.get(stockid);

step2:二分法查找inacculist中inacculist.get(i).inaccuamt>=x并且inacculist.get(i-1).inaccuamt<x的下标i,

如果inacculist.get(i).inaccuamt>y,

则txid=inacculist.get(i).txid的累积量区间是[x,y];

否则如果inacculist.get(i+1).inaccuamt>y,

则txid1=inacculist.get(i).txid,

累积量区间1是[x,inacculist.get(i).inaccuamt];

txid2=inacculist.get(i+1).txid,

累积量区间2是(inacculist.get(i).inaccuamt,y];

否则…

根据下标i递增依次寻找买入交易记录,直到

inacculist.get(j).inaccuamt>y,则

txid1=inacculist.get(i).txid,

累积量区间1是[x,inacculist.get(i).inaccuamt];

txid2=inacculist.get(i+1).txid,

累积量区间2是(inacculist.get(i).inaccuamt,y];

txidn=inacculist.get(j).txid,

累积量区间n是[inacculist.get(j).inaccuamt,y]。

step3:根据累积量区间获得的交易记录历史信息和累积量区间是:

[txid1,累积量区间1],…,(txidn,累积量区间n]。

待求账户a的一个买入交易记录和累积量区间,即(txrecord,[m,n]),[m,n]表示该笔交易对应的累积量区间区间,追溯该交易的股票来源于来源账户b的累积卖出量区间。因为txrecord对象和txid一一对应,为了表述方便,采用(txid,[m,n])形式。

函数原型是f(txid,[m,n])=[累积量区间]。

实施例1

参见图2,可得f(txid=7,[m,n])=[230-(300-m),230-(300-n)],追溯步骤如下:

step1:根据交易记录对象txrecord获得交易买入方和卖出方的信息,

买入方账户为:inaccount=txrecord.to,

卖出方账户为:outaccount=txrecord.from,

根据股票编号stockid获得交易买入方和卖出方的累积量集合:

inacculist=inaccount.inaccumap.get(txrecord.stockid),

outacculist=outaccount.outaccumap.get(txrecord.stockid),

step2:根据交易流水号txrecord.txid可以分别从inacculist和outacculist获得买入方和卖出方该笔交易的累积量信息inaccuamt和outaccuamt。

买入方该笔交易发生后对应的累积量:inaccuamt.curraccuamt,

卖出方该笔交易发生后对应的累积量:outaccuamt.curraccuamt。

step3:根据查询到的卖出交易累积量可以获得账户b的卖出交易累积量区间。

累积量区间起点是outaccuamt.curraccuamt-(inaccuamt.curraccuamt-m),

累积量区间终点是outaccuamt.curraccuamt-(inaccuamt.curraccuamt-n)。

综上所述,对于任一个累计交易量区间,都可以找到该区间所对应的所有买入交易历史信息和相应累积量区间,对于任意一次交易和相应的累积量区间,都可以追溯其来源哪一个累计交易量区间。如此循环往复即可实现每一笔股票交易的溯源。

实施例2

待求账户a和来源账户b的对股票stockid持仓的历史交易信息如图三所示,追溯a账户买入累积量[260,530]的历史交易信息。

step1:根据stockid获得a账户的买入累积量集合,

inacculist=a.inaccumap.get(stockid)。

step2:二分法查找inacculist集合中使得:

inacculist.get(i).curraccuamt>260,

inacculist.get(i-1).curraccuamt<260。

得到i=3,即txid=7的那笔交易,

因为inacculist.get(3).curraccuamt<530,

所以累积量区间是[260,inacculist.get(3).curraccuamt],即[260,300]。

当i=4时,即txid=8那笔交易,

因为inacculist.get(4).curraccuamt<530,

所以累积量区间是(inacculist.get(3).curraccuamt,inacculist.get(4).curraccuamt],即(300,450]。

当i=5时,即txid=9那笔交易,

因为inacculist.get(5).curraccuamt=650>530,

所以累积量区间是(inacculist.get(4).curraccuamt,530]。

综上所述,a账户累积量区间[260,530]所对应的股票来源于:

txid=7,累积量区间1是[260,300],

txid=8,累积量区间2是(300,450],

txid=9,累积量区间3是(450,530],

step3:对于txid=7,该交易对应的a账户的累积量区间[260,300],追溯该笔交易来源于哪个账户的哪个累积量区间,

根据txid,得到交易对手方是b,

根据stockid获得账户b的卖出累积量集合,

outacculist=b.outaccumap.get(stockid)

根据txid获得账户b该笔交易对应的累积量对象

accuamt=outacculist.get(stockid)

则accuamt.curraccuamt就是交易txid=7对应的b账户的累积量,由上图知accuamt.curraccuamt=230,

则交易txid=7对应的b账户的累积量区间是[230-(300-260),230],即[190,230]。

所以txid=7,a账户的累积量区间是[260,300]所对应的股票来源是b账户累积量区间是[190,230)所对应的股票。

同理,可以追溯txid=8,累积量区间是(300,450],txid=9,累积量区间是(450,530],来源于哪个账户,以及相应账户的累积量区间。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1