摘要:在投资收益率分析时,单只投资品种在给定周期内取得的收益率是重要的参考指标。但是对于该数值的计算,现有的方法都存在各种问题。本文在总结了当前常用收益率计算方式的基础上,提出了一种新的算法,相比已有算法,能够在各种场景下都得到较为合理且符合直觉的收益率数据。
最近在用软件计算每只投资品种的年化收益率时,尝试了数种不同方式,但是发现每种方式都存在着不小的问题。
为了讨论的方便,这里假设投资品是某只股票S,收益率周期为一年。我们希望计算出在一年时间里,某个投资者在股票S上总共取得了多少的收益率。
首先,在股票S上赚得的收益绝对数值是容易确定的,也就是通常我们说的收益率的分子是确定的。比如过去一年投资S,到了年底,所有卖出S的总金额 + 年底S的持仓市值 - (所有买入S的总金额 + 年初S的持仓市值),这个数值就是收益的绝对数额,它不大可能有争议。
但是对于收益率的分母,就很难确定了。以下讨论各种已有的常用方法:
1.以年初持有S的持仓市值作为分母
如果全年持有S不动,或者只卖不买,那么用这个值做分母很准确。但是一旦年中有大幅买入S,这个收益率就不准了。一个极端的情况是年初未持有S,在年中陆续买入,那么分母为0,收益率为无穷大。这显然不合理。
2.以年初持有S的持仓市值 + 全年买入S的总金额作为分母
这种算法对于很少操作的投资者来说,计算出的收益率很合理。但是如果是一个高频短线操作者,买入S的总金额会畸高。比如每天全仓做一次T赚1%,全年收益率可达到365%(如果不考虑休息日和复利计算的话),但是用这种方法算出来收益率却只有1%,因为每次买入S都会增大分母,即使实际没有投入更多资金。
3.以当前持有S的持仓市值 - 过去赚得的绝对收益作为分母
这种方法是绝大多数证券软件显示收益率时使用的方法,它的思想是把已经赚到的钱从成本中扣除,让成本的减少来反映过去操作产生的收益。比如S的初始价格为10元,涨到15后卖掉一半,那么剩下一半显示成本会变成5元,这个时候显示的收益率是300%(15/5)。
这种方法只适用于“等价成本”没有减少到0以下的场景,一旦赚得的收益比初始成本还高了,成本就会显示成负的,导致收益率无法计算。另外该方法也只能用于一直持有S份额的周期内。如果中间有一段时间把S清仓了,该算法通常会将收益率归0。
4.以全年持有S的最大峰值持仓市值作为分母
这是对方法2的改进,避免了方法2中每次买入都增大分母的问题。
这种方法在正收益的情况下比较合理,但是如果是亏损的,多次亏损的累加额可能超过最大持仓市值。打个比方:一年里每次买入1万元后亏损5000元卖出,重复10次,总共亏损了5万元。由于最大峰值市值是1万元,收益率就是-500%。这显然不合理,因为投资者并未动用杠杆,最大只可能亏损100%,不可能亏成负债。
5.以全年持有S的每日平均市值作为分母
这种方法非常适合固收类投资,尤其适合货币基金。因为这种投资品的收益是稳定产生的,那么平均每日的资本正好体现其年化平均回报。
但对于权益类投资就非常不合适了:该方法会进行不恰当的“年化”。比如某天买入S,第二天卖出,取得了1%的收益。按这种方法,收益会“年化”成1%*365=365%。但权益类投资并不能每天稳定复制收益,不能这样“年化”计算。
6.用基金净值法计算收益率
基金净值法是很多投资者较为推崇的方法,但我曾指出过使用该方法的前提是必须保证“虚拟基金”的“申购”、“赎回”操作完全不受投资者本人控制[1]。显然,对于单只投资品的收益率计算,基金净值法完全不适用——因为加减仓操作全部是投资者本人在控制。举例:当S涨了一倍以后加仓,视为“申购”,基金净值不变;减仓视为“赎回”,也不改变净值。中途的加减仓操作完全不影响收益率,导致计算结果严重失真。
可见,当前的收益率计算方式都存在一些问题,在某些场景下使得收益率严重失真。基于此,我试图提出一种新的单品种收益率计算方法,目前来看,它相比以上方式能更广的适用于权益类投资的各种场景。
7.(新方法)以“虚拟账户”的最小可能期初资产作为分母
这种方法基于这样的逻辑:假设有一个专用“账户”,这个“账户”里所有的资金只用于投资S。那么,该“账户”里最少需要在年初的时候有多少资产(包含年初持仓的市值和后续操作需要的增量现金),才能保证全年对S的操作全部有效完成?该最少的资金量就是收益率的分母。
来看看几个实例:
1) S初始价格为10元,持有100份,对应资金1000元。年中S涨到20元,卖出50份,此时该“账户”中有1000元的S市值和1000元的现金。然后S跌回10元,再买入200份,此时“账户”中1000元的现金不够用,还需要追加1000元才能完成买入操作。因此我们给“账户”初始资金加上1000元。也就是说,年初如果该“账户”至少有2000元资产,那么全年对S的操作全部可以有效完成。因此收益率的分母就是2000。在该例子中,如果S年末价格仍然为10元,那么投资收益率为500/2000=25%。
2) 假设S可以跌到0。如果全年操作10次,每次都投入1000元,然后全部亏光,最后年末剩余资产为0。那么年初“账户”至少有1000 * 10 = 10000元的资产才能完成全年操作,实际亏损也是10000元,收益率为-100%。此例可以说明在未使用杠杆时,该方法计算的收益率不可能会小于-100%。
方法7在手工计算时比较麻烦,但是用计算机编程计算并不复杂。鉴于该方法更广的适用率与更准确的计算结果,推荐在更多的收益率呈现场合使用这种方法进行计算。
也欢迎各位朋友对该新方法提出更多的意见和建议!
[1] https://www.jisilu.cn/question/447810X21X 注意第4个回复
最近在用软件计算每只投资品种的年化收益率时,尝试了数种不同方式,但是发现每种方式都存在着不小的问题。
为了讨论的方便,这里假设投资品是某只股票S,收益率周期为一年。我们希望计算出在一年时间里,某个投资者在股票S上总共取得了多少的收益率。
首先,在股票S上赚得的收益绝对数值是容易确定的,也就是通常我们说的收益率的分子是确定的。比如过去一年投资S,到了年底,所有卖出S的总金额 + 年底S的持仓市值 - (所有买入S的总金额 + 年初S的持仓市值),这个数值就是收益的绝对数额,它不大可能有争议。
但是对于收益率的分母,就很难确定了。以下讨论各种已有的常用方法:
1.以年初持有S的持仓市值作为分母
如果全年持有S不动,或者只卖不买,那么用这个值做分母很准确。但是一旦年中有大幅买入S,这个收益率就不准了。一个极端的情况是年初未持有S,在年中陆续买入,那么分母为0,收益率为无穷大。这显然不合理。
2.以年初持有S的持仓市值 + 全年买入S的总金额作为分母
这种算法对于很少操作的投资者来说,计算出的收益率很合理。但是如果是一个高频短线操作者,买入S的总金额会畸高。比如每天全仓做一次T赚1%,全年收益率可达到365%(如果不考虑休息日和复利计算的话),但是用这种方法算出来收益率却只有1%,因为每次买入S都会增大分母,即使实际没有投入更多资金。
3.以当前持有S的持仓市值 - 过去赚得的绝对收益作为分母
这种方法是绝大多数证券软件显示收益率时使用的方法,它的思想是把已经赚到的钱从成本中扣除,让成本的减少来反映过去操作产生的收益。比如S的初始价格为10元,涨到15后卖掉一半,那么剩下一半显示成本会变成5元,这个时候显示的收益率是300%(15/5)。
这种方法只适用于“等价成本”没有减少到0以下的场景,一旦赚得的收益比初始成本还高了,成本就会显示成负的,导致收益率无法计算。另外该方法也只能用于一直持有S份额的周期内。如果中间有一段时间把S清仓了,该算法通常会将收益率归0。
4.以全年持有S的最大峰值持仓市值作为分母
这是对方法2的改进,避免了方法2中每次买入都增大分母的问题。
这种方法在正收益的情况下比较合理,但是如果是亏损的,多次亏损的累加额可能超过最大持仓市值。打个比方:一年里每次买入1万元后亏损5000元卖出,重复10次,总共亏损了5万元。由于最大峰值市值是1万元,收益率就是-500%。这显然不合理,因为投资者并未动用杠杆,最大只可能亏损100%,不可能亏成负债。
5.以全年持有S的每日平均市值作为分母
这种方法非常适合固收类投资,尤其适合货币基金。因为这种投资品的收益是稳定产生的,那么平均每日的资本正好体现其年化平均回报。
但对于权益类投资就非常不合适了:该方法会进行不恰当的“年化”。比如某天买入S,第二天卖出,取得了1%的收益。按这种方法,收益会“年化”成1%*365=365%。但权益类投资并不能每天稳定复制收益,不能这样“年化”计算。
6.用基金净值法计算收益率
基金净值法是很多投资者较为推崇的方法,但我曾指出过使用该方法的前提是必须保证“虚拟基金”的“申购”、“赎回”操作完全不受投资者本人控制[1]。显然,对于单只投资品的收益率计算,基金净值法完全不适用——因为加减仓操作全部是投资者本人在控制。举例:当S涨了一倍以后加仓,视为“申购”,基金净值不变;减仓视为“赎回”,也不改变净值。中途的加减仓操作完全不影响收益率,导致计算结果严重失真。
可见,当前的收益率计算方式都存在一些问题,在某些场景下使得收益率严重失真。基于此,我试图提出一种新的单品种收益率计算方法,目前来看,它相比以上方式能更广的适用于权益类投资的各种场景。
7.(新方法)以“虚拟账户”的最小可能期初资产作为分母
这种方法基于这样的逻辑:假设有一个专用“账户”,这个“账户”里所有的资金只用于投资S。那么,该“账户”里最少需要在年初的时候有多少资产(包含年初持仓的市值和后续操作需要的增量现金),才能保证全年对S的操作全部有效完成?该最少的资金量就是收益率的分母。
来看看几个实例:
1) S初始价格为10元,持有100份,对应资金1000元。年中S涨到20元,卖出50份,此时该“账户”中有1000元的S市值和1000元的现金。然后S跌回10元,再买入200份,此时“账户”中1000元的现金不够用,还需要追加1000元才能完成买入操作。因此我们给“账户”初始资金加上1000元。也就是说,年初如果该“账户”至少有2000元资产,那么全年对S的操作全部可以有效完成。因此收益率的分母就是2000。在该例子中,如果S年末价格仍然为10元,那么投资收益率为500/2000=25%。
2) 假设S可以跌到0。如果全年操作10次,每次都投入1000元,然后全部亏光,最后年末剩余资产为0。那么年初“账户”至少有1000 * 10 = 10000元的资产才能完成全年操作,实际亏损也是10000元,收益率为-100%。此例可以说明在未使用杠杆时,该方法计算的收益率不可能会小于-100%。
方法7在手工计算时比较麻烦,但是用计算机编程计算并不复杂。鉴于该方法更广的适用率与更准确的计算结果,推荐在更多的收益率呈现场合使用这种方法进行计算。
也欢迎各位朋友对该新方法提出更多的意见和建议!
[1] https://www.jisilu.cn/question/447810X21X 注意第4个回复
0
@陪伴成长
我做自己家庭的收益统计有好几年了,“崩溃”这种事都已经发生很多次了,呵呵。现实情况甚至远比举例中的这个案例还复杂得多,光是资金入口都数不胜数:各种互联网平台红包、转账、工资入账、同事还钱、亲属礼金……还有各个家庭成员之间的投资账户还经常互相转账,而且每个成员还想要知道自己的投资账户的单独收益率……
好的软件必然是根据用户复杂的需求逐渐迭代出来的,程序员不就是把复杂留给自己,把简单留给用户么。
我觉得如果你这样开发软件,会崩溃的。<br>其实这恰恰是我最推荐的收益计算方式,我在实盘帖中也建议使用家庭净资产作为分母,其实就是把银行卡、理财账户、证券账户等等所有家庭掌握的账户合在一起视为“投资账户”。
<br>
按照我的保守逻辑,这个投资者和证券账户关联的银行卡就是 一个子账户,京东理财(或者其他所有的理财)都是这个子账户的分账户。按照这样的逻辑,股票账户、银行卡、京东理财。。。都是账户的一部分,甚至消费也是这个账户的一部分。不用担心,这是每个软件用户都能理解的逻辑。<br>
<br>
这样问题就简单了:只要有一笔钱进入这个银行卡(入口),就是这个账...
我做自己家庭的收益统计有好几年了,“崩溃”这种事都已经发生很多次了,呵呵。现实情况甚至远比举例中的这个案例还复杂得多,光是资金入口都数不胜数:各种互联网平台红包、转账、工资入账、同事还钱、亲属礼金……还有各个家庭成员之间的投资账户还经常互相转账,而且每个成员还想要知道自己的投资账户的单独收益率……
好的软件必然是根据用户复杂的需求逐渐迭代出来的,程序员不就是把复杂留给自己,把简单留给用户么。
0
@goalsum
按照我的保守逻辑,这个投资者和证券账户关联的银行卡就是 一个子账户,京东理财(或者其他所有的理财)都是这个子账户的分账户。按照这样的逻辑,股票账户、银行卡、京东理财。。。都是账户的一部分,甚至消费也是这个账户的一部分。不用担心,这是每个软件用户都能理解的逻辑。
这样问题就简单了:只要有一笔钱进入这个银行卡(入口),就是这个账户的本金投入。
祝你的软件开发顺利。
这是专户专款专用的理想情况,但是有很多人的账户并不是严格控制用途的。<br>我觉得如果你这样开发软件,会崩溃的。
<br>
举个例子:一个投资者快收盘时把证券账户里1w元转到自己银行卡上,然后从银行卡又转1.5w到京东理财上,京东的钱包里原本就有5w元。然后晚上用京东钱包消费买衣服花掉了几千。第二天又从京东钱包转2w到银行卡,再转入证券账户。<br>
<br>
在这个过程中,想要识别投资账户的“入口”,需要跟踪资金的流向并做深度的计...
按照我的保守逻辑,这个投资者和证券账户关联的银行卡就是 一个子账户,京东理财(或者其他所有的理财)都是这个子账户的分账户。按照这样的逻辑,股票账户、银行卡、京东理财。。。都是账户的一部分,甚至消费也是这个账户的一部分。不用担心,这是每个软件用户都能理解的逻辑。
这样问题就简单了:只要有一笔钱进入这个银行卡(入口),就是这个账户的本金投入。
祝你的软件开发顺利。
0
@陪伴成长
举个例子:一个投资者快收盘时把证券账户里1w元转到自己银行卡上,然后从银行卡又转1.5w到京东理财上,京东的钱包里原本就有5w元。然后晚上用京东钱包消费买衣服花掉了几千。第二天又从京东钱包转2w到银行卡,再转入证券账户。
在这个过程中,想要识别投资账户的“入口”,需要跟踪资金的流向并做深度的计算,用软件很难实现。如果最终能够准确识别出来第二天转入的2w包含了第一天转出的1w,只有1w是增量资金,那么整个计算过程和文中的方法7也很接近了。
资金买理财并不会影响计算,因为你可以把理财账户也看成资金账户的一个子账户,买理财只是账户里面的转移,而理财收益也是账户收益。<br>这是专户专款专用的理想情况,但是有很多人的账户并不是严格控制用途的。
<br>
你只需要控制好入口:到底有多少钱投入进来用于投资,就行了。
举个例子:一个投资者快收盘时把证券账户里1w元转到自己银行卡上,然后从银行卡又转1.5w到京东理财上,京东的钱包里原本就有5w元。然后晚上用京东钱包消费买衣服花掉了几千。第二天又从京东钱包转2w到银行卡,再转入证券账户。
在这个过程中,想要识别投资账户的“入口”,需要跟踪资金的流向并做深度的计算,用软件很难实现。如果最终能够准确识别出来第二天转入的2w包含了第一天转出的1w,只有1w是增量资金,那么整个计算过程和文中的方法7也很接近了。
0
@文明守望
那么,在年终的核算时,用户希望看到自己过去一年在每个品种上的总收益率是多少。这里呈现的数字希望尽可能的符合一个普通大众的直观感受,也就是尽可能接近他“真实获得”的收益率。
所以在这个场景下,“年化”的计算方法是不太合适的(文中的方法5也有讨论)。我觉得用户如果全年就操作了一次,获得1%的收益,最合理的全年收益率显示就是1%。
可以确定的是这次操作的收益是1%。XIRR算出3678%确实不合理。<br>我所面临的场景比较具体:我想开发一套软件来进行记账,以及自动计算投资收益等各项数据。目标用户是普通的业余投资者。
那么按照LZ的方法,该投资者的年化收益率是多少?<br>
这只是个理论探讨,我觉得一年只操作这样一次的话,年化收益率没有意义。
那么,在年终的核算时,用户希望看到自己过去一年在每个品种上的总收益率是多少。这里呈现的数字希望尽可能的符合一个普通大众的直观感受,也就是尽可能接近他“真实获得”的收益率。
所以在这个场景下,“年化”的计算方法是不太合适的(文中的方法5也有讨论)。我觉得用户如果全年就操作了一次,获得1%的收益,最合理的全年收益率显示就是1%。
0
成本为负的时候,券商的计算是按照持仓市值作为分母,当然收益率的显示夸张且不真实。
加上备用金作为分母是很好的解决方法。
仓位管理通常从整体资金的角度考虑,或者说有可能若干投资品种公用备用金,以期资金效率高些。
加上备用金作为分母是很好的解决方法。
仓位管理通常从整体资金的角度考虑,或者说有可能若干投资品种公用备用金,以期资金效率高些。
0
@陪伴成长
你说的账户的年度总收益算法和方法2思想有点像,确实是个保守算法。只要没有出现账户频繁资金进出的情况(比如有的人每天收盘都把所有钱转出来放理财),这样算出来的结果基本没问题。
说起来,还是有些区别的。<br>那文中的方法2应该对应到你说的“绝对收益比例”这一项。至于是否年化,在方法5中有探讨。当然像你这样同时多种算法计算出多个结果来参考是最稳妥的。
<br>
你的计算方法2(其他方法也一样),是直接计算年度收益。而我计算的是总收益,再折算到年化收益。应该说,我的计算方法要保守得多。<br>
<br>
对于单一标的,我同时使用 绝对收益金额,绝对收益比例 和 年化收益比例 三者一起进行评价,所以我会选择最保守的计算方法来计算收益。<br>
<br>
当然,这并不影响我计算账户的年度总收益。在计算账户年度收益率的...
你说的账户的年度总收益算法和方法2思想有点像,确实是个保守算法。只要没有出现账户频繁资金进出的情况(比如有的人每天收盘都把所有钱转出来放理财),这样算出来的结果基本没问题。
0
@goalsum
你的计算方法2(其他方法也一样),是直接计算年度收益。而我计算的是总收益,再折算到年化收益。应该说,我的计算方法要保守得多。
对于单一标的,我同时使用 绝对收益金额,绝对收益比例 和 年化收益比例 三者一起进行评价,所以我会选择最保守的计算方法来计算收益。
当然,这并不影响我计算账户的年度总收益。在计算账户年度收益率的时候,我会选择 账户初始余额+年内所有转入金额(无论年内什么时候转入,不考虑转出,也不考虑是否参与标的交易) 作为分母计算收益率。
希望我以上的思路,能够给你一些参考。
这就是文中的方法2。这种计算方法对于操作次数不多的投资者都是合理的,只是对于高频短线操作的投资者来说,算出的年化收益率是单次做T平均收益,非常不公平。<br>说起来,还是有些区别的。
<br>
方法2还有个好处,就是使用Excel计算很方便,不用额外编程。当前我自己编写的SQL数据库也在用这种算法。(因为我自己不做短线)<br>
<br>
我新提出的方法7对于长线投资者来说,算出的结果和方法2差不多,对于高频投资者计算出...
你的计算方法2(其他方法也一样),是直接计算年度收益。而我计算的是总收益,再折算到年化收益。应该说,我的计算方法要保守得多。
对于单一标的,我同时使用 绝对收益金额,绝对收益比例 和 年化收益比例 三者一起进行评价,所以我会选择最保守的计算方法来计算收益。
当然,这并不影响我计算账户的年度总收益。在计算账户年度收益率的时候,我会选择 账户初始余额+年内所有转入金额(无论年内什么时候转入,不考虑转出,也不考虑是否参与标的交易) 作为分母计算收益率。
希望我以上的思路,能够给你一些参考。
0
@陪伴成长
方法2还有个好处,就是使用Excel计算很方便,不用额外编程。当前我自己编写的SQL数据库也在用这种算法。(因为我自己不做短线)
我新提出的方法7对于长线投资者来说,算出的结果和方法2差不多,对于高频投资者计算出的收益率也贴近实际收益,所以说能适应更广的场景。
P.S. 集思录发帖怎么会自己吞掉 + 号,似乎两边加空格才能正常显示。
单个标的的收益率计算,越简单越好,越保守越好。这就是文中的方法2。这种计算方法对于操作次数不多的投资者都是合理的,只是对于高频短线操作的投资者来说,算出的年化收益率是单次做T平均收益,非常不公平。
计算单一股票的总收益率,我都使用累计买入此股票的总资金,作为分母计算总收益率和年化收益率。
这应该是最保守的算法 。。。
方法2还有个好处,就是使用Excel计算很方便,不用额外编程。当前我自己编写的SQL数据库也在用这种算法。(因为我自己不做短线)
我新提出的方法7对于长线投资者来说,算出的结果和方法2差不多,对于高频投资者计算出的收益率也贴近实际收益,所以说能适应更广的场景。
P.S. 集思录发帖怎么会自己吞掉 + 号,似乎两边加空格才能正常显示。