Esempio n. 1
0
        private List <IOrder> GetSellOrderForSingleAccount(IAccountInterface CustomerAccount, List <ISecurityAnalysis> TradingAnalysis, List <Tuple <string, string> > TradingForeCastPerSymbol)
        {
            var ActualSellOrders = from bp in TradingAnalysis
                                   where
                                   bp.HasValue
                                   &&
                                   CustomerAccount.GetHoldings().Count() > 0
                                   &&
                                   CustomerAccount.GetHoldings().Where(h => h.Symbol != null
                                                                       &&
                                                                       h.Symbol.Equals(bp.Instrument.Symbol)).Count() > 0
                                   &&
                                   CustomerAccount.GetAverageAcquisitionCostFromHolding(bp.Instrument.Symbol).Multiply(1.02m).GreaterOrEqualThan(bp.QuoteFromInstrument.LastTradePrice)
                                   select new
            {
                Order = ImperaturGlobal.Kernel.Get <IOrder>(
                    new Ninject.Parameters.ConstructorArgument("Symbol", bp.Instrument.Symbol),
                    new Ninject.Parameters.ConstructorArgument("Trigger", new List <ITrigger> {
                    ImperaturGlobal.Kernel.Get <ITrigger>(
                        new Ninject.Parameters.ConstructorArgument("m_oOperator", TriggerOperator.EqualOrGreater),
                        new Ninject.Parameters.ConstructorArgument("m_oValueType", TriggerValueType.TradePrice),
                        new Ninject.Parameters.ConstructorArgument("m_oTradePriceValue", bp.QuoteFromInstrument.LastTradePrice.Amount),
                        new Ninject.Parameters.ConstructorArgument("m_oPercentageValue", 0m)
                        )
                }),
                    new Ninject.Parameters.ConstructorArgument("AccountIdentifier", CustomerAccount.Identifier),
                    new Ninject.Parameters.ConstructorArgument("Quantity",
                                                               Convert.ToInt32(CustomerAccount.GetHoldings().Where(h => h.Symbol.Equals(bp.Instrument.Symbol)).Sum(ho => ho.Quantity))
                                                               ),
                    new Ninject.Parameters.ConstructorArgument("OrderType", OrderType.Sell),
                    new Ninject.Parameters.ConstructorArgument("ValidToDate", DateTime.Now.AddDays(2)),
                    new Ninject.Parameters.ConstructorArgument("ProcessCode", TradingForeCastPerSymbol.Where(br => br.Item1.Equals(bp.Instrument.Symbol)).First().Item2.ToString()),
                    new Ninject.Parameters.ConstructorArgument("StopLossValidDays", 0),
                    new Ninject.Parameters.ConstructorArgument("StopLossAmount", 0m),
                    new Ninject.Parameters.ConstructorArgument("StopLossPercentage", 0m)
                    )
            };

            return(ActualSellOrders.Select(i => i.Order).ToList());
        }
Esempio n. 2
0
        public ImperaturWebService(IImperaturMarket imperaturMarket)
        {
            _imperaturMarket = imperaturMarket;
            string RestBase = "/api/";

            Get["/"] = _ => View["index"];

            Get[RestBase + "/accountsearch/{search}"] = parameters =>
            {
                List <IAccountInterface> oIA = _imperaturMarket.GetAccountHandler().SearchAccount(parameters.search, AccountType.Customer);
                var feeds2 = oIA.Select
                                 (f => new
                {
                    accountname    = f.AccountName,
                    availablefunds = f.GetAvailableFunds().First().ToString(),
                    identifier     = f.Identifier,
                    totalfunds     = f.GetTotalFunds().First().ToString()
                }).ToArray();
                return(Response.AsJson(feeds2));
            };

            Get[RestBase + "/account"] = parameters =>
            {
                List <IAccountInterface> oIA = _imperaturMarket.GetAccountHandler().Accounts();

                var feeds2 = oIA.Where(x => x.GetAccountType().Equals(AccountType.Customer)).Select
                                 (f => new
                {
                    accountname    = f.AccountName,
                    availablefunds = f.GetAvailableFunds().First().ToString(),
                    identifier     = f.Identifier,
                    totalfunds     = f.GetTotalFunds().First().ToString()
                }).ToArray();
                return(Response.AsJson(feeds2));
            };

            Get[RestBase + "account/{id}"] = identifier =>
            {
                IAccountInterface oA = _imperaturMarket.GetAccountHandler().GetAccount(new Guid(identifier.id));

                List <ICurrency> FilterCurrency = new List <ICurrency>();
                FilterCurrency.Add(ImperaturGlobal.GetSystemCurrency());

                IMoney AvailableSystemAmount = oA.GetAvailableFunds(FilterCurrency).First();
                IMoney TotalFunds            = oA.GetTotalFunds(FilterCurrency).First();
                IMoney TotalDeposit          = oA.GetDepositedAmount(FilterCurrency).First();

                var feeds2 =
                    new
                {
                    accountname    = oA.AccountName,
                    availablefunds = oA.GetAvailableFunds().First().ToString(),
                    identifier     = oA.Identifier,
                    totalfunds     = oA.GetTotalFunds().First().ToString(),
                    change         = string.Format("{0}%", TotalDeposit.Amount > 0 ? TotalFunds.Subtract(TotalDeposit.Amount).Divide(TotalDeposit.Amount).Multiply(100).ToString(true, false) : "0"),
                    transactions   = oA.Transactions.Select(t => new
                    {
                        transdate       = t.TransactionDate,
                        amount          = t.CreditAmount.ToString(),
                        transactiontype = t.TransactionType.ToString()
                    }).ToArray(),
                    customername = oA.GetCustomer().FullName,
                    holdings     = oA.GetHoldings().Select(h => new
                    {
                        name           = h.Name,
                        change         = h.Change.ToString(),
                        aac            = oA.GetAverageAcquisitionCostFromHolding(h.Name).ToString(),
                        purchaseamount = h.PurchaseAmount.ToString()
                    }),
                    orders = _imperaturMarket.OrderQueue.GetOrdersForAccount(new Guid(identifier.id)).Select(o => new
                    {
                        ordertype   = o.OrderType.ToString(),
                        symbol      = o.Symbol,
                        quantity    = o.Quantity.ToString(),
                        validtodate = o.ValidToDate.ToString()
                    })
                };
                return(Response.AsJson(feeds2));
            };


            Get[RestBase + "acount/{id}/holdings"] = identifier => {
                List <Imperatur_v2.trade.Holding> oH = _imperaturMarket.GetAccountHandler().GetAccount(new Guid(identifier.id)).GetHoldings();

                var holdings = oH.Select(h =>
                                         new
                {
                    name          = h.Name,
                    change        = h.Change,
                    symbol        = h.Symbol,
                    currentamount = h.CurrentAmount
                }).ToArray();
                return(Response.AsJson(holdings));
            };
        }
