/// <inheritdoc/>
        public void updatePortfolio(Contract contract, double position, double marketPrice, double marketValue, double averageCost, double unrealisedPNL, double realisedPNL, string accountName)
        {
            var eventArgs = new UpdatePortfolioEventArgs(
                contract,
                position,
                marketPrice,
                marketValue,
                averageCost,
                unrealisedPNL,
                realisedPNL,
                accountName);

            this.UpdatePortfolioEvent?.Invoke(this, eventArgs);
        }
示例#2
0
 private void client_UpdatePortfolio(object sender, UpdatePortfolioEventArgs e)
 {
     try {
         SymbolInfo    symbol  = Factory.Symbol.LookupSymbol(e.Contract.Symbol);
         SymbolHandler handler = GetSymbolHandler(symbol, receiver);
         handler.SetPosition(e.Position);
         if (debug)
         {
             log.Debug("UpdatePortfolio: " + e.Contract.Symbol + " is " + e.Position);
         }
     } catch (ApplicationException ex) {
         log.Warn("UpdatePortfolio: " + ex.Message);
     }
 }
示例#3
0
        private void eh_UpdatePortfolio(object sender, UpdatePortfolioEventArgs e)
        {
            bool        isInPortfolio = true;
            string      symbol_name   = e.Contract.Symbol;
            SymbolInMkt symbol        = mainWin.Portfolio.FirstOrDefault <SymbolInMkt>(x => x.Symbol == symbol_name);

            if (symbol == null)
            {
                symbol        = new SymbolInMkt();
                isInPortfolio = false;
            }
            System.Windows.Threading.Dispatcher.FromThread(OrderManager.UIThread).Invoke(() =>
            {
                if (isInPortfolio)
                {
                    symbol.AvgCost       = e.AverageCost;
                    symbol.MktPrice      = e.MarketPrice;
                    symbol.Position      = e.Position;
                    symbol.RealizedPNL   = e.RealizedPNL;
                    symbol.UnrealizedPNL = e.UnrealizedPNL;
                }
                else
                {
                    symbol.Symbol        = e.Contract.Symbol;
                    symbol.Currency      = e.Contract.Currency;
                    symbol.Account       = e.AccountName;
                    symbol.AvgCost       = e.AverageCost;
                    symbol.MktPrice      = e.MarketPrice;
                    symbol.Position      = e.Position;
                    symbol.RealizedPNL   = e.RealizedPNL;
                    symbol.UnrealizedPNL = e.UnrealizedPNL;
                    symbol.Source        = DisplayName;
                    mainWin.Portfolio.Insert(0, symbol);
                }
            });
        }
示例#4
0
        void ibclient_UpdatePortfolio2(object sender, UpdatePortfolioEventArgs e)
        {
            tStart("ibclient_UpdatePortfolio()");
            string ts;
            lock (private_lock)
            {
                lastPortfolioUpdate = DateTime.Now;
                ts = lastPortfolioUpdate.ToString("T");
            }
            // positions: number shares, prices, PnL
            logger.AddLog(LoggerLevel.Information,
                "UpdatePortfolio (timestamp="
                + ts
                + "): "
                + e.Contract.Symbol + "/" + e.Contract.Currency + ": "
                + " Pos: " + e.Position.ToString()
                + "@" + e.MarketPrice.ToString("N4")
                + ", PnL: " + e.UnrealizedPnl.ToString());

            string symbol = e.Contract.Symbol;
            if (symbol == null) return;

            SrBrokerPosition brokerPos = new SrBrokerPosition();
            brokerPos.Symbol = symbol;
            brokerPos.Currency = e.Contract.Currency;
            brokerPos.Exchange = e.Contract.PrimaryExchange;
            if (!Helpers.SecurityTypeToInstrumentType(e.Contract.SecurityType, out brokerPos.InstrumentType))
            {
                error("bad security type in position " + symbol);
                return;
            }
            if (e.Position >= 0)
            {
                brokerPos.LongQty = e.Position;
            }
            else
            {
                brokerPos.ShortQty = -e.Position;
            }
            brokerPos.Qty = e.Position;
            // brokerPos.Maturity;
            // brokerPos.PutCall;
            brokerPos.Strike = e.Contract.Strike;
            // alles andere in Feldern
            brokerPos.AddCustomField("Account", e.AccountName);
            brokerPos.AddCustomField("AverageCost", e.AverageCost.ToString("N4"));
            brokerPos.AddCustomField("MarketPrice", e.MarketPrice.ToString("N4"));
            brokerPos.AddCustomField("MarketValue", e.MarketValue.ToString());
            brokerPos.AddCustomField("RealizedPnl", e.RealizedPnl.ToString("N2"));
            brokerPos.AddCustomField("UnrealizedPnl", e.UnrealizedPnl.ToString("N2"));
            brokerPos.AddCustomField("ContractId", e.Contract.ContractId.ToString());
            brokerPos.AddCustomField("LocalSymbol", e.Contract.LocalSymbol);
            brokerPos.AddCustomField("Expiry", e.Contract.Expiry);
            brokerPos.AddCustomField("Multiplier", e.Contract.Multiplier);
            // brokerPos.AddCustomField("Exchange", e.Contract.Exchange);
            // brokerPos.AddCustomField("Right", e.Contract.Right.ToString());
            // brokerPos.AddCustomField("SecId", e.Contract.SecId);

            lock (openPositions)
            {
                string key = e.AccountName + "|" + symbol;
                if (openPositions.ContainsKey(key))
                {
                    logger.AddLog(LoggerLevel.Detail, "known position");
                    openPositions[key] = brokerPos;
                }
                else
                {
                    logger.AddLog(LoggerLevel.Detail, "unknown position (added)");
                    openPositions.Add(key, brokerPos);
                }
            }
            tEnd("ibclient_UpdatePortfolio()");
        }
示例#5
0
 void ibclient_UpdatePortfolio(object sender, UpdatePortfolioEventArgs e)
 {
     try
     {
         ibclient_UpdatePortfolio2(sender, e);
     }
     catch (Exception ex)
     {
         error("ibclient_UpdatePortfolio2: " +  ex.Message);
     }
 }