我无法计算内部 yield 。我使用Microsoft.VisualBasic来计算IRR。这是一个例子:
using Microsoft.VisualBasic;
...
static void Main(string[] args)
{
double[] tmpCashflows = new double[] {
-480117.0,
4471.5158140594149,
6841.5950239895265,
6550.383550359461,
6295.8611873818609,
6074.6070899770129,
5883.532880960287,
6006.9907860976427,
6133.1633945923877
,6262.1156759885489
//,6393.9143799520116
};
decimal irr = 0;
try
{
double tmpIrr = Financial.IRR(ref tmpCashflows);
...
}
catch (Exception ex)
{
irr = 0;
}
}
它给出了“参数无效”类型的异常(在Microsoft.VisualBasic.Financial.IRR(Double []&ValueArray,Double Guess))。
但是,如果我在Excel中进行计算,则不会显示任何错误。
最佳答案
您需要提供一个良好的Guess值作为此API的第二个参数。输入的默认值0.1失败。
试试这个:
double tmpIrr = Financial.IRR(ref tmpCashflows, 0.3);
然后您应该取回
IRR of -0.2987
看起来该API仅处理输入的特定情况,而在其他情况下由于任何猜测而失败。这是在此确认的Microsoft的IRR API错误。
如果Guess成为问题,则最好使用第三方可靠库来计算IRR。
http://connect.microsoft.com/VisualStudio/feedback/details/781299/microsoft-visualbasic-financial-irr-doesnt-solve-for-irr-correctly-in-certain-cases-with-any-guess
之所以会出现
Argument is not valid
异常,是因为无法为默认的 Guess值0.1 计算IRR。注意,给定值满足一个负值(支付)和一个正值的条件。 (收据)在内部,
**Microsoft.VisualBasic.Financial.IRR**
遍历输入值并尝试计算40次迭代中的IRR。它永远不会遇到有效IRR的破坏条件,因此最终会引发此错误。请注意,Excel的值为-30%。
同时,为类似的数组尝试IRR
tmpCashflows = new double[] { -100, 200, 300 };
double tmpIrr = Microsoft.VisualBasic.Financial.IRR(ref tmpCashflows);
得出内部 yield 为2.0或200%。 (通过代码和Excel)