2

一連の株式取引の IRR を計算する方法を教えてくれる人はいますか?

シナリオは次のとおりです。

$10,000 of stock #1 purchased 1/1 and sold 1/7 for $11,000 (+10%)
$20,000 of stock #2 purchased 1/1 and sold 1/20 for $21,000 (+5%)
$15,000 of stock #3 purchased on 1/5 and sold 1/18 for $14,000 (-6.7%)

これは役に立つはずです: http://www.rubyquiz.com/quiz156.html

しかし、各リターンの期間が一貫した期間(1年)を超えていると想定しているため、ソリューションを適応させる方法を理解できませんでした。

4

6 に答える 6

9

私はついに私が探していたものを正確に見つけました:http://rubydoc.info/gems/finance/1.1.0/Finance/Cashflow

gem install finance

私が最初に投稿したシナリオを解決するには:

include Finance
trans = []
trans << Transaction.new( -10000, date: Time.new(2012,1,1) )
trans << Transaction.new( 11000, date: Time.new(2012,1,7) )
trans << Transaction.new( -20000, date: Time.new(2012,1,1) )
trans << Transaction.new( 21000, date: Time.new(2012,1,20) )
trans << Transaction.new( -15000, date: Time.new(2012,1,5) )
trans << Transaction.new( 14000, date: Time.new(2012,1,18) )

trans.xirr.apr.to_f.round(2)

私もこの簡単な方法を見つけました:https ://gist.github.com/1364990

しかし、それは私にいくつかの問題を与えました。半ダースの異なるテストケースを試しましたが、そのうちの1つで、デバッグできなかったという例外が発生しました。しかし、このFinance gemのxirr()メソッドは、私が投げることができるすべてのテストケースで機能しました。

于 2012-02-10T04:05:19.460 に答える
2

購入価格、販売価格、および保有期間を含むサンプル データの場合のように、初期値と最終値を持つ投資の場合、保有期間の利回りを見つけるだけで済みます。

保有期間利回りは、保有期間利回りから1を引いたものです。

HPY = HPR - 1
HPR = final value/initial value
HPY = 11,000/10,000 - 1 = 1.1 - 1 = 0.10 = 10%
HPY = 21,000/20,000 - 1 = 1.05 - 1 = 0.05 = 5%
HPY = 14,000/15,000 - 1 = 0.9333 - 1 = -0.0667 = -6.7%

この記事では、保有期間のリターンと利回りについて説明します

次の式 AHPR = HPR^(1/n) AHPY = AHPR - 1 を使用して、保有期間のリターンと保有期間の利回りを年換算することもできます。

上記の式は、例の株式売買の場合のように、単一期間のリターンがある場合にのみ適用されます。

ただし、複数のリターンがあった場合、たとえば、1/1 に株 A を 100 で購入し、翌週の終値が上昇して 98、103、101、100、99、104 に下落したとします。

次に、複数のリターンの HPR と HPY を超えて調べる必要があります。この場合、ARR と GRR を計算できます。算術収益率幾何学的収益率のオンライン計算機を試してみてください。

しかし、投資の日程が決まっている場合は、これらのどれも当てはまりません。次に、不規則なキャッシュ フローの IRR を見つけることに頼る必要があります。IRR は、定期的なキャッシュ フローの内部収益率です。株式取引などの不規則なキャッシュ フローには、XIRR という用語が使用されます。XIRR は、不規則なキャッシュ フローの内部収益率を計算する Excel 関数です。XIRR を見つけるには、一連のキャッシュ フローとキャッシュ フローの日付スケジュールが必要です。

Finance.ThinkAndDone.comは、RubyQuiz や Wiki で引用した記事よりもはるかに詳細に IRR を説明しています。Think & Done の IRR 記事では、NPV 式を 0 に設定するか、収益性指標式を 1 に設定して、ニュートン ラフソン法とセカント法による IRR 計算について説明しています。このサイトでは、オンラインの IRR および XIRR 計算機も提供しています。

于 2012-02-09T11:05:32.897 に答える
1

私は金融について何も知りませんが、6 か月間の収益率を知りたい場合は、年率を 2 回複利したときの利回りになるはずです。3か月分のレートを知りたい場合は、4倍複利で年利と等しくなるようなレートにするなどです。これは、年利回りから任意の期間のレートに換算することが根の計算と密接に関係していることを意味します。 . 年間の収益率を元の金額の割合として表す場合 (つまり、20% の収益を 1.2、100% の収益を 2.0 などと表す)、その数値の平方根をとることで 6 か月の収益率を得ることができます。 .

Ruby には、あらゆる種類の複素根を計算するための非常に便利な方法があります。指数演算子**.

n ** 0.5       # square root
n ** (1.0/3.0) # 3rd root

...等々。

したがって、次の方法で、年間収益率を任意の期間の収益率に変換できるはずです。

yearly_return ** (days.to_f / 365)

同様に、日次、週次、月次のレートを変換したり、年率に戻したりするには:

yearly_return = daily_return ** 365
yearly_return = weekly_return ** 52
yearly_return = monthly_return ** 12

...等々。

私が見る限り (ウィキペディアの記事を読んでから)、IRR の計算は実際には使用された期間に依存していません。一連の年間キャッシュ フローを入力として与えると、年率が得られます。一連の毎日のキャッシュ フローを入力として与えると、毎日のレートが得られます。

リンクしたソリューションの 1 つを使用して、日次または週次のキャッシュ フローの IRR を計算し (便利なものは何でも)、指数を使用して年率に変換することをお勧めします。メソッドの出力に 1 を追加する必要がありますirr()(10% のリターンが 0.1 ではなく 1.1 になるようにするなど)。

あなたが与えた例の毎日のキャッシュフローを使用すると、これを実行して毎日のIRRを取得できます。

irr([-30000,0,0,0,-15000,0,11000,0,0,0,0,0,0,0,0,0,0,14000,0,21000])
于 2012-02-05T15:33:01.407 に答える
1

Exonio ライブラリを使用できます。

https://github.com/Noverde/exonio

次のように使用します。

Exonio.irr([-100, 39, 59, 55, 20]) # ==> 0.28095
于 2016-04-18T11:22:48.063 に答える
0

この問題を非常に簡単に解決する新しい gem 'finance_math' があります。

https://github.com/kolosek/finance_math

于 2015-03-05T09:24:42.567 に答える
0

あなたのシナリオを理解できるようにするための主な問題は、あらゆる種類のIRRを計算するための不可欠な要素である各株式のキャッシュフローの欠如であると思います.これらがなければ、どの式も使用できません. . これを明確にしていただければ、問題の解決をお手伝いできます

エベルト デル リオ

于 2013-03-04T22:11:21.173 に答える