}//constructor #endregion Constructors, Initialization & Destructor #region Methods #region Data initialization private void initDataVariables() { // Initializes data variables - to check if recalculation is necessary m_enFrequency = cProperties.Frequency; m_drRange = new cDateRange(m_objRelevantSec.DateRange.StartDate, m_objRelevantSec.DateRange.EndDate); //if (m_dtMainRates != null) m_dtMainRates.Clear(); //m_dtMainRates = new List<Rate>(); }//initDataVariables
}//setUpdatedRateData public void setFinalReturnFromServer(cDateRange drPeriod) { //m_dtPriceReturns = cBasicStaticCalcs.getPriceReturnsInDateRange(m_dtPriceReturns, drPeriod); //m_dtBacktestingReturns = m_dtPriceReturns; //setNewSecFinalRate(drPeriod); m_dFinalRate = m_objRelevantSec.AvgYield * 52; m_dReturnWeekly = m_objRelevantSec.AvgYield; m_objRelevantSec.CovarClass.StandardDeviation = m_objRelevantSec.StdYield * Math.Sqrt(52); m_objRelevantSec.CovarClass.StDevWeekly = m_objRelevantSec.StdYield; }//setFinalReturnFromServer
}//setFinalReturn private void setNewSecFinalRate(cDateRange drPeriod) { // Sets the average values for the rate series of a given security if (m_dtPriceReturns.Count == 0) { return; } //double dYears = (cProperties.CalcRange.EndDate - cProperties.CalcRange.StartDate).Days / 365D; try { m_dRateAvg = cBasicStaticCalcs.getAvgValue(m_dtBacktestingReturns); m_dClassicRate = cBasicStaticCalcs.getClassicRateValue(m_objRelevantSec.PriceTable, m_objPortfolio.Details.CalcCurrency, drPeriod); // Uriel on 07/09/2016 m_dFinalRate = cBasicStaticCalcs.getFinalReturnValue(m_dtBacktestingReturns, drPeriod); } catch (Exception ex) { m_objErrorHandler.LogInfo(ex); } m_dReturnWeekly = m_dFinalRate / 52; }//setSecRateDataAvg
}//initDataVariables #endregion Data initialization #region Rate calculations public void setUpdatedRateData(cDateRange drPeriod) { // Refreshes / calculates the rate data try { if (m_objRelevantSec.PriceTable == null) { m_objRelevantSec.disableCurrentSecurity(); return; } // Retrieves relevant price returns for backtesting m_dtBacktestingReturns = cBasicStaticCalcs.getPriceReturnsInDateRange(m_dtPriceReturns, drPeriod); // Calculates minimized weekly returns //if (!m_isMinimized) m_dtBacktestingReturns = cBasicStaticCalcs.getMinimizedRates(m_dtBacktestingReturns, m_objRelevantSec); // Final return setNewSecFinalRate(drPeriod); // Irregularities handling if (cMath.isNaN(m_dFinalRate)) // invalid result { m_dFinalRate = 0D; m_objRelevantSec.disableCurrentSecurity(); return; } //if (cGeneralFunctions.isBelowNumberOfMonths(m_objRelevantSec.DateRange, cProperties.MinMonthsData) || (m_dFinalRate < 0D) || (m_dtBacktestingReturns.Count == 0) || (m_dtBacktestingReturns.Count < 10)) if (cGeneralFunctions.isReturnsBelowNumberOfMonths(m_dtBacktestingReturns, cProperties.MinMonthsData) || (m_dFinalRate < 0D) || (m_dtBacktestingReturns.Count == 0) || (m_dtBacktestingReturns.Count < 10)) { m_objRelevantSec.disableCurrentSecurity(); return; } // At least x months of data for calculation m_objRelevantSec.setSecurityActivity(true); } catch (Exception ex) { m_objErrorHandler.LogInfo(ex); } }//setUpdatedRateData