//改变目标价 private void btn_ChangeOrderTargetPrice(object sender, RoutedEventArgs e) { e.Handled = true; Button btn = (Button)sender; ConditionOrderField cof = (ConditionOrderField)btn.DataContext; InstrumentField instrument; Body.trdApi.DicInstrumentField.TryGetValue(cof.InstrumentID, out instrument); double tick = instrument.PriceTick; double Price = 0; StackPanel panel = (StackPanel)btn.Parent; TextBox tbx = (TextBox)panel.FindName("tbxTargetPrice"); if (tbx != null) { double.TryParse(tbx.Text, out Price); //Instrument instrument = btn.TemplatedParent. if (btn.Name == "btnIncOrderTargetPrice") { Price += tick; } else if (btn.Name == "btnDecOrderTargetPrice") { if (Price > 0) { Price -= tick; } } cof.TargetPrice = Price; tbx.Text = Price.ToString(); } }
//是否运行? private void chbIsRunning_Click(object sender, RoutedEventArgs e) { e.Handled = true; CheckBox chb = (CheckBox)sender; ConditionOrderField cof = chb.DataContext as ConditionOrderField; cof.IsRunning = (bool)chb.IsChecked; switch (cof.ConOrderType) { case ConditionOrderType.价格单: if (cof.IsRunning) { cof.TradeApi = Body.trdApi; Body.mktApi.OnTick += cof.Run_PriceConditionOrder; } else { Body.mktApi.OnTick -= cof.Run_PriceConditionOrder; cof.TradeApi = null; } break; case ConditionOrderType.时间单: break; case ConditionOrderType.持仓单: break; default: break; } }
//增加或者减少Order的手数 private void btn_ChangeOrderQty(object sender, RoutedEventArgs e) { e.Handled = true; Button btn = (Button)sender; ConditionOrderField cof = btn.DataContext as ConditionOrderField; StackPanel panel = (StackPanel)btn.Parent; TextBox tbx = (TextBox)panel.FindName("tbxQty"); if (tbx != null) { int Qty = cof.VolumeTotalOriginal; if (btn.Name == "btnAddOrderQty") { Qty++; } else { if (Qty > 0) { Qty--; } } cof.VolumeTotalOriginal = Qty; tbx.Text = Qty.ToString(); } }
//条件单创建 private void btnConditionOrderCreate_Click(object sender, RoutedEventArgs e) { this.CheckOrder(); ConditionOrderField cof = new ConditionOrderField(this._mwOF); cof.TargetPrice = this._mwOF.LimitPrice; //cof.OrderRef = string.Format("{0:000000}{1:000000}", Body.trdApi.DicOrderField.Count, Interlocked.Add(ref Body.nOrders, 1) % 1000000); lock (Body.OcAllConditionOrderField) { Body.OcAllConditionOrderField.Add(cof); } }
//删除条件单板上显示的报单 private void btnRemoveConditionOrder_Click(object sender, RoutedEventArgs e) { Button btn = (Button)sender; ConditionOrderField cof = (ConditionOrderField)btn.DataContext; //先解除外部绑定 Body.mktApi.OnTick -= cof.Run_PriceConditionOrder; //再将运行状态设置为否 cof.IsRunning = false; //从OC中删除cof if (cof == null || Body.OcAllConditionOrderField.Count <= 0) { return; } Body.OcAllConditionOrderField.Remove(cof); //GC cof = null; }