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); } }
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); } }
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))); }