public static RollResults CalculateForwardCTD(IContract contract, bool smoothStart = false)
        {
            var market = AsFuture(contract).BbgBase.Market();

            var computeTasks = new Task<RollResultContractItem>[5];
            DateTime now = DateTime.Now;
            //var curResult = CalculateCTDResult(contract, f => f.CurrentCTD, f => f.CurrentContract, f => f.CurrentFuture.Value * f.CurrentConvFactor, smoothStart, true, f => f.CurrentFuture);
            //var prevResult = CalculateCTDResult(contract, f => f.PrevCTD, f => f.PrevContract, f => f.PrevFuture.Value * f.PrevConvFactor, smoothStart, true, f => f.PrevFuture);
            //var ooResult = CalculateCTDResult(contract, f => f.OOCTD, f => f.OOContract, f => f.OoFuture.Value * f.OOConvFactor, smoothStart, true, f => f.OoFuture);
            //var dResult = CalculateCTDResult(contract, f => f.dCTD, f => f.DContract, f => f.DFuture.Value * f.dConvFactor, smoothStart, true, f => f.DFuture);
            //var d2Result = CalculateCTDResult(contract, f => f.d2CTD, f => f.D2Contract, f => f.D2Future.Value * f.d2ConvFactor, smoothStart, true, f => f.D2Future);            

            
            Log.InfoFormat("start computing forward ctd for {0}", contract.Ric);
            RollResultContractItem curResult = null;
            RollResultContractItem prevResult = null;
            RollResultContractItem ooResult = null;
            RollResultContractItem dResult = null;
            RollResultContractItem d2Result = null;

            computeTasks[0] = Task.Factory.StartNew(() => CalculateCTDResult(contract, f => f.CurrentCTD, f => f.CurrentContract, f => f.CurrentFuture.Value * f.CurrentConvFactor, smoothStart, true, f => f.CurrentFuture)).ContinueWith(r => curResult = r.Result);
            computeTasks[1] = Task.Factory.StartNew(() => CalculateCTDResult(contract, f => f.PrevCTD, f => f.PrevContract, f => f.PrevFuture.Value * f.PrevConvFactor, smoothStart, true, f => f.PrevFuture)).ContinueWith(r => prevResult = r.Result);
            computeTasks[2] = Task.Factory.StartNew(() => CalculateCTDResult(contract, f => f.OOCTD, f => f.OOContract, f => f.OoFuture.Value * f.OOConvFactor, smoothStart, true, f => f.OoFuture)).ContinueWith(r => ooResult = r.Result);
            computeTasks[3] = Task.Factory.StartNew(() => CalculateCTDResult(contract, f => f.dCTD, f => f.DContract, f => f.DFuture.Value * f.dConvFactor, smoothStart, true, f => f.DFuture)).ContinueWith(r => dResult = r.Result);
            computeTasks[4] = Task.Factory.StartNew(() => CalculateCTDResult(contract, f => f.d2CTD, f => f.D2Contract, f => f.D2Future.Value * f.d2ConvFactor, smoothStart, true, f => f.D2Future)).ContinueWith(r => d2Result = r.Result);

            Task.WaitAll(computeTasks.Cast<Task>().ToArray());

            Log.InfoFormat("Finish computing all forward ctd series for {0} in {1}s", contract.Ric, (DateTime.Now - now).TotalSeconds);

            // get the last smooth result from carbon
            var moniker = ("symapp.roll.fctd." + market + "." + AsFuture(contract).BbgBase).ToLower();
            var smooth = SmoothAllResultSeries(curResult, prevResult, smoothStart, moniker, r => r.CurrentResult, r => r.OResult);

            return new RollResults
            {
                Identifier = AsFuture(contract).BbgBase,
                RollType = "fctd",
                Market = market,

                CurrentResult = curResult,
                OResult = prevResult,
                OOResult = ooResult,
                SmoothResult = smooth,
                DResult = dResult,
                D2Result = d2Result,
                
            };
        }
