Example #1
0
        public string GetBoxedPosition()
        {
            string[] colNames = new[] { "TRADER", "SYMBOL", "QUANTITY" };

            var groupedLongPosition = LongPositions.GroupBy(r => new { r.Trader, r.Symbol })
                                      .Select(grp => new
            {
                grp.Key,
                Qty = grp.Sum(r => r.Qty)
            }).ToList();

            var groupedShortPosition = ShortPositions.GroupBy(r => new { r.Trader, r.Symbol })
                                       .Select(grp => new
            {
                grp.Key,
                Qty = Math.Abs(grp.Sum(r => r.Qty))
            }).ToList();

            var result = (from lP in groupedLongPosition
                          join sP in groupedShortPosition on lP.Key equals sP.Key
                          select new
            {
                lP.Key.Trader,
                lP.Key.Symbol,
                Qty = Min(lP.Qty, sP.Qty)
            }).Select(r => r.Trader + "," + r.Symbol + "," + r.Qty).ToList();

            return(string.Join(",", colNames) + Environment.NewLine + string.Join(Environment.NewLine, result));
        }
 internal void AddPosition(Position pos)
 {//build position collections incrementally
     if (pos.TradeType == TradeType.Buy)
     {
         LongPositions.Add(pos);
     }
     else
     {
         ShortPositions.Add(pos);
     }
 }
Example #3
0
 public DataFile(string fileName) : this()
 {
     using (var streamReader = new StreamReader(fileName))
     {
         streamReader.ReadLine();//skip first line
         while (streamReader.Peek() >= 0)
         {
             var traderPosition = new TraderPosition(streamReader.ReadLine());
             TraderPositions.Add(traderPosition);
             if (traderPosition.Qty >= 0)
             {
                 LongPositions.Add(traderPosition);
             }
             else
             {
                 ShortPositions.Add(traderPosition);
             }
         }
     }
 }
        internal void UpdateAll()
        {
            foreach (var pos in CompositePositions)
            {
                //in case CompositePositions is null such as when building via AddPosition()
                if (CompositePositions == null)
                {
                    CompositePositions =
                        (List <Position>)ShortPositions.Concat(LongPositions);
                }

                //all positions in compositePositions list should be of same symbol
                if (this.Symbol == null)
                {
                    this.Symbol = pos.SymbolCode;
                }
                if (this.Symbol != pos.SymbolCode)
                {
                    throw
                        new InvalidOperationException("symbol mismatch in compositePos. list");
                }
                //add pos to approp. list, sum vol & avg. prc.
                if (pos.TradeType == TradeType.Buy)
                {
                    LongPositions.Add(pos);
                    LongExposureVol   += pos.Volume;
                    VolWdEntryPrcLong += pos.EntryPrice * (double)pos.Volume;
                }
                else
                {
                    ShortPositions.Add(pos);
                    ShortExposureVol   += pos.Volume;
                    VolWdEntryPrcShort += pos.EntryPrice * (double)pos.Volume;
                }
                //foreach
            }
            VolWdEntryPrcLong  /= LongExposureVol;
            VolWdEntryPrcShort /= ShortExposureVol;
            //UpdateAll()
        }