public AdjRateDatum CalculateAssetWeight_Raw(DateTime targetDate, MarketDataSet data) { MarketData md = data.GetData(MarketDataSetKey.KospiFuture); DOHLC dohlc = md.GetData(targetDate); double curValue = dohlc.OHLC.Close; AdjRateDatum ret = null; if (_prevValue > 0) { // 평균 변동성을 구한다. double increment = (curValue - _prevValue) / _prevValue; _ma.Add(Math.Abs(increment)); double avgIncrement = _ma.GetCurMA(); int level = (int)(avgIncrement * 200); double kospiFactor = 1.3 - 0.1 * level; kospiFactor *= _weight; kospiFactor = MathUtil.CapAndFloor(kospiFactor); ret = new AdjRateDatum(kospiFactor, 1, 1); } else { ret = new AdjRateDatum(1, 1, 1); } _prevValue = curValue; return ret; }
public AdjRateDatum CalculateAssetWeight_Raw(OperationSet opSet, DateTime targetDate, MarketDataSet data) { MarketData md = data.GetData(MarketDataSetKey.KospiFuture); DOHLC dohlc = md.GetData(targetDate); double curValue = dohlc.OHLC.Close; AdjRateDatum ret = null; if (_prevValue > 0) { // 평균 변동성을 구한다. double increment = (curValue - _prevValue) / _prevValue; _ma.Add(increment); double avgIncrement = _ma.GetCurMA(); int level = (int)(avgIncrement * 100); double kospiFactor = 1.3 - 0.1 * level; ret = new AdjRateDatum(kospiFactor * _weight, 1, 1); } else { ret = new AdjRateDatum(1, 1, 1); } _prevValue = curValue; return ret; }
public AdjRateDatum CalculateAdjRateDatum(DateTime targetDate, MarketDataSet data) { LogRow row = new LogRow(); row.CurDate = targetDate; row.PrevAreaNumber = _prevAreaNumber; row.PrevUpDown = _prevUpDown; MarketData md = data.GetData(MarketDataSetKey.KrxCreditDepositRate); DOHLC dohlc = md.GetData(targetDate); _ma.Add(dohlc.OHLC.Close); double ma = _ma.GetCurMA(); int areaNumber = GetAreaNumber(ma); double kospiWeight = GetKospiWeight(areaNumber, row); _logs.Add(row); if (targetDate > new DateTime(2007, 6, 1)) { kospiWeight = MathUtil.CapAndFloor(kospiWeight); return new AdjRateDatum(kospiWeight, 1, 1); } else { _prevUpDown = UpDown.Unknown; } return new AdjRateDatum(1, 1, 1); }
public AdjRateDatum CalculateAdjRateDatum(DateTime targetDate, MarketDataSet data) { AdjRateDatum adj = new AdjRateDatum(1, 1, 1); if (targetDate > new DateTime(2007, 6, 1)) { DateTime twoTradingDaysAgo = DataUtil.GetPivotTradingDate(-2, targetDate, data.PivotData); MarketData mdCreditDepositRate = data.GetData(MarketDataSetKey.KrxCreditDepositRate); DOHLC dohlc = mdCreditDepositRate.GetData(twoTradingDaysAgo); double rate = dohlc.OHLC.Close; double kospiAdjustment = GetKospiAdjustment(rate); kospiAdjustment = MathUtil.CapAndFloor(kospiAdjustment); adj = new AdjRateDatum(kospiAdjustment, 1, 1); } return adj; }
AdjRateDatum CalculateAssetWeight_Raw(DateTime targetDate, MarketDataSet data) { MarketData md = data.GetData(MarketDataSetKey.DollarSpot); DOHLC dohlc = md.GetData(targetDate); double cur = dohlc.OHLC.Close; const double kMax = 1800; const double kMin = 900; double rate = (kMax - cur) / (kMax - kMin); rate = Math.Max(0, rate); rate = Math.Min(1, rate); rate = 0.5 + rate; rate *= _weight; rate = MathUtil.CapAndFloor(rate); return new AdjRateDatum(1, 1, rate); }
public AdjRateDatum CalculateAdjRateDatum(DateTime targetDate, MarketDataSet data) { if (targetDate < new DateTime(2007, 6, 1)) { return new AdjRateDatum(1, 1, 1); } MarketData md = data.GetData(MarketDataSetKey.KrxCreditDepositRate); DOHLC dohlc = md.GetData(targetDate); _ma.Add(dohlc.OHLC.Close); double ma = _ma.GetCurMA(); int areaNumber = GetAreaNumber(ma); _switch.Update(areaNumber); int investmentArea = _switch.InvestmentArea; double kospiWeight = GetKospiWeight(investmentArea); kospiWeight = MathUtil.CapAndFloor(kospiWeight); return new AdjRateDatum(kospiWeight, 1, 1); }
public AdjRateDatum CalculateAssetWeight_Raw(OperationSet opSet, DateTime targetDate, MarketDataSet data) { MarketData md = data.GetData(MarketDataSetKey.BokRate); DOHLC dohlc = md.GetData(targetDate); AdjRateDatum ret = null; if (_prevMarketData == null) { ret = new AdjRateDatum(1, 1, 1); } else { double prevValue = _prevMarketData.OHLC.Close; double curValue = dohlc.OHLC.Close; // changed more than 1 bp if (Math.Abs(prevValue - curValue) > 0.01) { double increment = curValue / prevValue - 1; // 금리 변동이 있다. BokRateEvent ev = new BokRateEvent(); ev.TargetIncrement = increment; ev.StartDate = targetDate; ev.EndDate = targetDate.AddYears(kEventDuration); ev.EventKey = _eventKeyGenerator++; ev.UpDown = increment > 0 ? UpDown.Up : UpDown.Down; _events.Add(ev); _lastEvent = ev; } ret = GetIncrement(targetDate); } _prevMarketData = dohlc; return ret; }
void SetPositionInfo(DateTime curDate, MarketDataSet data, RowInfo row) { MarketData mdKospiSpot = data.GetData(MarketDataSetKey.KospiSpot); MarketData mdKtbSpot = data.GetData(MarketDataSetKey.KtbSpot); MarketData mdDollarSpot = data.GetData(MarketDataSetKey.DollarSpot); DOHLC kospiSpot = mdKospiSpot.GetData(curDate); DOHLC ktbSpot = mdKtbSpot.GetData(curDate); DOHLC dollarSpot = mdDollarSpot.GetData(curDate); double kospiSpotPos = (kospiSpot.OHLC.Close - _kospiSpotMinRange) / (_kospiSpotMaxRange - _kospiSpotMinRange); double ktbSpotPos = (_ktbSpotMaxRange - ktbSpot.OHLC.Close) / (_ktbSpotMaxRange - _ktbSpotMinRange); double dollarSpotPos = (dollarSpot.OHLC.Close - _dollarSpotMinRange) / (_dollarSpotMaxRange - _dollarSpotMinRange); if (bRateRange) { kospiSpotPos = (kospiSpot.OHLC.Close / _maKospiSpot.GetCurMA()); //dollarSpotPos = (dollarSpot.OHLC.Close / _maDollarSpot.GetCurMA()); } row.KospiSpotPosition = kospiSpotPos; row.KtbSpotPosition = ktbSpotPos; row.DollarSpotPosition = dollarSpotPos; }
RowInfo GetCurRowWithBasicInfo(DateTime curDate, MarketDataSet data) { MarketData mdKospiFuture = data.GetData(MarketDataSetKey.KospiFuture); MarketData mdKtbFuture = data.GetData(MarketDataSetKey.KtbFuture); MarketData mdDollarFuture = data.GetData(MarketDataSetKey.DollarFuture); MarketData mdKospiSpot = data.GetData(MarketDataSetKey.KospiSpot); MarketData mdKtbSpot = data.GetData(MarketDataSetKey.KtbSpot); MarketData mdDollarSpot = data.GetData(MarketDataSetKey.DollarSpot); DOHLC kospiFuture = mdKospiFuture.GetData(curDate); DOHLC ktbFuture = mdKtbFuture.GetData(curDate); DOHLC dollarFuture = mdDollarFuture.GetData(curDate); DOHLC kospiSpot = mdKospiSpot.GetData(curDate); DOHLC ktbSpot = mdKtbSpot.GetData(curDate); DOHLC dollarSpot = mdDollarSpot.GetData(curDate); RowInfo row = new RowInfo(); row.CurDate = curDate; row.KospiFuturePrice = kospiFuture.OHLC.Close; row.KtbFuturePrice = ktbFuture.OHLC.Close; row.DollarFuturePrice = dollarFuture.OHLC.Close; row.KospiSpotPrice = kospiSpot.OHLC.Close; row.KtbSpotPrice = ktbSpot.OHLC.Close; row.DollarSpotPrice = dollarSpot.OHLC.Close; return row; }
void LoadISMEqAdjs(MarketDataSet dataSet) { MarketData md = dataSet.GetData(MarketDataSetKey.CycleLeadingIndex); _ismAdjDic = new Dictionary<DateTime, double>(); long totalCount = md.GetTotalCount(); for (int i = 0; i < totalCount; i++) { DOHLC dohlc = md.GetByIndex(i); DateTime curDate = dohlc.CurDate; double curValue = dohlc.OHLC.Close; double curAdj = CalculateISMAdjValue(curValue, kMaxValue, kMinValue); curAdj = GetSwitchUpDownAdjValue(curAdj); _ismAdjDic.Add(curDate, curAdj); } }
void LoadRealIrAdjs(MarketDataSet dataSet) { MarketData mdPivot = DataUtil.GetKeyMarketData(MarketDataSetKey.KospiFuture, _startDate, _endDate); MarketData mdCPI = dataSet.GetData(MarketDataSetKey.ConsumerPriceIndex); MarketData mdKtbR = dataSet.GetData(MarketDataSetKey.KtbSpot); _RealIrAdjDic = new Dictionary<DateTime, double>(); double prevCpiValue = 0; long totalCount = mdKtbR.GetTotalCount(); for (int i = 0; i < totalCount; i++) { DOHLC dohlcKtbR = mdKtbR.GetByIndex(i); DateTime curDate = dohlcKtbR.CurDate; double curKtbRValue = dohlcKtbR.OHLC.Close; double cpiValue = 0; // CPI 매달 1일 발표 -> 당월에는 전월 말일자 데이터를 이용할 수 있다. DateTime availableCpiDate = curDate.AddDays(1 - 1 * curDate.Day); //당월 1일 availableCpiDate = availableCpiDate.AddDays(-1); //전월 말일 availableCpiDate = DataUtil.GetLastTradingDay(mdPivot, availableCpiDate); // 월말이 주말인 경우 마지막 금요일로 변환 if (mdCPI.IsExistDate(availableCpiDate)) { cpiValue = mdCPI.GetData(availableCpiDate).OHLC.Close; prevCpiValue = cpiValue; } else { cpiValue = prevCpiValue; } double realIrValue = curKtbRValue - cpiValue; double curAdj = CalculateRealIrAdjValue(realIrValue, kMaxValue, kMinValue); curAdj = GetSwitchUpDownAdjValue(curAdj); _RealIrAdjDic.Add(curDate, curAdj); } }
Tuple<double, double, double, double> GetDailyPnL( AssetRateDatum aw, DateTime prevDate, DateTime curDate, long notional, MarketDataSet marketDataSet) { MarketData mdKospi = marketDataSet.GetData(MarketDataSetKey.KospiFuture); MarketData mdBond = marketDataSet.GetData(MarketDataSetKey.KtbFuture); MarketData mdDollar = marketDataSet.GetData(MarketDataSetKey.DollarFuture); double kospiUpDoweRate = GetUpDownRate(mdKospi, prevDate, curDate); double bondUpDoweRate = GetUpDownRate(mdBond, prevDate, curDate); double dollarUpDoweRate = GetUpDownRate(mdDollar, prevDate, curDate); double kospiPnL = aw.KospiRate * notional * kospiUpDoweRate; double bondPnL = aw.KtbRate * notional * bondUpDoweRate; double dollarPnL = aw.DollarRate * notional * dollarUpDoweRate; double sum = kospiPnL + bondPnL + dollarPnL; return new Tuple<double, double, double, double>(sum, kospiPnL, bondPnL, dollarPnL); }
void LoadDeltaVolAdjRates(MarketDataSet mdSet) { MarketData kosipMarketData = mdSet.GetData(MarketDataSetKey.KospiFuture); MarketData ktbMarketData = mdSet.GetData(MarketDataSetKey.KtbFuture); MarketData dollarMargetData = mdSet.GetData(MarketDataSetKey.DollarFuture); _kospiFutureWeight = GetDeltaVolAdjRates(MarketDataSetKey.KospiFuture, kosipMarketData); _ktbFutureWeight = GetDeltaVolAdjRates(MarketDataSetKey.KtbFuture, ktbMarketData); //_dollarFutreWeight = GetDeltaVolAdjRates(MarketDataSetKey.DollarFuture, dollarMargetData); }
void SetPositionInfo(DateTime curDate, MarketDataSet data, RowInfo row) { MarketData mdKospiSpot = data.GetData(MarketDataSetKey.KospiSpot); MarketData mdKtbSpot = data.GetData(MarketDataSetKey.KtbSpot); MarketData mdDollarSpot = data.GetData(MarketDataSetKey.DollarSpot); DOHLC kospiSpot = mdKospiSpot.GetData(curDate); DOHLC ktbSpot = mdKtbSpot.GetData(curDate); DOHLC dollarSpot = mdDollarSpot.GetData(curDate); double kospiSpotPos = (kospiSpot.OHLC.Close - MagicNumber.KOSPI_SPOT_MIN_RANGE) / (MagicNumber.KOSPI_SPOT_MAX_RANGE - MagicNumber.KOSPI_SPOT_MIN_RANGE); double ktbSpotPos = (MagicNumber.KTB_SPOT_MAX_RANGE - ktbSpot.OHLC.Close) / (MagicNumber.KTB_SPOT_MAX_RANGE - MagicNumber.KTB_SPOT_MIN_RANGE); double dollarSpotPos = (dollarSpot.OHLC.Close - MagicNumber.DOLLAR_SPOT_MIN_RANGE) / (MagicNumber.DOLLAR_SPOT_MAX_RANGE - MagicNumber.DOLLAR_SPOT_MIN_RANGE); row.KospiSpotPosition = kospiSpotPos; row.KtbSpotPosition = ktbSpotPos; row.DollarSpotPosition = dollarSpotPos; }