Esempio n. 1
0
        /// <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);
        }