Exemple #1
0
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            formClosing = true;
            if (stocks != null && stocks.Count() > 0)
            {
                WriteToXmlFile <BindingList <Stock> >(Robinhood.__stocksFile, stocks);
            }

            Robinhood.SignOut();
        }
Exemple #2
0
        /// <summary>
        /// Show the recent 1k open orders in the UI grid
        /// </summary>
        void UpdateRecentOrders()
        {
            if (RecentOrders.Count() > 0)
            {
                int scrollPosition = dataGridViewRecentOrders.FirstDisplayedScrollingRowIndex;
                int rowGrid        = 0;
                if (dataGridViewRecentOrders.SelectedRows != null && dataGridViewRecentOrders.SelectedRows.Count > 0)
                {
                    rowGrid = dataGridViewRecentOrders.SelectedRows[0].Index;
                }

                dataGridViewRecentOrders.DataSource = RecentOrders;


                if (scrollPosition > 0)
                {
                    dataGridViewRecentOrders.FirstDisplayedScrollingRowIndex = scrollPosition;
                }

                if (rowGrid != 0 && rowGrid < dataGridViewRecentOrders.Rows.Count)
                {
                    dataGridViewRecentOrders.Rows[rowGrid].Selected = true;
                }

                foreach (DataGridViewColumn col in dataGridViewRecentOrders.Columns)
                {
                    if (col.HeaderText == "StopPrice" || col.HeaderText == "Price" || col.HeaderText == "AveragePrice" ||
                        col.HeaderText == "TotalNotional")
                    {
                        col.DefaultCellStyle.Format = "c";
                        col.Visible = true;
                    }
                    else if (col.HeaderText == "Side" || col.HeaderText == "Quantity" || col.HeaderText == "Type" ||
                             col.HeaderText == "State" || col.HeaderText == "AveragePrice")
                    {
                        col.Visible = true;
                    }
                    else
                    {
                        col.Visible = false;
                    }
                }
                dataGridViewRecentOrders.Refresh();
            }
            else
            {
                dataGridViewRecentOrders.DataSource = null;
            }

            if (tabControlMain.TabPages[1].Text.Contains("Loading"))
            {
                tabControlMain.TabPages[1].Text = "Recent Orders";
            }
        }
Exemple #3
0
        /// <summary>
        /// Refreshes Order history/Queued orders
        /// </summary>
        /// <param name="param"></param>
        void PendingOrdersUpdater(object param)
        {
            while (true)
            {
                try
                {
                    IList <OrderSnapshot> queuedOrders    = new List <OrderSnapshot>();
                    IList <OrderSnapshot> completedOrders = new List <OrderSnapshot>();
                    IList <OrderSnapshot> cancelledOrders = new List <OrderSnapshot>();
                    //get the most recent 1k orders
                    var result = Robinhood.rh.DownloadOrders().Result;
                    int i      = 1;
                    do
                    {
                        ThreadedBindingList <OrderSnapshot> oList = new ThreadedBindingList <OrderSnapshot>(result.Items.ToList());

                        if (oList != null && oList.Any(o => o.State == "queued") || oList.Any(o => o.State == "confirmed"))
                        {
                            //adding confirmed orders to pending order
                            ((List <OrderSnapshot>)queuedOrders).AddRange(oList.Where(o => o.State == "confirmed"));
                            //adding queueed order to pending orders
                            ((List <OrderSnapshot>)queuedOrders).AddRange(oList.Where(o => o.State == "queued" && !queuedOrders.Any(or => or.OrderId == o.OrderId)).ToList());
                        }
                        //TODO: add support for "partially_filled" orders
                        if (oList != null && oList.Any(o => o.State == "filled"))
                        {
                            //adding filled orders
                            ((List <OrderSnapshot>)completedOrders).AddRange(oList.Where(o => o.State == "filled").ToList());
                        }
                        if (oList != null && oList.Any(o => o.State == "cancelled"))
                        {
                            //adding canceled orders
                            ((List <OrderSnapshot>)cancelledOrders).AddRange(oList.Where(o => o.State == "cancelled").ToList());
                        }

                        //removing filled and cancelled orders from pending orders
                        lock (AllPendingOrders)
                        {
                            for (int j = 0; j < AllPendingOrders.Count(); j++)
                            {
                                if (cancelledOrders.Any(or => or.OrderId == AllPendingOrders[j].OrderId) ||
                                    completedOrders.Any(or => or.OrderId == AllPendingOrders[j].OrderId))
                                {
                                    AllPendingOrders.RemoveAt(j);
                                }
                            }
                        }

                        //From the most recent 1k orders adding opened & filled order to recent orders ui grid
                        if (i == 1)
                        {
                            RecentOrders = new ThreadedBindingList <OrderSnapshot>(oList.Where(o => o.State != "cancelled").ToList());
                            this.dataGridViewRecentOrders.BeginInvoke((Action) delegate
                            {
                                this.UpdateRecentOrders();
                            });
                        }

                        //after downloading recent  3 order break loop and start from most recent order again
                        if (i >= 3)
                        {
                            break;
                        }
                        i++; // going back 1k orders
                        result = Robinhood.rh.DownloadOrders(result.Next).Result;
                    } while (result.Items != null);

                    //from the most recent 3k order adding open order to a list
                    foreach (OrderSnapshot order in queuedOrders)
                    {
                        if (!AllPendingOrders.Any(o => o.OrderId == order.OrderId))
                        {
                            lock (AllPendingOrders)
                            {
                                AllPendingOrders.Add(order);
                            }
                        }
                    }

                    foreach (Stock s in stocks)
                    {
                        s.PendingOrders = new ThreadedBindingList <OrderSnapshot>(AllPendingOrders.Where(o => o.InstrumentId == s.InstrumentURL).ToList());
                    }
                }
                catch (Exception e)
                {
                }

                //sleep for 1 second before fetching recent 3k orders again
                Thread.Sleep(1000);
            }
        }