public static DayDataKtbAvg GetSpotDayData(DayDataKtbAvg prevData)
        {
            DayDataKtbAvg data = new DayDataKtbAvg();
            data.CalDate = prevData.CalDate;
            data.Code = prevData.Code;
            data.DurationAvg = 8.0F;
            data.PriceAvg = 10000;
            data.RateAvg = 0.041;
            data.Maturity = prevData.Maturity;

            return data;
        }
Esempio n. 2
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;
        }
        void Compare(DayDataKtbAvg a, DayDataKtbAvg b)
        {
            Assert.AreEqual(a.Code, b.Code);
            Assert.AreEqual(a.CalDate, b.CalDate);
            Assert.AreEqual(
                Math.Round(a.DurationAvg, 4),
                Math.Round(b.DurationAvg, 4));

            Assert.AreEqual(
                Math.Round(a.PriceAvg, 4),
                Math.Round(b.PriceAvg, 4));

            Assert.AreEqual(
                Math.Round(a.RateAvg, 6),
                Math.Round(b.RateAvg, 6));

            Assert.AreEqual(a.Maturity, b.Maturity);
        }
        void Register(String code, DateTime calDate, DayDataKtbAvg data)
        {
            if (!_dict.ContainsKey(code))
            {
                _dict.Add(code, new Dictionary<DateTime, DayDataKtbAvg>());
            }

            Dictionary<DateTime, DayDataKtbAvg> dateDict = _dict[code];

            if (!dateDict.ContainsKey(calDate))
            {
                dateDict.Add(calDate, data);
            }
            else
            {
                logger.Error("중복된 데이터가 있습니다.");
                ProcessUtil.Kill();
            }
        }
        void Init()
        {
            // daydata_ktb_avg table에서 데이터를 읽어온다.
            // 30일 전까지의 데이터만 읽어오도록 한다.
            String query = String.Format("select * from daydata_ktb_avg order by cal_date");

            DataRowCollection rows = DBUtil.SelectFromDB(query, CommonConst.DATABASE_MADVIPER);

            for (int i = 0; i < rows.Count; ++i)
            {
                DataRow row = rows[i];

                DateTime calDate = Convert.ToDateTime(row["cal_date"]);
                String code = Convert.ToString(row["code"]);
                DateTime maturity = Convert.ToDateTime(row["maturity"]);

                double avgPrice = Convert.ToDouble(row["avg_price"]);
                double avgRate = Convert.ToDouble(row["avg_rate"]);
                double avgDuration = Convert.ToDouble(row["avg_duration"]);

                DayDataKtbAvg data = new DayDataKtbAvg();
                data.CalDate = calDate;
                data.Code = code;
                data.Maturity = maturity;
                data.PriceAvg = avgPrice;
                data.RateAvg = avgRate;
                data.DurationAvg = avgDuration;

                Register(code, calDate, data);
            }
            // 읽어온 데이터는 잘 저장한다.
        }
        DayDataKtbAvg GetExpectedFutureDayData()
        {
            string code = "167FC000";
            DateTime targetDate = new DateTime(2011, 10, 24);

            DayDataKtbAvg data = new DayDataKtbAvg();
            data.CalDate = targetDate;
            data.Code = code;
            data.Maturity = new DateTime(2021, 12, 20);
            data.DurationAvg = 8.097728607;
            data.PriceAvg = 109.427912;
            data.RateAvg = 0.038562011;

            return data;
        }
        DayDataKtbAvg GetExpectedSpotDayData()
        {
            string spotCode = "KR1035027161";
            DateTime targetDate = new DateTime(2011, 10, 24);

            DayDataKtbAvg data = new DayDataKtbAvg();
            data.CalDate = targetDate;
            data.Code = spotCode;
            data.Maturity = new DateTime(2021, 6, 10);
            data.DurationAvg = 7.94026644;
            data.PriceAvg = 10477.649487;
            data.RateAvg = 0.03838024;

            return data;
        }
Esempio n. 8
0
 public DynamicTenDaysAvg(DayDataKtbAvg spotDayData, DayDataKtbAvg futureDayData)
 {
     this._spotDayData = spotDayData;
     this._futureDayData = futureDayData;
 }
        DayDataKtbAvg GetTenDaysAvg_Raw(List<DayDataKtbAvg> data)
        {
            if (data.Count == 0)
            {
                logger.Warn("데이터가 존재하지 않음");
                return null;
            }

            DayDataKtbAvg ret = new DayDataKtbAvg();
            ret.CalDate = _targetDate;
            ret.Code = data[0].Code;
            ret.Maturity = data[0].Maturity;

            List<double> priceAvgs = new List<double>();
            List<double> RateAvgs = new List<double>();
            List<double> DurationAvgs = new List<double>();

            foreach (DayDataKtbAvg datum in data)
            {
                priceAvgs.Add(datum.PriceAvg);
                RateAvgs.Add(datum.RateAvg);
                DurationAvgs.Add(datum.DurationAvg);
            }

            ret.PriceAvg = priceAvgs.Average();
            ret.RateAvg = RateAvgs.Average();
            ret.DurationAvg = DurationAvgs.Average();
            ret.DataCount = data.Count;

            return ret;
        }
        DayDataKtbAvg GetTenDaysAvgWithoutMinMax_Raw(List<DayDataKtbAvg> data, DateTime minDate,
            DateTime maxDate)
        {
            DayDataKtbAvg ret = new DayDataKtbAvg();
            ret.CalDate = _targetDate;
            ret.Code = data[0].Code;
            ret.Maturity = data[0].Maturity;

            List<double> priceAvgs = new List<double>();
            List<double> RateAvgs = new List<double>();
            List<double> DurationAvgs = new List<double>();

            foreach (DayDataKtbAvg datum in data)
            {
                if (datum.CalDate == minDate || datum.CalDate == maxDate)
                {
                    continue;
                }
                priceAvgs.Add(datum.PriceAvg);
                RateAvgs.Add(datum.RateAvg);
                DurationAvgs.Add(datum.DurationAvg);
            }

            ret.PriceAvg = priceAvgs.Average();
            ret.RateAvg = RateAvgs.Average();
            ret.DurationAvg = DurationAvgs.Average();
            ret.DataCount = data.Count;

            return ret;
        }