using MarketData.DataAccess; using MarketData.MarketDataModel; using MarketData.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; namespace MarketData.Generator.Momentum { public class ActivePositions : Dictionary { public ActivePositions() { } public double GetExposure() { int count=Count; double exposure=0.00; for(int slotIndex=0;slotIndex positions=this[slotIndex]; if(null==positions||0==positions.Count)continue; exposure+=(from Position position in positions select position.Exposure).Sum(); } return exposure; } public List GetSymbols() { return SymbolsHeld(); } public Position FindPosition(String symbol,DateTime purchaseDate) { Position foundPosition=null; List keys=new List(this.Keys); for(int index=0;index keys=new List(this.Keys); for(int index=0;index keys=new List(this.Keys); Dictionary symbols=new Dictionary(); for(int index=0;index SymbolsHeld() { List keys = new List(this.Keys); Dictionary symbols = new Dictionary(); for (int index = 0; index < keys.Count; index++) { Positions positions = this[keys[index]]; foreach (Position position in positions) { if (!symbols.ContainsKey(position.Symbol)) symbols.Add(position.Symbol, position.Symbol); } } return new List(symbols.Keys); } public double GetMarketValue() { int count=Count; double marketValue=0.00; for(int slotIndex=0;slotIndex positions=this[slotIndex]; if(null==positions||0==positions.Count)continue; marketValue+=(from Position position in positions select position.MarketValue).Sum(); } return marketValue; } public double GetGainLoss() { int count=Count; double marketValue=0.00; double exposure=0.00; for(int slotIndex=0;slotIndex positions=this[slotIndex]; if(null==positions||0==positions.Count)continue; exposure+=(from Position position in positions select position.Exposure).Sum(); marketValue+=(from Position position in positions select position.MarketValue).Sum(); } return marketValue-exposure; } public double GetGainLossPercent() { double exposure=GetExposure(); double marketValue=GetMarketValue(); if(0.00==exposure)return exposure; return (marketValue-exposure)/exposure; } public void Display() { for(int slotIndex=0;slotIndex ToNVPCollections() { List slots=new List(Keys); List nvpCollectionsList=new List(); foreach(int slot in slots) { Positions positions=this[slot]; SlotPositions slotPositions=new SlotPositions(slot,positions); NVPCollections nvpCollections=slotPositions.ToNVPCollections(); nvpCollectionsList.Add(nvpCollections); } return nvpCollectionsList; } } }