Esempio n. 1
0
        List<DateTimeDoublePair> GetIndicators_Raw(
            DateTime targetDate,
            DayDataKtbAvg spotYesAvg,
            PeriodicMarketDataCollection spotData,
            DayDataKtbAvg futureYesAvg,
            PeriodicMarketDataCollection futureData)
        {
            List<DateTimeDoublePair> ret = new List<DateTimeDoublePair>();

            double spotAvgPrice = spotYesAvg.PriceAvg;
            double spotDuration = spotYesAvg.DurationAvg;

            double futureAvgPrice = futureYesAvg.PriceAvg;
            double futureDuration = futureYesAvg.DurationAvg;

            double kMinValue = -4;

            foreach (RawMarketData spotRmd in spotData.Rmds)
            {
                DateTime curDateTime = spotRmd.LastUpdatedTime;
                RawMarketData futureRmd = futureData.GetRmdData(curDateTime);

                if (RawMarketDataUtil.IsValidBidAskCurPrice(spotRmd) &&
                    RawMarketDataUtil.IsValidBidAskCurPrice(futureRmd))
                {
                    if (IsOverSpotBidAskSpread(spotRmd))
                    {
                        ret.Add(new DateTimeDoublePair(curDateTime, kMinValue));
                    }
                    else
                    {
                        double spotMidPrice = (spotRmd.AskPrice1 + spotRmd.BidPrice1) / 2;
                        double futureMidPrice = (futureRmd.AskPrice1 + futureRmd.BidPrice1) / 2;

                        double spotPart = (spotAvgPrice - spotMidPrice) / spotDuration;
                        double futurePart = 100 * (futureMidPrice - futureAvgPrice) / futureDuration;

                        double indicator = spotPart + futurePart;

                        ret.Add(new DateTimeDoublePair(curDateTime, indicator));
                    }
                }
                else
                {
                    ret.Add(new DateTimeDoublePair(curDateTime, double.NaN));
                }
            }
            return ret;
        }