using MarketData.Utils; namespace MarketData.Generator.Momentum { public class ActivePositions : Dictionary { public ActivePositions() { } public double GetExposure() { double exposure=0.00; List keys = new List(Keys); for(int index=0;index positions=this[keys[index]]; 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); for (int index = 0; index < keys.Count; index++) { Positions positions = this[keys[index]]; foreach (Position slotPosition in positions) { if (slotPosition == searchPosition) { positions.Remove(searchPosition); return true; } } } return false; } public Positions GetPositions() { Positions positionsCollection=new Positions(); List 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; List keys=new List(this.Keys); for(int index=0;index positions=this[keys[index]]; 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; List keys = new List(this.Keys); for(int index=0;index positions=this[keys[index]]; 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() { List keys = new List(this.Keys); for(int index=0;index ToNVPCollections() { List keys=new List(Keys); List nvpCollectionsList=new List(); for(int index=0;index