Exemplo n.º 2
0
        public void ComputeRelevantDatesForForwards()
        {
            Today = CurrentLiveTime(BondMarket.US); // only works for US atm.

            // move forward to the nearest quarterend
            var frontDateTimeLong = Today.AddMonths((3 - (Today.Month%3))%3);
            FrontDateLong = new DateTime(frontDateTimeLong.Year, frontDateTimeLong.Month, DateTime.DaysInMonth(frontDateTimeLong.Year, frontDateTimeLong.Month));
            var backDateTimeLong = FrontDateLong.AddMonths(3);
            BackDateLong = new DateTime(backDateTimeLong.Year, backDateTimeLong.Month, DateTime.DaysInMonth(backDateTimeLong.Year, backDateTimeLong.Month));
            var prevFrontDateTimeLong = FrontDateLong.AddMonths(-3);
            PrevFrontDateLong = new DateTime(prevFrontDateTimeLong.Year, prevFrontDateTimeLong.Month, DateTime.DaysInMonth(prevFrontDateTimeLong.Year, prevFrontDateTimeLong.Month));
            var back2DateTimeLong = BackDateLong.AddMonths(3);
            Back2DateLong = new DateTime(back2DateTimeLong.Year, back2DateTimeLong.Month, DateTime.DaysInMonth(back2DateTimeLong.Year, back2DateTimeLong.Month));


            Task<DateTime>[] dateTasks = new Task<DateTime>[6];

            dateTasks[0] = bondSpreadServiceModel.RollDate(Today, 1, DateUnit.Bd, BusinessDayConvention.Following, calendar).ContinueWith(r => CashSettleLive = r.Result.ToDateTime());
            dateTasks[1] = bondSpreadServiceModel.RollDate(Today, noOfDaysForAsOfDay, DateUnit.Bd, BusinessDayConvention.Following, calendar).ContinueWith(r => AsOfDate = r.Result.ToDateTime());
            var asOfDateTask = dateTasks[1].ContinueWith(t => bondSpreadServiceModel.RollDate(AsOfDate, 1, DateUnit.Bd, BusinessDayConvention.Following, calendar)).ContinueWith(r => CashSettleClose = r.Result.Result.ToDateTime());
            //dateTasks[2] = bondSpreadServiceModel.RollDate(AsOfDate, 1, DateUnit.Bd, BusinessDayConvention.Following, calendar)
            //                .ContinueWith(r => CashSettleClose = r.Result.ToDateTime());
            dateTasks[2] = bondSpreadServiceModel.RollDate(FrontDateLong, 3, DateUnit.Bd, BusinessDayConvention.Following, calendar).ContinueWith(r => FrontDateShort = r.Result.ToDateTime());
            dateTasks[3] = bondSpreadServiceModel.RollDate(BackDateLong, 3, DateUnit.Bd, BusinessDayConvention.Following, calendar).ContinueWith(r => BackDateShort = r.Result.ToDateTime());
            dateTasks[4] = bondSpreadServiceModel.RollDate(PrevFrontDateLong, 3, DateUnit.Bd, BusinessDayConvention.Following, calendar).ContinueWith(r => PrevFrontDateShort = r.Result.ToDateTime());
            dateTasks[5] = bondSpreadServiceModel.RollDate(Back2DateLong, 3, DateUnit.Bd, BusinessDayConvention.Following, calendar).ContinueWith(r => Back2DateShort = r.Result.ToDateTime());

            Task.WaitAll(dateTasks.Cast<Task>().ToArray());
            asOfDateTask.Wait();
        }
        public static RollResults CalculateCT(IContract contract, bool smoothStart)
        {
            var market = contract.Ric.Market();

            RollResultContractItem curResult = null;
            RollResultContractItem prevResult = null;
            RollResultContractItem ooResult = null;
            RollResultContractItem oooResult = null;
            RollResultContractItem ooooResult = null;
            var computeTasks = new Task<RollResultContractItem>[5];
            DateTime now = DateTime.Now;
            Log.InfoFormat("start computing ctd for {0}", contract.Ric);
            computeTasks[0] = Task.Factory.StartNew(() => CalculateCTResult(contract, f => f.CurrentCT, f => f.CurrentContract, f => f.CurrentValue, smoothStart)).ContinueWith(r => curResult = r.Result);
            computeTasks[1] = Task.Factory.StartNew(() => CalculateCTResult(contract, f => f.PrevCT, f => f.PrevContract, f => f.PrevValue, smoothStart)).ContinueWith(r => prevResult = r.Result);
            computeTasks[2] = Task.Factory.StartNew(() => CalculateCTResult(contract, f => f.OOCT, f => f.OOContract, f => f.OOValue, smoothStart)).ContinueWith(r => ooResult = r.Result);
            computeTasks[3] = Task.Factory.StartNew(() => CalculateCTResult(contract, f => f.OOOCT, f => f.OOOContract, f => f.OOOValue, smoothStart)).ContinueWith(r => oooResult = r.Result);
            computeTasks[4] = Task.Factory.StartNew(() => CalculateCTResult(contract, f => f.OOOOCT, f => f.OOOOContract, f => f.OOOOValue, smoothStart)).ContinueWith(r => ooooResult = r.Result);
            Task.WaitAll(computeTasks.Cast<Task>().ToArray());

            //var curResult = CalculateCTResult(contract, f => f.CurrentCT, f => f.CurrentContract, f => f.CurrentValue, smoothStart);
            //var prevResult = CalculateCTResult(contract, f => f.PrevCT, f => f.PrevContract, f => f.PrevValue, smoothStart);
            //var ooResult = CalculateCTResult(contract, f => f.OOCT, f => f.OOContract, f => f.OOValue, smoothStart);
            //var oooResult = CalculateCTResult(contract, f => f.OOOCT, f => f.OOOContract, f => f.OOOValue, smoothStart);
            //var ooooResult = CalculateCTResult(contract, f => f.OOOOCT, f => f.OOOOContract, f => f.OOOOValue, smoothStart);
            Log.InfoFormat("Finish computing all ct series for {0} in {1}s", contract.Ric, (DateTime.Now - now).TotalSeconds);
            // get the last smooth result from carbon
            var moniker = ("symapp.roll.ct." + market + "." + contract.Ric).ToLower();
            var smooth = SmoothAllResultSeries(curResult, prevResult, smoothStart, moniker, r => r.CurrentResult, r => r.OResult);

            return new RollResults
            {
                Identifier = contract.Ric,
                RollType = "ct",
                Market = market,

                CurrentResult = curResult,
                OResult = prevResult,
                OOResult = ooResult,
                OOOResult = oooResult,
                OOOOResult = ooooResult,

                SmoothResult = smooth,
            };
        }
