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; }
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; }
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; }