Exemplo n.º 1
0
        private void btn_editTrademap_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                ParentOrder po = (ParentOrder)dg_ParentOrders.SelectedItem;

                if (po == null)
                {
                    Dispatcher.InvokeAsync(() => MessageBox.Show("Please select parent order"));
                }
                else
                {
                    ParentOrderManager.Instance.StopParentOrder(po.ID);
                    dg_ParentOrders.Items.Refresh();


                    EditTradeMap editTradeMap = new EditTradeMap(po);
                    editTradeMap.ShowDialog();

                    RollingAlgo algo = (RollingAlgo)po.Algo;
                    var         list = algo.TradeMap.Values.OrderBy(o => o.Level).ToList();
                    dg_Trademap.ItemsSource = list;
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
                Log.Error(ex.StackTrace);
                MessageBox.Show("Fail to edit trademap, error: " + ex.Message);
            }
        }
Exemplo n.º 2
0
        private void btn_getTrademap_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                ParentOrder po = (ParentOrder)dg_ParentOrders.SelectedItem;



                if (po == null)
                {
                    Dispatcher.InvokeAsync(() => MessageBox.Show("Please select parent order"));
                }
                else
                {
                    RollingAlgo algo = (RollingAlgo)po.Algo;
                    dg_Trademap.ItemsSource = null;
                    if (algo.TradeMap != null && algo.TradeMap.Count > 0)
                    {
                        var list = algo.TradeMap.Values.OrderBy(o => o.Level).ToList();
                        dg_Trademap.ItemsSource = list;

                        if (dg_ParentOrders.ItemsSource != null)
                        {
                            dg_ParentOrders.Items.Refresh();
                        }
                        if (dg_Details.ItemsSource != null)
                        {
                            dg_Details.Items.Refresh();
                        }
                        // if (dg_Trademap.ItemsSource != null) dg_Trademap.Items.Refresh();
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
                Log.Error(ex.StackTrace);
                MessageBox.Show("Fail to retrieve parent order, error: " + ex.Message);
            }
        }
Exemplo n.º 3
0
        private void btn_submit_Click(object sender, RoutedEventArgs e)
        {
            if (!TradeManager.Instance.IsConnected || !ParentOrderManager.Instance.IsInit)
            {
                MessageBox.Show("IB is not connected, please reconnect first!");
                Log.Error("IB is not connected, please reconnect first");
                return;
            }

            List <ITradeRule> rules = new List <ITradeRule>()
            {
                new RollingAlgoBuyRule(), new RollingAlgoSellRule()
            };
            RollingAlgo algo = null;
            string      symbol;
            double      beginPrice;
            double      shareOrDollarAmt;
            double      scaleFactor;
            int         scaleLevel;

            try
            {
                symbol           = txt_symbol.Text.Trim().ToUpper();
                beginPrice       = Convert.ToDouble(txt_price.Text);
                scaleFactor      = Convert.ToDouble(txt_scaleFactor.Text);
                scaleLevel       = Convert.ToInt32(txt_scalelvl.Text) - 1;
                shareOrDollarAmt = Convert.ToDouble(txt_shareAmt.Text);
                bool isPctScaleFactor = comb_scale.SelectedIndex == 1;

                bool buyBackLvlZero = chk_buyback.IsChecked.Value;

                double adjQty   = Convert.ToDouble(txt_adj.Text);
                bool   isAdjPct = comb_adj.SelectedIndex == 0;
                bool   isShare  = comb_shareAmt.SelectedIndex == 0;

                scaleFactor = isPctScaleFactor ? scaleFactor / 100 : scaleFactor;


                if (beginPrice <= 0 || scaleLevel <= 0 || scaleFactor <= 0 || (isPctScaleFactor && scaleFactor >= 100) || (isAdjPct && Math.Abs(adjQty) >= 100))
                {
                    MessageBox.Show("Invalid price, scale inputs. scale factor pct must be between 0% and 100%. adj Pct must between 0% and 100%");
                    return;
                }

                algo = new RollingAlgo(beginPrice, scaleLevel, scaleFactor, isPctScaleFactor, shareOrDollarAmt, isShare, buyBackLvlZero, adjQty, isAdjPct);


                //Establish rules
                double pctGain = Convert.ToDouble(txt_pricegain.Text) / 100;
                double pctSell = Convert.ToDouble(txt_pctsell.Text) / 100;
                RollingAlgoFirstLevelSellRule sellRule = new RollingAlgoFirstLevelSellRule(pctSell, pctGain);

                rules.Add(sellRule);

                if (chk_buyback.IsChecked.Value)
                {
                    rules.Add(new RollingAlgoFirstLevelBuyRule());
                }

                algo.TradeRules = rules;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Invalid input parameters, Error: " + ex.Message);
                return;
            }

            var result = MessageBox.Show(string.Format(@"Please confirm to Place order:
                Symbol: {0}
                Begin Px: {1:0.00}
                Share/Amt: {2}
                Levels: {3}
                Scale factor: {4:0.00}",
                                                       symbol, beginPrice, shareOrDollarAmt, scaleLevel + 1, scaleFactor), "Order Confirmation", MessageBoxButton.YesNo);

            if (result == MessageBoxResult.No)
            {
                return;
            }

            ParentOrder order = ParentOrderManager.Instance.CreateParentOrder(symbol, 0, algo);

            order.IsActive = true;
            ParentOrderManager.Instance.AddParentOrder(order);

            if (!ParentOrderManager.Instance.IsStarted)
            {
                ParentOrderManager.Instance.Start();
            }

            if (dg_ParentOrders.ItemsSource != null)
            {
                dg_ParentOrders.Items.Refresh();
            }
            if (dg_Details.ItemsSource != null)
            {
                dg_Details.Items.Refresh();
            }
            if (dg_Trademap.ItemsSource != null)
            {
                dg_Trademap.Items.Refresh();
            }

            Dispatcher.InvokeAsync(() =>
                                   MessageBox.Show(string.Format("Parent order created. Symbol {0}, Begin price {1}, share/amt {2}", symbol, beginPrice, shareOrDollarAmt)));
        }