nfTlWNl rn Ѻq$³*%yNk9SVBŹ!SOY˯ID Ѻq$³*%yNk9S8jnM/=uRqCO&oAY\QN#]>\*]MpWmI\٨z#t`W _#1Iķխ}`[W">/m6a7{K]}eЄe#2 ` d$knV)=} Ѻq$³*%yNk9SVBŹ!SؘhIĺ>)'_#1Iķխ}`[W">/m6梾$J!cRx#$߿/1*U1s!vvbudbEh9,Z <}pܔyBq T ROx`? 5zi#јv u4Q{zҰp؆P^94uCTV6E&Ra<~ٲ(|xE:' Yc{ ^ ĢQ$3G"6bmZQ38Ew~dX o5l,,c& &!jܦ .^KMLϽuEPp>6Cr ĢQ$3J4U-|5\t#q7ck.ȶo^H. G\[gx[.`xC=/.O!"&3 I]C63 ĢQ$3 ιw6IcOx@}<)?|P7=X ɂy8 Rޟ`&DՀ:Gv*Y5j~V?۫ iFHgNCô~?Tݰ~ [ihX>h8dY huͿK ٬08ڜ^*4"Tr+oP(V">ˇW$62T#\' ޕe/˶Ze#-Py@Pj^?;K0T,X!za,LKC:Xœ[{°*x|nB? fayS[aMGOq]%}632SƾBÃu $ ĢQ$3<I:C#JjOFd 51cAuk4zAl?+T,Dd׷-d ҟ]m_1O ĢQ$3B  !cm!imt:^~ kI*|0rS;QadVD$' 2gێLAft<}f28@ˢn~ \ !c|כ z޾!o+loo{1*݀2X!!ph~žRQuu&(¶ MlmiE+:)f>3?-)F^ 2 L dcv}Yglû_` ?mכNТC˱O >Y}w)&ocqpCrGaJ<MVzrxzJ*Β$Z<.Z ,/&ocqpCrG2ؔu)?ٟsFߢ-8Ø\cKW"`ٯg ٷj \DGY\EBhQZrOݲ^upg$PY-ȧ7aC(H{Fub/0`RR=d>3?-)F^ 2 v 3<K Dcם(kL dcv}Yglû_` ?mכNТC˱v s&ocqpCrGؔ(Jn"'2ynzCs T[gr0 Y$$=^qeERb4YW@H]vNM<&j9qP9L=oi3]g1.ьo`>cF%糝6}Ϊ`lZ^LFZkN, ;V}!qJ=2 }du$p[F(+Qo-Н_H\khW+c 9yB!V'k5^]cИ݌ľ5g tQ8bf ˬKoa cHZ!#GG4p4]L<  }!qJ=2 }d UkF$UhFCpf9w>4svWFg @`(U(ޔsbቡj9W!S lͷѝށL*:5Sܦ{vACm7bA\ts4Q鮹k5U`xi^Ј .GAF# ?%/p~OIO\1 Z18Ve]+*$1]A6*Jo8xp Izzm"k~̀#DT%46RFj) fCV8w≗jf>|eu*X=93ZVEf2+a}@3[4Zs-^;H;^Թ+XOcO1|3I ,>xY O[`ؾ|:(CB6P#a&u )^ ؝ D*†6bH=䔢М hPJ63$WJu\.wvsY6~m]nU9`半S.il$jV=7 ĢQ$3zo*z qh US (NASD) 30/360 * 1 Actual/actual * 2 Actual/360 * 3 Actual/365 * 4 European 30/360 * * @return float|string Result, or a string containing an error */ public static function yieldAtMaturity( $settlement, $maturity, $issue, $rate, $price, $basis = FinancialConstants::BASIS_DAYS_PER_YEAR_NASD ) { $settlement = Functions::flattenSingleValue($settlement); $maturity = Functions::flattenSingleValue($maturity); $issue = Functions::flattenSingleValue($issue); $rate = Functions::flattenSingleValue($rate); $price = Functions::flattenSingleValue($price); $basis = ($basis === null) ? FinancialConstants::BASIS_DAYS_PER_YEAR_NASD : Functions::flattenSingleValue($basis); try { $settlement = SecurityValidations::validateSettlementDate($settlement); $maturity = SecurityValidations::validateMaturityDate($maturity); SecurityValidations::validateSecurityPeriod($settlement, $maturity); $issue = SecurityValidations::validateIssueDate($issue); $rate = SecurityValidations::validateRate($rate); $price = SecurityValidations::validatePrice($price); $basis = SecurityValidations::validateBasis($basis); } catch (Exception $e) { return $e->getMessage(); } $daysPerYear = Helpers::daysPerYear(Functions::scalar(DateTimeExcel\DateParts::year($settlement)), $basis); if (!is_numeric($daysPerYear)) { return $daysPerYear; } $daysBetweenIssueAndSettlement = Functions::scalar(DateTimeExcel\YearFrac::fraction($issue, $settlement, $basis)); if (!is_numeric($daysBetweenIssueAndSettlement)) { // return date error return $daysBetweenIssueAndSettlement; } $daysBetweenIssueAndSettlement *= $daysPerYear; $daysBetweenIssueAndMaturity = Functions::scalar(DateTimeExcel\YearFrac::fraction($issue, $maturity, $basis)); if (!is_numeric($daysBetweenIssueAndMaturity)) { // return date error return $daysBetweenIssueAndMaturity; } $daysBetweenIssueAndMaturity *= $daysPerYear; $daysBetweenSettlementAndMaturity = Functions::scalar(DateTimeExcel\YearFrac::fraction($settlement, $maturity, $basis)); if (!is_numeric($daysBetweenSettlementAndMaturity)) { // return date error return $daysBetweenSettlementAndMaturity; } $daysBetweenSettlementAndMaturity *= $daysPerYear; return ((1 + (($daysBetweenIssueAndMaturity / $daysPerYear) * $rate) - (($price / 100) + (($daysBetweenIssueAndSettlement / $daysPerYear) * $rate))) / (($price / 100) + (($daysBetweenIssueAndSettlement / $daysPerYear) * $rate))) * ($daysPerYear / $daysBetweenSettlementAndMaturity); } }