//改变目标价
        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();
            }
        }
예제 #4
0
        //条件单创建
        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;
        }