示例#1
0
        public AssetRateDataLog Execute(long caseNumber)
        {
            DateTime curDate = this.Input.StartDate;
            AssetRateDataLog log = new AssetRateDataLog();

            _opSet.SetOpFlag(caseNumber);

            this._adjustment.Clear();

            while (curDate <= this.Input.EndDate)
            {
                if (this._readyData.IsExistDate(curDate))
                {
                    AssetRateDatum aw = this._allocBase.CalculateAndGetAssetRateDatum(curDate, this._readyData);
                    AdjRateDatum aa = this._adjustment.CalculateAssetWeight(_opSet, curDate, _readyData);
                    aw.Multiply(aa);
                    aw.SetScale();
                    log.Add(curDate, aw);
                }

                curDate = curDate.AddDays(1);
            }

            return log;
        }
        public Tuple<AssetRateDataLog, AdjRateDataLog> Calculate(MarketDataSet marketData)
        {
            DateTime curDate = this.InputData.StartDate;

            AssetRateDataLog assetLog = new AssetRateDataLog();
            AdjRateDataLog adjLog = new AdjRateDataLog();

            while (curDate <= this.InputData.EndDate)
            {
                if (marketData.IsExistDate(curDate))
                {
                    AssetRateDatum assetDatum = this.Alloc.CalculateAndGetAssetRateDatum(curDate, marketData);
                    AdjRateDatum adjDatum = GetAdjRateDatum(curDate, marketData, adjLog);
                    assetDatum.Multiply(adjDatum);
                    assetDatum.SetScale();
                    assetLog.Add(curDate, assetDatum);
                }
                curDate = curDate.AddDays(1);
            }

            return new Tuple<AssetRateDataLog, AdjRateDataLog>(assetLog, adjLog);
        }
示例#3
0
        public AssetRateDataLog Execute(long caseNumber)
        {
            DateTime curDate = this.Input.StartDate;
            AssetRateDataLog log = new AssetRateDataLog();

            IAdjustment adj = this._adjs[(int)caseNumber];
            log.ExperimentKey = _descriptions[(int)caseNumber];

            while (curDate <= this.Input.EndDate)
            {
                if (this._readyData.IsExistDate(curDate))
                {
                    AssetRateDatum aw = this._allocBase.CalculateAndGetAssetRateDatum(curDate, this._readyData);
                    AdjRateDatum aa = adj.CalculateAssetWeight(null, curDate, _readyData);
                    aw.Multiply(aa);
                    aw.SetScale();
                    log.Add(curDate, aw);
                }

                curDate = curDate.AddDays(1);
            }

            return log;
        }
        public AssetRateDataLog Execute(long caseNumber)
        {
            IAlloc allocBase = this._allocBases[(int)caseNumber];
            DateTime curDate = this.Input.StartDate;
            AssetRateDataLog log = new AssetRateDataLog();

            _curKey = String.Format("SAO({0})", allocBase.GetKey());

            while (curDate <= this.Input.EndDate)
            {
                if (this._readyData.IsExistDate(curDate))
                {
                    AssetRateDatum aw = allocBase.CalculateAndGetAssetRateDatum(curDate, this._readyData);
                    AdjRateDatum aa = new AdjRateDatum(1, 1, 1);
                    aw.Multiply(aa);
                    aw.SetScale();
                    log.Add(curDate, aw);
                }

                curDate = curDate.AddDays(1);
            }

            return log;
        }
示例#5
0
        public ProfitAndLossResult GetResult(AssetRateDataLog log)
        {
            ProfitAndLossResult result = new ProfitAndLossResult(_opSet.GetKey(), this.Input.InitInvestAmount);
            result.CalculatePnL(log, _readyData);

            return result;
        }
        public void CalculatePnL(AssetRateDataLog log, MarketDataSet marketDataSet)
        {
            DateTime prevDate = log.StartDate;
            DateTime curDate = log.StartDate.AddDays(1);

            _cumPnL.Add(prevDate, 0);

            while (curDate <= log.EndDate)
            {
                if (log.IsExistDate(curDate))
                {
                    AssetRateDatum awPrev = log.GetData(prevDate);
                    Tuple<double, double, double, double> dailyPnL = GetDailyPnL(
                        awPrev, prevDate, curDate, InitInvestAmount, marketDataSet);
                    AddDailyPnL(curDate, dailyPnL);
                    AddCumPnL(prevDate, curDate, dailyPnL.Item1);

                    ChangeCurDateAndPrevDate(ref prevDate, ref curDate);
                    continue;
                }
                curDate = curDate.AddDays(1);
            }
            double total = TotalPnL;

            this.AvgPnLPerYear = MathUtil.GetAvgPnLPerYear(this);
            this.PPM = MathUtil.GetPPM(this);
        }
示例#7
0
 ProfitAndLossResult CalculatePnL(AssetRateDataLog log, MarketDataSet marketData)
 {
     ProfitAndLossResult pnl = new ProfitAndLossResult(String.Format("{0}", this.Name), this.InputData.InitInvestAmount);
     pnl.CalculatePnL(log, marketData);
     return pnl;
 }