public UnlTradingData CalculateWhatIf(double ivChange, int daysLeftChange) { IVChange = ivChange; DaysLeftChange = daysLeftChange; var positionList = UnlManager.PositionsDataBuilder.PositionDataDic.Values; List <BnSCalculationData> bnSCalculationDataList = new List <BnSCalculationData>(); BnSCalcHelpper bnSCalcHelpper = new BnSCalcHelpper(); foreach (OptionsPositionData position in positionList) { BnSCalculationData bnSCalculationData = bnSCalcHelpper.CalculateValuesByBnS(position.OptionData, DaysLeftChange, IVChange); bnSCalculationData.Position = position.Position; bnSCalculationDataList.Add(bnSCalculationData); } WhatIfPositionsSummaryData = new PositionsSummaryData { CostTotal = bnSCalculationDataList.Sum(pd => pd.Cost), DeltaTotal = bnSCalculationDataList.Sum(pd => pd.DeltaTotal), GammaTotal = bnSCalculationDataList.Sum(pd => pd.GammaTotal), ThetaTotal = bnSCalculationDataList.Sum(pd => pd.ThetaTotal), VegaTotal = bnSCalculationDataList.Sum(pd => pd.VegaTotal), MarketValue = bnSCalculationDataList.Sum(pd => pd.PositionPrice), Shorts = bnSCalculationDataList.Where(pd => pd.Position < 0).Sum(pd => Abs(pd.Position)), Longs = bnSCalculationDataList.Where(pd => pd.Position > 0).Sum(pd => pd.Position), IVWeightedAvg = bnSCalculationDataList.Sum(pd => pd.ImpliedVolatilitiesForCalc * pd.Quantity) / bnSCalculationDataList.Sum(pd => pd.Quantity) }; WhatIfUnlTradingData.PositionsSummaryData = WhatIfPositionsSummaryData; return(WhatIfUnlTradingData); }
public PositionsDataBuilder(ManagedSecurity managedSecurity, UNLManager unlManager) : base(managedSecurity, unlManager) { PositionDataDic = new Dictionary <string, OptionsPositionData>(); OptionsManager = unlManager.OptionsManager; Logger.DebugFormat("{0}.OptionsManager created. Thread name: {1}.", Symbol, Thread.CurrentThread.Name); PositionsSummaryData = new PositionsSummaryData(); if (UnlTradingData != null) { UnlTradingData.PositionsSummaryData = PositionsSummaryData; } }