Esempio n. 3
0
        public void UpdateAccountInfo(IAccountInterface AccountData)
        {
            m_oA = AccountData;
            if (listView_holdings.Items.Count > 0)
            {
                listView_holdings.Items.Clear();
            }

            foreach (Holding oH in AccountData.GetHoldings())
            {
                ListViewItem oHoldingRow = new ListViewItem(
                    new string[]
                {
                    oH.Name,
                    oH.Quantity.ToString(),
                    oH.PurchaseAmount.ToString(),
                    string.Format("{0} / {1}",
                                  oH.Change.ToString(true, true),
                                  Math.Round(oH.ChangePercent, 2, MidpointRounding.AwayFromZero).ToString() + " %"),
                    oH.CurrentAmount.ToString(),
                    m_oA.GetAverageAcquisitionCostFromHolding(oH.Name).ToString(),
                    "Sell",
                    "Info"
                }
                    );
                oHoldingRow.SubItems.Add(oH.Name);

                oHoldingRow.Tag = oH.Name.ToString();
                listView_holdings.Items.Add(oHoldingRow);
            }


            listView_holdings.Refresh();
            if (listView_holdings.Items.Count == 1)
            {
                //Show the selected symbol in the trade
                OnSelectedSymbol(new SelectedSymbolEventArg()
                {
                    Symbol = listView_holdings.Items[0].Tag.ToString()
                });
            }


            DataTable TotalAvilableFundsDT = new DataTable();

            TotalAvilableFundsDT.Columns.Add("Deposit");
            TotalAvilableFundsDT.Columns.Add("Amount");
            TotalAvilableFundsDT.Columns.Add("Change");

            List <IMoney> TotalFundsList = AccountData.GetTotalFunds() ?? new List <IMoney>();
            List <IMoney> TotalDeposit   = AccountData.GetDepositedAmount() ?? new List <IMoney>();



            DataRow row = null;

            foreach (IMoney oM in TotalFundsList)
            {
                row            = TotalAvilableFundsDT.NewRow();
                row["Deposit"] = TotalDeposit.Where(od => od.CurrencyCode.Equals(oM.CurrencyCode)).First().ToString();
                row["Amount"]  = oM.ToString(true, true);
                row["Change"]  =
                    string.Format("{0} / {1}",
                                  oM.Subtract(TotalDeposit.Where(od => od.CurrencyCode.Equals(oM.CurrencyCode)).First()).ToString(),
                                  string.Format("{0}%", TotalDeposit.Where(od => od.CurrencyCode.Equals(oM.CurrencyCode)).First().Amount > 0 ? oM.Subtract(TotalDeposit.Where(od => od.CurrencyCode.Equals(oM.CurrencyCode)).First().Amount).Divide(TotalDeposit.Where(od => od.CurrencyCode.Equals(oM.CurrencyCode)).First().Amount).Multiply(100).ToString(true, false) : "0")
                                  );
                //row["ChangePercent"] = string.Format("{0}%", TotalDeposit.Where(od => od.CurrencyCode.Equals(oM.CurrencyCode)).First().Amount > 0 ? oM.Subtract(TotalDeposit.Where(od => od.CurrencyCode.Equals(oM.CurrencyCode)).First().Amount).Divide(TotalDeposit.Where(od => od.CurrencyCode.Equals(oM.CurrencyCode)).First().Amount).Multiply(100).ToString(true, false) : "0");
                TotalAvilableFundsDT.Rows.Add(row);
            }

            TotalAvilableFundsGrid.DataSource          = TotalAvilableFundsDT;
            TotalAvilableFundsGrid.Dock                = DockStyle.Top;
            TotalAvilableFundsGrid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
            TotalAvilableFundsGrid.CellFormatting     += TotalAvilableFundsGrid_CellFormatting;
            TotalAvailableFunds = new CreateDataGridControlFromObject(
                new DataGridForControl
            {
                DataGridViewToBuild = TotalAvilableFundsGrid,
                GroupBoxCaption     = "Current Funds"
            }
                );

            TotalAvailableFunds.Name = "AccountMainAvailableFunds";
            if (!tableLayoutPanel1.Controls.ContainsKey(TotalAvailableFunds.Name))
            {
                tableLayoutPanel1.Controls.Add(TotalAvailableFunds, 0, 2);
            }
            else
            {
                tableLayoutPanel1.Controls.RemoveByKey(TotalAvailableFunds.Name);
                tableLayoutPanel1.Controls.Add(TotalAvailableFunds, 0, 2);
            }
        }