Exemplo n.º 1
0
        private void OverrideAddingUpcoming()
        {
            lock (UpcomingOrders)
            {
                //remove any past due upcoming orders from the list
                for (int i = 0; i < UpcomingOrders.Count; i++)
                {
                    if (UpcomingOrders[i].Time.CompareTo(DateTime.Now) < 0)
                    {
                        //order time has  passed.  it should have  been attempted or ordered
                        Dispatcher.Invoke(() =>
                        {
                            UpcomingOrders.RemoveAt(i);
                            OnPropertyChanged("UpcomingOrders");
                        });
                    }
                }



                var timedouble = DateTimeAxis.ToDouble(DateTime.Now);
                foreach (LineOrder order in ActiveLineOrders)
                {
                    DataPoint nextorderPoint = new DataPoint(0, 0);
                    var       points         = (List <DataPoint>)(order.LimitLineSeries.ItemsSource);
                    for (int i = 0; i < points.Count; i++)
                    {
                        if (points[i].X < timedouble)
                        {
                            //nextorderPoint = points[i];
                        }
                        else
                        {
                            nextorderPoint = points[i];
                            break; //use previous data point
                        }
                    }
                    if (nextorderPoint.X != 0 && nextorderPoint.Y != 0)
                    {
                        var next = new UpcomingOrder()
                        {
                            Order = order, Price = nextorderPoint.Y.ToString(), Side = (order.OrderSide == OrderSide.Buy ? "Buy" : "Sell"), Time = DateTimeAxis.ToDateTime(nextorderPoint.X), TimeDisplay = DateTimeAxis.ToDateTime(nextorderPoint.X).ToString()
                        };

                        if (!UpcomingOrders.Any(l => l.Time == next.Time && l.Price == next.Price))
                        {
                            Dispatcher.Invoke(() =>
                            {
                                UpcomingOrders.Add(next);
                                OnPropertyChanged("UpcomingOrders");
                            });
                        }
                        else
                        {
                            //already exists
                        }
                    }
                    else
                    {
                        Dispatcher.Invoke(() =>
                        {
                            ActionHistory += "Could not determine next Order Point" + "\n";
                            new Popup("Error Finding Next Order", "Could not determine next Order Point").Show();
                        });
                    }
                }
            }
        }
Exemplo n.º 2
0
        public void StartLookingForUpcomingOrders()
        {
            executeThread = new Thread(() =>
            {
                int count = 500;
                while (!UpcomingOrdersThreadStopped)
                {
                    if (count == 500)//wait 5seconds
                    {
                        UpdateOrders();

                        lock (UpcomingOrders)
                        {
                            //remove any past due upcoming orders from the list
                            for (int i = 0; i < UpcomingOrders.Count; i++)
                            {
                                if (UpcomingOrders[i].Time.CompareTo(DateTime.Now) < 0 || UpcomingOrders[i].StatusCompleted)
                                {
                                    //order time has  passed.  it should have  been attempted or ordered
                                    Dispatcher.Invoke(() =>
                                    {
                                        UpcomingOrders.RemoveAt(i);
                                        OnPropertyChanged("UpcomingOrders");
                                    });
                                }
                            }



                            count          = 0;
                            var timedouble = DateTimeAxis.ToDouble(DateTime.Now);
                            foreach (LineOrder order in ActiveLineOrders)
                            {
                                DataPoint nextorderPoint = new DataPoint(0, 0);
                                var points = (List <DataPoint>)(order.LimitLineSeries.ItemsSource);
                                for (int i = 0; i < points.Count; i++)
                                {
                                    if (points[i].X < timedouble)
                                    {
                                        //nextorderPoint = points[i];
                                    }
                                    else
                                    {
                                        nextorderPoint = points[i];
                                        break; //use previous data point
                                    }
                                }
                                if (nextorderPoint.X != 0 && nextorderPoint.Y != 0)
                                {
                                    var next = new UpcomingOrder()
                                    {
                                        Order = order, Price = nextorderPoint.Y.ToString(), Side = (order.OrderSide == OrderSide.Buy ? "Buy" : "Sell"), Time = DateTimeAxis.ToDateTime(nextorderPoint.X), TimeDisplay = DateTimeAxis.ToDateTime(nextorderPoint.X).ToString()
                                    };

                                    if (!UpcomingOrders.Any(l => l.Time == next.Time && l.Price == next.Price))
                                    {
                                        Dispatcher.Invoke(() =>
                                        {
                                            UpcomingOrders.Add(next);
                                            OnPropertyChanged("UpcomingOrders");
                                        });
                                    }
                                    else
                                    {
                                        //already exists
                                    }
                                }
                                else
                                {
                                    Dispatcher.Invoke(() =>
                                    {
                                        new Popup("Error Finding Next Order", "Could not determine next Order Point").Show();
                                    });
                                }
                            }
                        }
                    }

                    Thread.Sleep(10);
                    count++;
                }
            });
            executeThread.Start();
        }