Beispiel #1
0
        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;
        }
Beispiel #5
0
        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;
        }
Beispiel #8
0
        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;
        }
Beispiel #9
0
        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;
        }
Beispiel #10
0
        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);
            }
        }
Beispiel #11
0
        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);
        }
Beispiel #13
0
        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;
        }