Exemplo n.º 4
0
        public void ComputeRollDates()
        {
            FrontRollLong = (rollControl == RollControl.FirstNotice && FrontDateLong.AddTenor(Tenor.FromString("-1m"), calendar) < CashSettleLive) ? BackDateLong : FrontDateLong;
            var backrollLongTemp = FrontRollLong.AddMonths(3);
            BackRollLong = new DateTime(backrollLongTemp.Year, backrollLongTemp.Month, DateTime.DaysInMonth(backrollLongTemp.Year, backrollLongTemp.Month));
            var back2rollLongTemp = BackRollLong.AddMonths(3);
            Back2RollLong = new DateTime(back2rollLongTemp.Year, back2rollLongTemp.Month, DateTime.DaysInMonth(back2rollLongTemp.Year, back2rollLongTemp.Month));
            var prevFrontRollLongTemp = FrontRollLong.AddMonths(-3);
            PrevFrontRollLong = new DateTime(prevFrontRollLongTemp.Year, prevFrontRollLongTemp.Month, DateTime.DaysInMonth(prevFrontRollLongTemp.Year, prevFrontRollLongTemp.Month));


            Task<DateTime>[] dateTasks = new Task<DateTime>[4];
            dateTasks[0] = bondSpreadServiceModel.RollDate(FrontRollLong, 3, DateUnit.Bd, BusinessDayConvention.Following, calendar).ContinueWith(r => FrontRollShort = r.Result.ToDateTime());
            dateTasks[1] = bondSpreadServiceModel.RollDate(BackRollLong, 3, DateUnit.Bd, BusinessDayConvention.Following, calendar).ContinueWith(r => BackRollShort = r.Result.ToDateTime());
            dateTasks[2] = bondSpreadServiceModel.RollDate(Back2RollLong, 3, DateUnit.Bd, BusinessDayConvention.Following, calendar).ContinueWith(r => Back2RollShort = r.Result.ToDateTime());
            dateTasks[3] = bondSpreadServiceModel.RollDate(PrevFrontRollLong, 3, DateUnit.Bd, BusinessDayConvention.Following, calendar).ContinueWith(r => PrevFrontRollShort = r.Result.ToDateTime());

            Task.WaitAll(dateTasks.Cast<Task>().ToArray());
        }