Example #1
0
        // triggered by reqAccountUpdate(true, null) called in Start()
        public virtual void updatePortfolio(Contract contract, int position, double marketPrice, double marketValue,
                                            double averageCost, double unrealisedPNL, double realisedPNL, string accountName)
        {
            Position pos = new Position();

            pos.FullSymbol = ContractToSecurityFullName(contract);

            pos.Size = position;

            // STK averageCost is its unit price
            // FUT averageCost is its unit price * multiplier
            int multiplier = Security.GetMultiplierFromFullSymbol(pos.FullSymbol);

            //pos.AvgPrice = pos.FullSymbol.Contains("STK") ? (decimal)averageCost :
            //    ((position == 0) ? (decimal)averageCost : (decimal)(averageCost/position/multiplier));
            pos.AvgPrice = (decimal)(averageCost / multiplier);
            pos.ClosedPL = (decimal)realisedPNL;
            pos.OpenPL   = (decimal)unrealisedPNL;
            pos.Account  = Account;

            // If exists, don't trigger gotPosition
            if (_symbolToPosition.ContainsKey(pos.FullSymbol))
            {
                _symbolToPosition[pos.FullSymbol] = pos;
            }
            else
            {
                _symbolToPosition.Add(pos.FullSymbol, pos);
                OnGotPosition(pos);
            }
        }
Example #2
0
 /// <summary>
 /// computes money used to purchase a portfolio of positions.
 /// uses average price for position.
 /// </summary>
 /// <param name="plist"></param>
 /// <returns></returns>
 public static decimal[] MoneyInUse(List <Position> plist)
 {
     decimal[] miu = new decimal[plist.Count];
     for (int i = 0; i < plist.Count; i++)
     {
         miu[i] += plist[i].AvgPrice * plist[i].UnsignedSize * Security.GetMultiplierFromFullSymbol(plist[i].FullSymbol);
     }
     return(miu);
 }
Example #3
0
        public static decimal[] MoneyInUse(Dictionary <string, Position> pdict)
        {
            decimal[] miu = new decimal[pdict.Count];
            int       i   = 0;

            foreach (KeyValuePair <string, Position> item in pdict)
            {
                miu[i++] += item.Value.AvgPrice * item.Value.UnsignedSize * Security.GetMultiplierFromFullSymbol(item.Key);
            }
            return(miu);
        }
Example #4
0
        /// <summary>
        /// Gets the closed PL on a position basis, the PL that is registered to the account for the entire shares transacted.
        /// </summary>
        /// <param name="existing">The existing position.</param>
        /// <param name="closing">The portion of the position being changed/closed.</param>
        /// <returns></returns>
        public static decimal ClosePL(Position existing, Trade adjust)
        {
            int closedsize = Math.Abs(adjust.TradeSize) > existing.UnsignedSize ? existing.UnsignedSize : Math.Abs(adjust.TradeSize);

            return(ClosePT(existing, adjust) * closedsize * Security.GetMultiplierFromFullSymbol(adjust.FullSymbol));
        }
Example #5
0
 /// <summary>
 /// get open pl for position given the last trade
 /// </summary>
 /// <param name="LastTrade"></param>
 /// <param name="Pos"></param>
 /// <returns></returns>
 public static decimal OpenPL(decimal LastTrade, Position Pos)
 {
     return(OpenPL(LastTrade, Pos.AvgPrice, Pos.Size * Security.GetMultiplierFromFullSymbol(Pos.FullSymbol)));
 }