/// <summary> /// Function: Weighted average of contract value * liquidity for a given number of days. Liquidity type is usually volume. /// </summary> /// <param name="date">reference date</param> /// <param name="days">number of days in weighted average</param> /// <param name="liquidityType">type of liquidity. (Volume usually)</param> public double AverageDailyLiquidity(DateTime date, int days, TimeSeriesType liquidityType) { TimeSeries ts_close = this.GetTimeSeries(TimeSeriesType.Close); int idx_date_close = ts_close.GetClosestDateIndex(date, TimeSeries.DateSearchType.Previous); ts_close = ts_close.GetRange(Math.Max(0, idx_date_close - (days - 1)), idx_date_close); TimeSeries ts_liquidity = this.GetTimeSeries(liquidityType); int idx_date_liquidity = ts_liquidity.GetClosestDateIndex(date, TimeSeries.DateSearchType.Previous); ts_liquidity = ts_liquidity.GetRange(Math.Max(0, idx_date_liquidity - (days - 1)), idx_date_liquidity); if (ts_liquidity != null && ts_liquidity.Count != 0) { TimeSeries ts_dollar_liquidity = ts_close * ts_liquidity * this.ContractSize; double adl = ts_dollar_liquidity.Average(); return(adl); } return(0); }