@@ 1769-1792 (lines=24) @@ | ||
1766 | * |
|
1767 | * @return float |
|
1768 | */ |
|
1769 | public static function PRICEDISC($settlement, $maturity, $discount, $redemption, $basis = 0) |
|
1770 | { |
|
1771 | $settlement = Functions::flattenSingleValue($settlement); |
|
1772 | $maturity = Functions::flattenSingleValue($maturity); |
|
1773 | $discount = (float) Functions::flattenSingleValue($discount); |
|
1774 | $redemption = (float) Functions::flattenSingleValue($redemption); |
|
1775 | $basis = (int) Functions::flattenSingleValue($basis); |
|
1776 | ||
1777 | // Validate |
|
1778 | if ((is_numeric($discount)) && (is_numeric($redemption)) && (is_numeric($basis))) { |
|
1779 | if (($discount <= 0) || ($redemption <= 0)) { |
|
1780 | return Functions::NAN(); |
|
1781 | } |
|
1782 | $daysBetweenSettlementAndMaturity = DateTime::YEARFRAC($settlement, $maturity, $basis); |
|
1783 | if (!is_numeric($daysBetweenSettlementAndMaturity)) { |
|
1784 | // return date error |
|
1785 | return $daysBetweenSettlementAndMaturity; |
|
1786 | } |
|
1787 | ||
1788 | return $redemption * (1 - $discount * $daysBetweenSettlementAndMaturity); |
|
1789 | } |
|
1790 | ||
1791 | return Functions::VALUE(); |
|
1792 | } |
|
1793 | ||
1794 | /** |
|
1795 | * PRICEMAT. |
|
@@ 2006-2029 (lines=24) @@ | ||
2003 | * |
|
2004 | * @return float |
|
2005 | */ |
|
2006 | public static function RECEIVED($settlement, $maturity, $investment, $discount, $basis = 0) |
|
2007 | { |
|
2008 | $settlement = Functions::flattenSingleValue($settlement); |
|
2009 | $maturity = Functions::flattenSingleValue($maturity); |
|
2010 | $investment = (float) Functions::flattenSingleValue($investment); |
|
2011 | $discount = (float) Functions::flattenSingleValue($discount); |
|
2012 | $basis = (int) Functions::flattenSingleValue($basis); |
|
2013 | ||
2014 | // Validate |
|
2015 | if ((is_numeric($investment)) && (is_numeric($discount)) && (is_numeric($basis))) { |
|
2016 | if (($investment <= 0) || ($discount <= 0)) { |
|
2017 | return Functions::NAN(); |
|
2018 | } |
|
2019 | $daysBetweenSettlementAndMaturity = DateTime::YEARFRAC($settlement, $maturity, $basis); |
|
2020 | if (!is_numeric($daysBetweenSettlementAndMaturity)) { |
|
2021 | // return date error |
|
2022 | return $daysBetweenSettlementAndMaturity; |
|
2023 | } |
|
2024 | ||
2025 | return $investment / (1 - ($discount * $daysBetweenSettlementAndMaturity)); |
|
2026 | } |
|
2027 | ||
2028 | return Functions::VALUE(); |
|
2029 | } |
|
2030 | ||
2031 | /** |
|
2032 | * SLN. |