示例#1
0
        public ActionResult Create(string kindSN, string varietyName)
        {
            try
            {
                if (kindSN.Equals(string.Empty))
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                }

                if (varietyName.Equals(string.Empty))
                {
                    ModelState.AddModelError("varietyName", "請輸入品種");
                }

                if (!ModelState.IsValid)
                {
                    return(View());
                }

                int kSN = 0;
                int.TryParse(kindSN.ToString(), out kSN);

                Comm_Variety variety = new Comm_Variety();
                variety.varietyName = varietyName;
                variety.kindSN      = kSN;

                VarietyModel.Create(variety);

                return(RedirectToAction("Index", new { kindSN = kindSN }));
            }
            catch
            {
                return(View());
            }
        }
示例#2
0
        public ActionResult Edit(int?SN, string varietyName)
        {
            try
            {
                if (SN == null)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                }

                if (varietyName.Equals(string.Empty))
                {
                    ModelState.AddModelError("varietyName", "請輸入品種");
                }

                Comm_Variety variety = VarietyModel.getVarietyBySN(Convert.ToInt32(SN));

                if (!ModelState.IsValid)
                {
                    return(View(variety));
                }

                variety.varietyName = varietyName;

                VarietyModel.Update(variety);

                return(RedirectToAction("Index", new { kindSN = variety.kindSN }));
            }
            catch
            {
                return(View());
            }
        }
示例#3
0
        // GET: Variety
        public ActionResult Index(int kindSN, int page = 1, int pageSize = 10)
        {
            List <Comm_Variety> varietyList = VarietyModel.getVarietyListByKindSN(kindSN);
            var result = varietyList.OrderBy(o => o.SN).ToPagedList();

            ViewBag.kindSN = kindSN;

            return(View(result));
        }
 public void ExecuteTradeData(object para)
 {
     try
     {
         TodayTraderModel ttm = para as TodayTraderModel;
         if (TodayTraderViewModels.Instance().TodayTraderList.FirstOrDefault(x => x.TradeNumber == ttm.trade_id) != null)
         {
             return;
         }
         if (ttm.bLast)
         {
             Dictionary <string, TodayTraderModelViewModel> dicTTVM = new Dictionary <string, TodayTraderModelViewModel>();
             foreach (TodayTraderModelViewModel item in TodayTraderViewModels.Instance().TodayTraderList)
             {
                 if (!dicTTVM.ContainsKey(item.ContractCode + item.Direction + item.OpenOffset))
                 {
                     TodayTraderModelViewModel ttmvm = item.Clone(item);
                     ttmvm.AllPrice = item.TradePrice * item.TradeVolume;
                     dicTTVM.Add(item.ContractCode + item.Direction + item.OpenOffset, ttmvm);
                 }
                 else
                 {
                     dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].AllPrice    = dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].AllPrice + item.TradePrice * item.TradeVolume;
                     dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradeVolume = dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradeVolume + item.TradeVolume;
                     dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradePrice  = dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].AllPrice / dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradeVolume;
                 }
             }
             foreach (TodayTraderModelViewModel item in dicTTVM.Values)
             {
                 TodayTraderViewModels.Instance().TodayTraderListALL.Add(item);
             }
             return;
         }
         VarietyModel vm     = null;
         string[]     values = ttm.contract_code.Split(' ');
         if (values.Length == 3)
         {
             string varietie = values[1];
             if (ContractVariety.Varieties.ContainsKey(varietie))
             {
                 vm = ContractVariety.Varieties[varietie];
             }
             if (vm != null)
             {
                 ttm.precision = vm.precision;
             }
         }
         //添加持仓集合
         TodayTraderViewModels.Instance().TodayTraderList.Add(new TodayTraderModelViewModel(ttm));
     }
     catch (Exception ex)
     {
         LogHelper.Info(ex.ToString());
     }
 }
示例#5
0
        // GET: Variety/Edit/5
        public ActionResult Edit(int?SN)
        {
            if (SN == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            Comm_Variety variety = VarietyModel.getVarietyBySN(Convert.ToInt32(SN));

            ViewBag.kindSN = variety.kindSN;

            return(View(variety));
        }
        public void ExecuteDelegationData(object para)
        {
            try
            {
                DelegationModel      rtm  = para as DelegationModel;
                OrderCancelViewModel ocvm = OrderCancelViewModel.Instance();
                if (ocvm.Delegations.FirstOrDefault(x => x.OrderId == rtm.order_id) != null)
                {
                    return;
                }
                if (rtm.bLast)
                {
                    //PositionViewModel.Instance().JSAbleVolume();
                    TransactionViewModel.Instance().FigureUpNum(TransactionViewModel.Instance()._futures);
                    return;
                }
                VarietyModel vm     = null;
                string[]     values = rtm.contract_code.Split(' ');
                if (values.Length == 3)
                {
                    string varietie = values[1];
                    if (ContractVariety.Varieties.ContainsKey(varietie))
                    {
                        vm = ContractVariety.Varieties[varietie];
                    }
                    if (vm != null)
                    {
                        rtm.precision = vm.precision;
                    }
                }


                DelegationModelViewModel dmvm = new DelegationModelViewModel(rtm);

                ocvm.Delegations.Add(dmvm);
                if (rtm.order_status == (int)DeleteType.CreateSuccess || rtm.order_status == (int)DeleteType.PortionTakeEffect)
                {
                    ocvm.KCDelegations.Add(dmvm);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Info(ex.ToString());
            }
        }
        public void ExecutePlaceOrderData(object para)
        {
            try
            {
                DelegationModel rtm = para as DelegationModel;
                //添加持仓集合
                if (!rtm.bLast)
                {
                    VarietyModel vm     = null;
                    string[]     values = rtm.contract_id.Split(' ');
                    if (values.Length == 3)
                    {
                        string varietie = values[1];
                        if (ContractVariety.Varieties.ContainsKey(varietie))
                        {
                            vm = ContractVariety.Varieties[varietie];
                        }
                        if (vm != null)
                        {
                            rtm.precision = vm.precision;
                        }
                    }
                }
                if (OrderCancelViewModel.Instance().Delegations.FirstOrDefault(x => x.OrderId == rtm.order_id) == null)
                {
                    OrderCancelViewModel.Instance().Delegations.Add(new DelegationModelViewModel(rtm));
                    LogHelper.Info("4002 增加" + rtm.contract_code + ":" + rtm.direction + ":" + rtm.open_offset + ":" + rtm.order_status);
                }

                if (CommParameterSetting.MessageAlert.OrderAlert == "窗口提示")
                {
                    MessageBox.Show(rtm.contract_id + " 委托创建成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (CommParameterSetting.MessageAlert.OrderAlert == "声音提示")
                {
                    SoundPlayerHelper.Play();
                }
            }
            catch (Exception ex)
            {
                LogHelper.Info(ex.ToString());
            }
        }
        public void ExecuteRevcVarietyData(object para)
        {
            VarietyModel vm = para as VarietyModel;

            if (!loginvm.LoginBtnIsEnabled)
            {
                loginvm.LoginStatus = "正在查询品种信息...";
            }
            if (vm.bLast)
            {
                loginvm.ReqParities();
                return;
            }
            string key = vm.product_code;

            if (!ContractVariety.Varieties.ContainsKey(key))
            {
                ContractVariety.Varieties.Add(key, vm);
            }
        }
        public async Task <IActionResult> Edit(int id, [Bind("Item")] CoffeeViewModel cvm)
        {
            if (id != cvm.Item.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    CountryModel newCountry = _context.Countries.FirstOrDefault(c => c.Name == cvm.Item.Country.Name) ?? new CountryModel(null, cvm.Item.Country.Name);
                    if (newCountry.Id == null)
                    {
                        _context.Add(newCountry);
                    }
                    VarietyModel newVariety = _context.Varieties.FirstOrDefault(v => v.Name == cvm.Item.Variety.Name) ?? new VarietyModel(null, cvm.Item.Variety.Name);
                    if (newVariety.Id == null)
                    {
                        _context.Add(newVariety);
                    }
                    cvm.Item.Country = newCountry;
                    cvm.Item.Variety = newVariety;
                    _context.Update(cvm.Item);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!CoffeeModelExists(cvm.Item.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(cvm));
        }
示例#10
0
        public JsonResult getVarietyList(int kindSN)
        {
            List <Comm_Variety> varietyList = new List <Comm_Variety>();

            if (kindSN != 0)
            {
                varietyList = VarietyModel.getVarietyListByKindSN(kindSN);
                varietyList.Insert(0, new Comm_Variety()
                {
                    SN = 0, varietyName = "品種"
                });
            }
            else
            {
                varietyList.Add(new Comm_Variety()
                {
                    SN = 0, varietyName = "品種"
                });
            }

            return(Json(varietyList, JsonRequestBehavior.AllowGet));
        }
        public async Task <IActionResult> Create([Bind("Item")] CoffeeViewModel cvm)
        {
            if (ModelState.IsValid)
            {
                CountryModel newCountry = _context.Countries.FirstOrDefault(c => c.Name == cvm.Item.Country.Name) ?? new CountryModel(null, cvm.Item.Country.Name);
                if (newCountry.Id == null)
                {
                    _context.Add(newCountry);
                }
                VarietyModel newVariety = _context.Varieties.FirstOrDefault(v => v.Name == cvm.Item.Variety.Name) ?? new VarietyModel(null, cvm.Item.Variety.Name);
                if (newVariety.Id == null)
                {
                    _context.Add(newVariety);
                }
                cvm.Item.Country = newCountry;
                cvm.Item.Variety = newVariety;
                _context.Add(cvm.Item);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(cvm));
        }
示例#12
0
        // GET: Pet/Edit/5
        public ActionResult Edit(int?SN)
        {
            if (SN == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            Comm_Pet pet = PetModel.getPetBySN(Convert.ToInt32(SN));

            if (pet == null)
            {
                return(HttpNotFound());
            }

            List <Comm_Customer> customerList = CustomerModel.getCustomerList();
            List <Comm_Kind>     kindList     = KindModel.getKindList();
            List <Comm_Variety>  varietyList  = VarietyModel.getVarietyListByKindSN(pet.kindSN);

            ViewBag.customerSN = new SelectList(customerList, "SN", "customerName", pet.customerSN);
            ViewBag.kindSN     = new SelectList(kindList, "SN", "kindName", pet.kindSN);
            ViewBag.varietySN  = new SelectList(varietyList, "SN", "varietyName", pet.varietySN);

            return(View(pet));
        }
示例#13
0
        private CheckFullStopViewModel(PotionDetailModelViewModel pmvm)
        {
            _PositionModelViewModel = pmvm;
            ContractCode            = pmvm.ContractCode;
            _AllNum   = _PositionModelViewModel.PositionVolume;
            Direction = pmvm.Direction == "B" ? " (买入,投机) " : " (卖出,投机) ";


            VarietyModel vm = null;

            string[] values = pmvm.ContractCode.Split(' ');
            if (values.Length != 3)
            {
                return;
            }
            string varietie = values[1];

            if (ContractVariety.Varieties.ContainsKey(varietie))
            {
                vm = ContractVariety.Varieties[varietie];
            }
            if (vm == null)
            {
                return;
            }
            Increment = vm.tick_size;
            length    = vm.precision;
            ////发送命令
            //ReqPotion rp = new ReqPotion();
            //rp.cmdcode = RequestCmdCode.SelectStopLoss;
            //rp.content = new ReqLoginName() { user_id = UserInfoHelper.UserId };
            //ScoketManager.GetInstance().SendTradeWSInfo(JsonConvert.SerializeObject(rp));
            if (ContractVariety.CFSmvmList.ContainsKey(_PositionModelViewModel.ContractId + _PositionModelViewModel.Direction))
            {
                foreach (var item in ContractVariety.CFSmvmList[_PositionModelViewModel.ContractId + _PositionModelViewModel.Direction])
                {
                    item.Increment = Increment;
                    item.Precision = length;
                    CheckFullStopModel cfsm = new CheckFullStopModel();
                    cfsm.contract_code   = _PositionModelViewModel.ContractCode;
                    cfsm.contract_id     = _PositionModelViewModel.ContractId;
                    cfsm.create_date     = DateTime.Now.ToString("yyyy-MM-dd");
                    cfsm.create_time     = DateTime.Now.ToString("HH:mm:ss");
                    cfsm.user_id         = UserInfoHelper.UserId;
                    cfsm.order_volume    = _PositionModelViewModel.PositionVolume;
                    cfsm.resource        = (int)OperatorTradeType.OPERATOR_TRADE_PC;
                    cfsm.direction       = item.Direction;
                    cfsm.float_loss      = item.FloatLoss;
                    cfsm.float_loss_flag = item.FloatLossFlag;
                    cfsm.open_offset     = item.OpenOffset;
                    cfsm.order_volume    = item.OrderVolume;

                    CheckFullStopModelViewModel cfsvm = new CheckFullStopModelViewModel(cfsm);
                    cfsvm.Increment        = item.Increment;
                    cfsvm.Precision        = item.Precision;
                    cfsvm.Direction        = item.Direction;
                    cfsvm.MaxNum           = item.MaxNum;
                    cfsvm.StopprofitPrice  = item.StopprofitPrice;
                    cfsvm.StoplossId       = item.StoplossId;
                    cfsvm.TrrigerCondition = item.TrrigerCondition;
                    cfsvm.TrrigerPrice     = item.TrrigerPrice;
                    cfsvm.FloatLoss        = item.FloatLoss;
                    cfsvm.StoplossPrice    = item.StoplossPrice;
                    cfsvm.CreateDate       = item.CreateDate;
                    cfsvm.OrderVolume      = item.OrderVolume;
                    CFSMVMList.Add(cfsvm);
                }
            }
            if (CFSMVMList.Count > 0)
            {
                IsHaveData = true;
            }
            AddData();
        }
示例#14
0
        /// <summary>
        /// 提供行情信息 显示要交易的期货行情的信息
        /// </summary>
        /// <param name="futures"></param>
        public void SendMarket(QuotationEntity futures)
        {
            if (futures == null)
            {
                return;
            }
            if (PMList.Count == 0)
            {
                return;
            }
            List <PotionDetailModelViewModel> items = PMList.Where(x => x.ContractId == futures.cd).ToList();
            VarietyModel  vm = null;
            ParitiesModel pm = null;

            lock (DetPMList)
            {
                foreach (PotionDetailModelViewModel itemde in DetPMList)
                {
                    if (itemde.ContractCode == futures.cd)
                    {
                        string[] values = futures.cd.Split(' ');
                        if (values.Length != 3)
                        {
                            return;
                        }
                        string varietie = values[1];
                        if (ContractVariety.Varieties.ContainsKey(varietie))
                        {
                            vm = ContractVariety.Varieties[varietie];
                        }
                        if (vm == null)
                        {
                            continue;
                        }
                        if (itemde.Direction == "B")
                        {
                            if (futures.lp > 0)
                            {
                                itemde.PositionProfitLoss = (futures.lp - itemde.OpenPrice) * itemde.PositionVolume * vm.multiple;//合约乘数
                            }
                            else if (futures.lp == 0 && futures.pslp > 0)
                            {
                                itemde.PositionProfitLoss = (futures.pslp - itemde.OpenPrice) * itemde.PositionVolume * vm.multiple;//合约乘数
                            }
                            else if (futures.lp == 0 && futures.pslp == 0)
                            {
                                continue;
                            }
                        }
                        else
                        {
                            if (futures.lp > 0)
                            {
                                itemde.PositionProfitLoss = (itemde.OpenPrice - futures.lp) * itemde.PositionVolume * vm.multiple;//合约乘数
                            }
                            else if (futures.lp == 0 && futures.pslp > 0)
                            {
                                itemde.PositionProfitLoss = (itemde.OpenPrice - futures.pslp) * itemde.PositionVolume * vm.multiple;//合约乘数
                            }
                            else if (futures.lp == 0 && futures.pslp == 0)
                            {
                                continue;
                            }
                        }
                    }
                }
                if (items != null)
                {
                    foreach (var item in items)
                    {
                        string[] values = futures.cd.Split(' ');
                        if (values.Length != 3)
                        {
                            return;
                        }
                        string varietie = values[1];
                        if (ContractVariety.Varieties.ContainsKey(varietie))
                        {
                            vm = ContractVariety.Varieties[varietie];
                        }
                        if (vm == null)
                        {
                            return;
                        }

                        //  if (item.Direction == "B")
                        item.PositionProfitLoss = Math.Round(DetPMList.Where(x => x.ContractId == item.ContractId && x.Direction == item.Direction).Sum(x => x.PositionProfitLoss), vm.precision);//合约乘数
                        if (ContractVariety.Parities.ContainsKey(vm.currency_code))
                        {
                            pm = ContractVariety.Parities[vm.currency_code];
                        }
                        if (pm == null)
                        {
                            return;
                        }
                        // if (item.Direction == "B")
                        item.PositionProfitLossJB = DetPMList.Where(x => x.ContractId == item.ContractId && x.Direction == item.Direction).Sum(x => x.PositionProfitLoss) * pm.exchange_rate; //合约乘数*汇率
                                                                                                                                                                                              // item.PositionProfitLossJB = (item.OpenPrice - futures.lastPrice) * item.PositionVolume * vm.multiple * pm.exchange_rate;//合约乘数*汇率
                    }
                    CommParameterSetting.StartAutoStopLoss(futures);
                }
            }
        }
        /// <summary>
        /// 触发自动止盈止损
        /// </summary>
        public static void StartAutoStopLoss(QuotationEntity futures)
        {
            if (ContractVariety.ContracPostionID.Count == 0)
            {
                return;
            }
            if (ContractVariety.ContracPostionID.ContainsKey(futures.cd))
            {
                //如果自动止盈止损包含此合约号
                //循环查询持仓明细,进行比较
                foreach (string value in ContractVariety.ContracPostionID[futures.cd])
                {
                    PotionDetailModelViewModel item = PositionAllViewModel.Instance().DetPMList.FirstOrDefault(x => x.PsitionId == value);
                    if (item != null)
                    {
                        AutoStopLossModel aslm = CommParameterSetting.AutoStopLossModel.FirstOrDefault(x => x.Direction == item.Direction && x.Agreement == item.ContractId);
                        if (aslm == null)
                        {
                            break;
                        }
                        string[] VarietiesKey = futures.cd.Split(' ');
                        if (VarietiesKey.Length != 3)
                        {
                            return;
                        }
                        string       varietie = VarietiesKey[1];
                        VarietyModel vm       = null;
                        if (ContractVariety.Varieties.ContainsKey(varietie))
                        {
                            vm = ContractVariety.Varieties[varietie];
                        }
                        if (vm == null)
                        {
                            break;
                        }

                        if (aslm.StopLossPotion > 0)
                        {
                            //止损价》最新价触发止损
                            if (item.Direction == "B")
                            {
                                if (ContractVariety.PostionPrice[item.PsitionId].LossPrice >= futures.lp)
                                {
                                    //平仓
                                    if (!PostinIds.Contains(item.PsitionId))
                                    {
                                        OpenCloseing(item, 0);
                                        PostinIds.Add(item.PsitionId);
                                        int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "delete from AutoStopLoss where ContractID='" + item.ContractId + "' and PostionID='" + item.PsitionId + "';");

                                        LogHelper.Debug("买:持仓的止损价" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ": 行情最新价" + futures.lp);
                                        continue;
                                    }
                                }
                            }
                            else
                            {
                                if (ContractVariety.PostionPrice[item.PsitionId].LossPrice <= futures.lp)
                                {
                                    //平仓
                                    if (!PostinIds.Contains(item.PsitionId))
                                    {
                                        OpenCloseing(item, 0);
                                        PostinIds.Add(item.PsitionId);
                                        int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "delete from AutoStopLoss where ContractID='" + item.ContractId + "' and PostionID='" + item.PsitionId + "';");

                                        LogHelper.Debug("卖:持仓的止损价" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ": 行情最新价" + futures.lp);
                                        continue;
                                    }
                                }
                            }
                        }
                        if (aslm.StopProfitPotion > 0)
                        {
                            //止盈价《最新价触发止盈
                            if (item.Direction == "B")
                            {
                                if ((item.OpenPrice + aslm.StopProfitPotion * vm.tick_size) <= futures.lp)
                                {
                                    //平仓
                                    if (!PostinIds.Contains(item.PsitionId))
                                    {
                                        OpenCloseing(item, 0);
                                        PostinIds.Add(item.PsitionId);
                                        int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "delete from AutoStopLoss where ContractID='" + item.ContractId + "' and PostionID='" + item.PsitionId + "';");

                                        LogHelper.Debug("买:持仓的止盈价" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ": 行情最新价" + futures.lp);
                                        continue;
                                    }
                                }
                            }
                            else
                            {
                                if ((item.OpenPrice - aslm.StopProfitPotion * vm.tick_size) >= futures.lp)
                                {
                                    //平仓
                                    if (!PostinIds.Contains(item.PsitionId))
                                    {
                                        OpenCloseing(item, 0);
                                        PostinIds.Add(item.PsitionId);
                                        int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "delete from AutoStopLoss where ContractID='" + item.ContractId + "' and PostionID='" + item.PsitionId + "';");

                                        LogHelper.Debug("卖:持仓的止盈价" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ": 行情最新价" + futures.lp);
                                        continue;
                                    }
                                }
                            }
                        }
                        if (aslm.FloatingProfitAndLoss > 0 && aslm.StopLossPotion > 0)
                        {
                            if (item.Direction == "B")
                            {
                                double cha = futures.lp - ContractVariety.PostionPrice[item.PsitionId].NewPrice;
                                if (cha > aslm.FloatingProfitAndLoss * vm.tick_size)
                                {
                                    int bs = (int)(cha / aslm.FloatingProfitAndLoss * vm.tick_size);
                                    ContractVariety.PostionPrice[item.PsitionId].NewPrice  = ContractVariety.PostionPrice[item.PsitionId].NewPrice + (bs * (aslm.FloatingProfitAndLoss * vm.tick_size));
                                    ContractVariety.PostionPrice[item.PsitionId].LossPrice = ContractVariety.PostionPrice[item.PsitionId].LossPrice + (bs * (aslm.FloatingProfitAndLoss * vm.tick_size));
                                    // 修改数据库中数据
                                    int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "UPDATE AutoStopLoss set LossPrice=" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ",newprice=" + ContractVariety.PostionPrice[item.PsitionId].NewPrice + " WHERE UserID='" + UserInfoHelper.UserId + "' and PostionID='" + item.PsitionId + "' and ContractID='" + item.ContractId + "';");
                                    LogHelper.Debug("买:更新止损价:" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ":止损价基数" + ContractVariety.PostionPrice[item.PsitionId].NewPrice);
                                }
                            }
                            else
                            {
                                double cha = ContractVariety.PostionPrice[item.PsitionId].NewPrice - futures.lp;//买就是反过来减
                                if (cha > aslm.FloatingProfitAndLoss * vm.tick_size)
                                {
                                    int bs = (int)(cha / aslm.FloatingProfitAndLoss * vm.tick_size);
                                    ContractVariety.PostionPrice[item.PsitionId].NewPrice  = ContractVariety.PostionPrice[item.PsitionId].NewPrice - (bs * (aslm.FloatingProfitAndLoss * vm.tick_size));
                                    ContractVariety.PostionPrice[item.PsitionId].LossPrice = ContractVariety.PostionPrice[item.PsitionId].LossPrice - (bs * (aslm.FloatingProfitAndLoss * vm.tick_size));
                                    // 修改数据库中数据
                                    int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "UPDATE AutoStopLoss set LossPrice=" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ",newprice=" + ContractVariety.PostionPrice[item.PsitionId].NewPrice + " WHERE UserID='" + UserInfoHelper.UserId + "' and PostionID='" + item.PsitionId + "' and ContractID='" + item.ContractId + "';");
                                    LogHelper.Debug("卖:更新止损价:" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ":止损价基数" + ContractVariety.PostionPrice[item.PsitionId].NewPrice);
                                }
                            }
                        }
                    }
                }
            }
        }
        private ConditionBillViewModel(ConditionBillModelViewModel condtion)
        {
            //需要合约号 下单的类型和价格 以及数量
            _IsEnabled   = false;
            ContractCode = condtion.ContractCode;
            VarietyModel vm = null;

            string[] values = condtion.ContractCode.Split(' ');
            if (values.Length != 3)
            {
                return;
            }
            string varietie = values[1];

            if (ContractVariety.Varieties.ContainsKey(varietie))
            {
                vm = ContractVariety.Varieties[varietie];
            }
            if (vm == null)
            {
                return;
            }
            Increment = vm.tick_size;
            lend      = vm.precision;
            typePrice = condtion.PriceType;
            if (typePrice == "M")
            {
                IsTypePrice   = Visibility.Visible;
                IsPrice       = Visibility.Collapsed;
                Price         = 0;
                PriceTypeBill = "市价";
                _priceType    = "市价";
            }
            else if (typePrice == "R")
            {
                Price         = 0;
                PriceTypeBill = "对手价";
                _priceType    = "对手价";
                IsTypePrice   = Visibility.Visible;
                IsPrice       = Visibility.Collapsed;
            }
            else
            {
                Price       = condtion.OrderPrice;
                typePrice   = "L";
                IsTypePrice = Visibility.Collapsed;
                IsPrice     = Visibility.Visible;
            }

            OrderPrice  = condtion.TrrigerPrice;
            OrderPrice3 = condtion.TrrigerPrice;
            Num         = condtion.OrderVolume;
            //触发的类型
            KeyValue kv0 = new KeyValue()
            {
                Id = 0, Value = "最新价"
            };
            KeyValue kv1 = new KeyValue()
            {
                Id = 1, Value = "买一价"
            };
            KeyValue kv2 = new KeyValue()
            {
                Id = 2, Value = "卖一价"
            };

            PriceList.Add(kv0);
            PriceList.Add(kv1);
            PriceList.Add(kv2);
            PriceItem = kv0;
            KeyValue ttype0 = new KeyValue()
            {
                Id = 0, Value = ">="
            };
            KeyValue ttype1 = new KeyValue()
            {
                Id = 1, Value = "<="
            };

            TrrigerConditionItem = ttype0;
            TrrigerCondition.Add(ttype0);
            TrrigerCondition.Add(ttype1);
            KeyValue kv03 = new KeyValue()
            {
                Id = 0, Value = "最新价"
            };
            KeyValue kv13 = new KeyValue()
            {
                Id = 1, Value = "买一价"
            };
            KeyValue kv23 = new KeyValue()
            {
                Id = 2, Value = "卖一价"
            };

            PriceList3.Add(kv03);
            PriceList3.Add(kv13);
            PriceList3.Add(kv23);
            PriceItem3 = kv03;
            KeyValue ttype03 = new KeyValue()
            {
                Id = 0, Value = ">="
            };
            KeyValue ttype13 = new KeyValue()
            {
                Id = 1, Value = "<="
            };

            IsFirst = true;
            TrrigerCondition3.Add(ttype03);
            TrrigerCondition3.Add(ttype13);
            TrrigerConditionItem3 = ttype03;

            if (condtion.Direction == "B")
            {
                IsBuy  = true;
                IsSell = false;
            }
            else if (condtion.Direction == "S")
            {
                IsBuy  = false;
                IsSell = true;
            }
            if (condtion.OpenOffset == (int)OffsetType.OFFSET_OPEN)
            {
                IsOpen     = true;
                IsCloseing = false;
            }
            else if (condtion.OpenOffset == (int)OffsetType.OFFSET_COVER)
            {
                IsCloseing = true;
                IsOpen     = false;
            }
            if (condtion.ConditionType == (int)YunConditionType.Y_PRICE)
            {
                IsFirst              = true;
                IsSecond             = false;
                IsThird              = false;
                TrrigerConditionItem = TrrigerCondition[condtion.TrrigerCondition];
                PriceItem            = PriceList[condtion.TrrigerPriceType];
            }
            else if (condtion.ConditionType == (int)YunConditionType.Y_TIME)
            {
                IsFirst     = false;
                IsSecond    = true;
                IsThird     = false;
                TrrigerTime = condtion.TrrigerContime; //trriger_contime
            }
            else if (condtion.ConditionType == (int)YunConditionType.Y_TIMEPRICE)
            {
                IsFirst              = false;
                IsSecond             = false;
                IsThird              = true;
                TrrigerConditionItem = TrrigerCondition3[condtion.TrrigerCondition];
                PriceItem3           = PriceList3[condtion.TrrigerPriceType];
                TrrigerTime3         = condtion.TrrigerContime;
            }
            Upatatecondtion = condtion;
        }
        private ConditionBillViewModel(string contractCode, double price, string pricetype, int num)
        {
            _IsEnabled = true;
            //需要合约号 下单的类型和价格 以及数量
            ContractCode = contractCode;
            VarietyModel vm = null;

            string[] values = contractCode.Split(' ');
            if (values.Length != 3)
            {
                return;
            }
            string varietie = values[1];

            if (ContractVariety.Varieties.ContainsKey(varietie))
            {
                vm = ContractVariety.Varieties[varietie];
            }
            if (vm == null)
            {
                return;
            }
            Increment = vm.tick_size;
            lend      = vm.precision;
            if (pricetype == "市价")
            {
                IsTypePrice = Visibility.Visible;
                IsPrice     = Visibility.Collapsed;
                Price       = 0;
                typePrice   = "M";
            }
            else if (pricetype == "对手价")
            {
                Price       = 0;
                typePrice   = "R";
                IsTypePrice = Visibility.Visible;
                IsPrice     = Visibility.Collapsed;
            }
            else
            {
                Price       = price;
                typePrice   = "L";
                IsTypePrice = Visibility.Collapsed;
                IsPrice     = Visibility.Visible;
            }
            PriceTypeBill = pricetype;
            _priceType    = pricetype;
            OrderPrice    = price;
            OrderPrice3   = price;
            Num           = num;
            //触发的类型
            KeyValue kv0 = new KeyValue()
            {
                Id = 0, Value = "最新价"
            };
            KeyValue kv1 = new KeyValue()
            {
                Id = 1, Value = "买一价"
            };
            KeyValue kv2 = new KeyValue()
            {
                Id = 2, Value = "卖一价"
            };

            PriceList.Add(kv0);
            PriceList.Add(kv1);
            PriceList.Add(kv2);
            PriceItem = kv0;
            KeyValue ttype0 = new KeyValue()
            {
                Id = 0, Value = ">="
            };
            KeyValue ttype1 = new KeyValue()
            {
                Id = 1, Value = "<="
            };

            TrrigerConditionItem = ttype0;
            TrrigerCondition.Add(ttype0);
            TrrigerCondition.Add(ttype1);
            KeyValue kv03 = new KeyValue()
            {
                Id = 0, Value = "最新价"
            };
            KeyValue kv13 = new KeyValue()
            {
                Id = 1, Value = "买一价"
            };
            KeyValue kv23 = new KeyValue()
            {
                Id = 2, Value = "卖一价"
            };

            PriceList3.Add(kv03);
            PriceList3.Add(kv13);
            PriceList3.Add(kv23);
            PriceItem3 = kv03;
            KeyValue ttype03 = new KeyValue()
            {
                Id = 0, Value = ">="
            };
            KeyValue ttype13 = new KeyValue()
            {
                Id = 1, Value = "<="
            };

            IsFirst = true;
            TrrigerCondition3.Add(ttype03);
            TrrigerCondition3.Add(ttype13);
            TrrigerConditionItem3 = ttype03;
        }
        public void ExecuteSendPlaceOrderData(object para)
        {
            try
            {
                DelegationModel rtm    = para as DelegationModel;
                VarietyModel    vm     = null;
                string[]        values = rtm.contract_code.Split(' ');
                if (values.Length == 3)
                {
                    string varietie = values[1];
                    if (ContractVariety.Varieties.ContainsKey(varietie))
                    {
                        vm = ContractVariety.Varieties[varietie];
                    }
                    if (vm != null)
                    {
                        rtm.precision = vm.precision;
                    }
                }

                DelegationModelViewModel dmvm = OrderCancelViewModel.Instance().Delegations.FirstOrDefault(x => x.OrderId == rtm.order_id);
                if (dmvm == null)
                {
                    return;
                    //OrderCancelViewModel.Instance().Delegations.Add(new DelegationModelViewModel(rtm));
                }
                //DelegationModelViewModel dmvmisHave = OrderCancelViewModel.Instance().Delegations.FirstOrDefault(x => x.OrderId == rtm.order_id && x.OrderStatus == (int)DeleteType.CreateSuccess);
                ////if (dmvmisHave != null)
                //{
                //    return;
                //    //OrderCancelViewModel.Instance().Delegations.Add(new DelegationModelViewModel(rtm));
                //}
                if (rtm.order_status == (int)DeleteType.CreateSuccess || rtm.order_status == (int)DeleteType.PortionTakeEffect)
                {
                    DelegationModelViewModel dmvm1 = OrderCancelViewModel.Instance().KCDelegations.FirstOrDefault(x => x.OrderId == rtm.order_id && rtm.user_id == UserInfoHelper.UserId);
                    if (dmvm1 == null)
                    {
                        OrderCancelViewModel.Instance().KCDelegations.Add(new DelegationModelViewModel(rtm));
                        LogHelper.Info("4003  增加 可撤" + rtm.contract_code + ":" + rtm.direction + ":" + rtm.open_offset + ":" + rtm.order_status);
                    }

                    dmvm.OrderStatus = rtm.order_status;
                    //详细状态
                    dmvm.FailMsg = rtm.fail_msg;
                }
                else
                {
                    dmvm.LeftVolume  = dmvm.OrderVolume - rtm.trade_volume;
                    dmvm.TradeVolume = rtm.trade_volume;
                    dmvm.OrderStatus = rtm.order_status;
                    dmvm.LeftVolume  = rtm.left_volume;

                    //详细状态
                    dmvm.FailMsg = rtm.fail_msg;
                    DelegationModelViewModel dmvm1 = OrderCancelViewModel.Instance().KCDelegations.FirstOrDefault(x => x.OrderId == rtm.order_id && rtm.user_id == UserInfoHelper.UserId);

                    if (dmvm1 != null)
                    {
                        OrderCancelViewModel.Instance().KCDelegations.Remove(dmvm1);
                        LogHelper.Info("4003  移除 可撤" + rtm.contract_code + ":" + rtm.direction + ":" + rtm.open_offset + ":" + rtm.order_status);
                    }
                }

                DelegationModelViewModel tem1 = OrderCancelViewModel.Instance().KCDelegations.FirstOrDefault(x => x.OrderId == rtm.order_id && rtm.user_id == UserInfoHelper.UserId);
                if (tem1 != null)
                {
                    tem1.LeftVolume  = tem1.OrderVolume - rtm.trade_volume;
                    tem1.TradeVolume = rtm.trade_volume;
                    tem1.OrderStatus = rtm.order_status;
                    //详细状态
                    dmvm.FailMsg = rtm.fail_msg;
                }
                if (rtm.order_status == (int)DeleteType.UnTakeEffecUserCannel)
                {
                    if (CommParameterSetting.MessageAlert.RevokeAlert == "窗口提示")
                    {
                        MessageBox.Show(rtm.contract_id + " 委托撤单成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    else if (CommParameterSetting.MessageAlert.RevokeAlert == "声音提示")
                    {
                        SoundPlayerHelper.Play();
                    }
                }
                TransactionViewModel.Instance().SelectNumExecuteChanged();
            }
            catch (Exception ex)
            {
                LogHelper.Info(ex.ToString());
            }
        }
        public void ExecutePositionInfoData(object para)
        {
            try
            {
                PotionModel                rtm       = para as PotionModel;
                PositionAllViewModel       pavm      = PositionAllViewModel.Instance();
                PositionViewModel          pvm       = PositionViewModel.Instance();
                PotionDetailModelViewModel pdmvmtemp = pavm.DetPMList.FirstOrDefault(x => x.PsitionId == rtm.position_id);

                if (rtm.position_volume == 0)
                {
                    if (pdmvmtemp != null)
                    {
                        pavm.DetPMList.Remove(pdmvmtemp);
                        LogHelper.Info("4007  移除 " + rtm.contract_code + ":" + rtm.direction);
                        pavm.PMList.Clear();
                        pvm.PMList.Clear();
                    }

                    int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "delete from AutoStopLoss where ContractID='" + rtm.contract_id + "' and PostionID='" + rtm.position_id + "';");
                }
                else
                {
                    if (pdmvmtemp != null)
                    {
                        pdmvmtemp.PositionVolume = rtm.position_volume;
                        pdmvmtemp.AbleVolume     = rtm.position_volume;
                        pdmvmtemp.UseMargin      = rtm.use_margin;
                        pdmvmtemp.SysUseMargin   = rtm.sys_margin;
                    }
                    else
                    {
                        PotionDetailModel pdm = new PotionDetailModel();
                        pdm.able_volume       = rtm.position_volume;
                        pdm.contract_code     = rtm.contract_code;
                        pdm.contract_id       = rtm.contract_id;
                        pdm.direction         = rtm.direction;
                        pdm.open_date         = rtm.position_date;
                        pdm.open_price        = rtm.position_price;
                        pdm.open_time         = rtm.position_time;
                        pdm.position_volume   = rtm.position_volume;
                        pdm.position_id       = rtm.position_id;
                        pdm.shadow_orderID    = rtm.shadow_orderID;
                        pdm.shadow_positionid = rtm.shadow_positionid;
                        pdm.shadow_tradeid    = rtm.shadow_tradeid;

                        pdm.trade_id   = "";
                        pdm.user_id    = rtm.user_id;
                        pdm.use_margin = rtm.use_margin;
                        pdm.sys_margin = rtm.sys_margin;
                        VarietyModel vm     = null;
                        string[]     values = pdm.contract_id.Split(' ');
                        if (values.Length == 3)
                        {
                            string varietie = values[1];
                            if (ContractVariety.Varieties.ContainsKey(varietie))
                            {
                                vm = ContractVariety.Varieties[varietie];
                            }
                            if (vm != null)
                            {
                                pdm.precision = vm.precision;
                            }
                        }

                        pdmvmtemp = new PotionDetailModelViewModel(pdm);
                        pavm.DetPMList.Add(pdmvmtemp);
                    }
                }
                if (ContractVariety.ContracPostionID.ContainsKey(rtm.contract_id))
                {
                    AutoStopLossModel aslm = CommParameterSetting.AutoStopLossModel.FirstOrDefault(x => x.Direction == rtm.direction && x.Agreement == rtm.contract_id);
                    if (aslm != null)
                    {
                        if (!ContractVariety.PostionPrice.ContainsKey(rtm.position_id))
                        {
                            ContractVariety.PostionPrice.Add(rtm.position_id, new AutoLossPrice());
                        }
                        string[] VarietiesKey = rtm.contract_id.Split(' ');
                        if (VarietiesKey.Length == 3)
                        {
                            string       varietie = VarietiesKey[1];
                            VarietyModel vm       = null;
                            if (ContractVariety.Varieties.ContainsKey(varietie))
                            {
                                vm = ContractVariety.Varieties[varietie];
                            }
                            if (vm != null)
                            {
                                if (rtm.direction == "B")
                                {
                                    ContractVariety.PostionPrice[rtm.position_id].LossPrice = rtm.position_price - aslm.StopLossPotion * vm.tick_size;
                                }
                                else
                                {
                                    ContractVariety.PostionPrice[rtm.position_id].LossPrice = rtm.position_price + aslm.StopLossPotion * vm.tick_size;
                                }
                                ContractVariety.PostionPrice[rtm.position_id].NewPrice = rtm.position_price;
                                if (!ContractVariety.ContracPostionID.ContainsKey(rtm.contract_id))
                                {
                                    ContractVariety.ContracPostionID.Add(rtm.contract_id, new List <string>());
                                }
                                ContractVariety.ContracPostionID[rtm.contract_id].Add(rtm.position_id);
                                int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "insert INTO AutoStopLoss VALUES('" + rtm.position_id + "','" + rtm.contract_id + "','" + UserInfoHelper.UserId + "'," + ContractVariety.PostionPrice[rtm.position_id].LossPrice + "," + ContractVariety.PostionPrice[rtm.position_id].NewPrice + ");");
                            }
                        }
                    }
                }
                PotionDetailModelViewModel[] temp = pavm.DetPMList.ToArray();
                //合约名加方向作为K
                Dictionary <string, PotionDetailModelViewModel> dicod = new Dictionary <string, PotionDetailModelViewModel>();

                foreach (PotionDetailModelViewModel item in temp)
                {
                    PotionDetailModelViewModel pm1 = item.Clone(item);
                    if (!dicod.Keys.Contains(pm1.ContractCode + pm1.Direction))
                    {
                        pm1.AllPrice = pm1.OpenPrice * pm1.PositionVolume;
                        dicod.Add(pm1.ContractCode + pm1.Direction, pm1);
                        //MainViewModel.GetInstance().SubscribedStocks.Add(pm1.ContractCode);
                    }
                    else
                    {
                        dicod[item.ContractCode + item.Direction].AbleVolume         = dicod[item.ContractCode + item.Direction].AbleVolume + item.AbleVolume;
                        dicod[item.ContractCode + item.Direction].PositionProfitLoss = dicod[item.ContractCode + item.Direction].PositionProfitLoss + item.PositionProfitLoss;
                        dicod[item.ContractCode + item.Direction].PositionVolume     = dicod[item.ContractCode + item.Direction].PositionVolume + item.PositionVolume;
                        dicod[item.ContractCode + item.Direction].UseMargin          = dicod[item.ContractCode + item.Direction].UseMargin + item.UseMargin;
                        dicod[item.ContractCode + item.Direction].SysUseMargin       = dicod[item.ContractCode + item.Direction].SysUseMargin + item.SysUseMargin;
                        dicod[item.ContractCode + item.Direction].AllPrice          += item.PositionVolume * item.OpenPrice;
                        dicod[item.ContractCode + item.Direction].OpenPrice          = dicod[item.ContractCode + item.Direction].AllPrice / dicod[item.ContractCode + item.Direction].PositionVolume;
                    }
                }
                if (dicod.Keys.Count > 0)
                {
                    pavm.PMList.Clear();
                    pvm.PMList.Clear();
                    foreach (PotionDetailModelViewModel item in dicod.Values)
                    {
                        pavm.PMList.Add(item);
                        pvm.PMList.Add(item);
                    }
                    pvm.SelectedItem = pvm.PMList.FirstOrDefault(x => x.ContractCode == rtm.contract_code && x.Direction == rtm.direction);
                }
                if (!MainViewModel.GetInstance().SubscribedStocks.Contains(rtm.contract_code))
                {
                    MainViewModel.GetInstance().SubscribedStocks.Add(rtm.contract_code);
                    ScoketManager.GetInstance().SendSubscribeInfo(7, rtm.contract_code);
                }

                foreach (string key in CommHelper.CFSmvmList.Keys)
                {
                    PotionDetailModelViewModel temp1 = PositionViewModel.Instance().PMList.FirstOrDefault(x => (x.ContractId + x.Direction) == key);
                    if (temp1 == null)
                    {
                        continue;
                    }
                    double maxprice  = 99999999999;
                    double minprice  = 0;
                    double maxprice1 = 0;
                    double minprice1 = 99999999999;
                    int    maxnum    = 0;
                    int    minnum    = 0;
                    foreach (CheckFullStopModelViewModel item in CommHelper.CFSmvmList[key])
                    {
                        if (item == null)
                        {
                            continue;
                        }
                        if (item.StoplossPrice > 0 || item.StopprofitPrice > 0)
                        {
                            if (item.Direction == "B")
                            {
                                if (item.StopprofitPrice > 0)
                                {
                                    if (item.StopprofitPrice < maxprice)
                                    {
                                        maxprice = item.StopprofitPrice;
                                        maxnum   = item.OrderVolume;
                                    }
                                    else if (item.StopprofitPrice == maxprice)
                                    {
                                        maxnum += item.OrderVolume;
                                    }
                                }
                                if (item.StoplossPrice > 0)
                                {
                                    if (item.StoplossPrice > minprice)
                                    {
                                        minprice = item.StoplossPrice;
                                        minnum   = item.OrderVolume;
                                    }
                                    else if (item.StoplossPrice == minprice)
                                    {
                                        minnum += item.OrderVolume;
                                    }
                                }
                                if (maxprice < 99999999999 && maxnum > 0)
                                {
                                    temp1.ProfitVolume = maxprice + "/" + maxnum;
                                }
                                if (minprice > 0 && minnum > 0)
                                {
                                    temp1.LossVolume = minprice + "/" + minnum;
                                }
                            }
                            else
                            {
                                if (item.StopprofitPrice > 0)
                                {
                                    if (item.StopprofitPrice > maxprice1)
                                    {
                                        maxprice1 = item.StopprofitPrice;
                                        maxnum    = item.OrderVolume;
                                    }
                                    else if (item.StopprofitPrice == maxprice1)
                                    {
                                        maxnum += item.OrderVolume;
                                    }
                                }
                                if (item.StoplossPrice > 0)
                                {
                                    if (item.StoplossPrice < minprice1)
                                    {
                                        minprice1 = item.StoplossPrice;
                                        minnum    = item.OrderVolume;
                                    }
                                    else if (item.StoplossPrice == minprice1)
                                    {
                                        minnum += item.OrderVolume;
                                    }
                                }
                                if (maxprice1 > 0 && maxnum > 0)
                                {
                                    temp1.ProfitVolume = maxprice1 + "/" + maxnum;
                                }
                                if (minprice < 99999999999 && minnum > 0)
                                {
                                    temp1.LossVolume = minprice1 + "/" + minnum;
                                }
                            }
                        }
                    }
                }
                TransactionViewModel.Instance().AgreementChangedExecuteChanged();
                if (pavm.PMList.FirstOrDefault(x => x.ContractCode == rtm.contract_code && x.Direction == rtm.direction) == null)
                {
                    if (CommHelper.CFSmvmList.ContainsKey(rtm.contract_code + rtm.direction))
                    {
                        CommHelper.CFSmvmList[rtm.contract_code + rtm.direction].Clear();
                        LogHelper.Info("4007中移除止盈止损" + rtm.contract_id + rtm.direction + "清除数据");
                    }
                }

                //PositionViewModel.Instance().JSAbleVolume();
                TransactionViewModel.Instance().FigureUpNum(TransactionViewModel.Instance()._futures);
            }
            catch (Exception ex)
            {
                LogHelper.Info(ex.ToString());
            }
        }
        public void ExecutePositionDetialData(object para)
        {
            try
            {
                PotionDetailModel    pm   = para as PotionDetailModel;
                PositionAllViewModel pavm = PositionAllViewModel.Instance();
                if (pavm.DetPMList.FirstOrDefault(x => x.PsitionId == pm.position_id) != null)
                {
                    return;
                }
                if (pm.bLast)
                {
                    PotionDetailModelViewModel[] temp = pavm.DetPMList.ToArray();
                    //合约名加方向作为K
                    Dictionary <string, PotionDetailModelViewModel> dicod = new Dictionary <string, PotionDetailModelViewModel>();
                    foreach (PotionDetailModelViewModel item in temp)
                    {
                        PotionDetailModelViewModel pm1 = item.Clone(item);
                        if (!dicod.Keys.Contains(pm1.ContractCode + pm1.Direction))
                        {
                            pm1.AllPrice = pm1.OpenPrice * pm1.PositionVolume;
                            dicod.Add(pm1.ContractCode + pm1.Direction, pm1);
                            MainViewModel.GetInstance().SubscribedStocks.Add(pm1.ContractCode);
                        }
                        else
                        {
                            dicod[item.ContractCode + item.Direction].AbleVolume         = dicod[item.ContractCode + item.Direction].AbleVolume + item.AbleVolume;
                            dicod[item.ContractCode + item.Direction].PositionProfitLoss = dicod[item.ContractCode + item.Direction].PositionProfitLoss + item.PositionProfitLoss;
                            dicod[item.ContractCode + item.Direction].PositionVolume     = dicod[item.ContractCode + item.Direction].PositionVolume + item.PositionVolume;
                            dicod[item.ContractCode + item.Direction].UseMargin          = dicod[item.ContractCode + item.Direction].UseMargin + item.UseMargin;
                            dicod[item.ContractCode + item.Direction].SysUseMargin       = dicod[item.ContractCode + item.Direction].SysUseMargin + item.SysUseMargin;
                            dicod[item.ContractCode + item.Direction].AllPrice          += item.PositionVolume * item.OpenPrice;
                            dicod[item.ContractCode + item.Direction].OpenPrice          = dicod[item.ContractCode + item.Direction].AllPrice / dicod[item.ContractCode + item.Direction].PositionVolume;
                        }
                    }
                    if (dicod.Keys.Count > 0)
                    {
                        foreach (PotionDetailModelViewModel item in dicod.Values)
                        {
                            pavm.PMList.Add(item);
                            PositionViewModel.Instance().PMList.Add(item);
                        }
                    }
                    ScoketManager.GetInstance().SendSubscribeInfo(7, MainViewModel.GetInstance().SubscribedStocks);
                    //发送命令
                    ReqPotion rp = new ReqPotion();
                    rp.cmdcode = RequestCmdCode.SelectStopLoss;
                    rp.content = new ReqLoginName()
                    {
                        user_id = UserInfoHelper.UserId
                    };
                    ScoketManager.GetInstance().SendTradeWSInfo(JsonConvert.SerializeObject(rp));
                    //PositionViewModel.Instance().JSAbleVolume();
                    TransactionViewModel.Instance().FigureUpNum(TransactionViewModel.Instance()._futures);
                    return;
                }

                VarietyModel vm     = null;
                string[]     values = pm.contract_id.Split(' ');
                if (values.Length == 3)
                {
                    string varietie = values[1];
                    if (ContractVariety.Varieties.ContainsKey(varietie))
                    {
                        vm = ContractVariety.Varieties[varietie];
                    }
                    if (vm != null)
                    {
                        pm.precision = vm.precision;
                    }
                }

                PotionDetailModelViewModel pvm = new PotionDetailModelViewModel(pm);
                pavm.DetPMList.Add(pvm);
            }
            catch (Exception ex)
            {
                LogHelper.Info(ex.ToString());
            }
        }
        public void ExecuteTransactionInfoData(object para)
        {
            try
            {
                TransactionInfoModel tim = para as TransactionInfoModel;
                if (tim == null)
                {
                    return;
                }
                if (TodayTraderViewModels.Instance().TodayTraderList.FirstOrDefault(x => x.ShadowTradeID == tim.shadow_tradeID) != null)
                {
                    return;
                }
                TodayTraderModel ttm = new TodayTraderModel();
                ttm.contract_code  = tim.contract_code;
                ttm.direction      = tim.direction;
                ttm.open_offset    = tim.open_offset;
                ttm.order_id       = tim.order_id;
                ttm.price_type     = tim.price_type;
                ttm.shadow_orderID = tim.shadow_orderID;
                ttm.trade_id       = tim.trade_number;
                ttm.contract_id    = tim.contract_id;
                ttm.shadow_tradeID = tim.shadow_tradeID;
                ttm.trade_date     = tim.trade_date;
                ttm.trade_id       = tim.trade_id;
                ttm.trade_price    = tim.trade_price;
                ttm.trade_time     = tim.trade_time;
                ttm.trade_volume   = tim.trade_volume;
                VarietyModel vm     = null;
                string[]     values = ttm.contract_code.Split(' ');
                if (values.Length == 3)
                {
                    string varietie = values[1];
                    if (ContractVariety.Varieties.ContainsKey(varietie))
                    {
                        vm = ContractVariety.Varieties[varietie];
                    }
                    if (vm != null)
                    {
                        ttm.precision = vm.precision;
                    }
                }
                TodayTraderViewModels.Instance().TodayTraderList.Add(new TodayTraderModelViewModel(ttm));
                Dictionary <string, TodayTraderModelViewModel> dicTTVM = new Dictionary <string, TodayTraderModelViewModel>();
                foreach (TodayTraderModelViewModel item in TodayTraderViewModels.Instance().TodayTraderList)
                {
                    if (!dicTTVM.ContainsKey(item.ContractCode + item.Direction + item.OpenOffset))
                    {
                        TodayTraderModelViewModel ttmvm = item.Clone(item);
                        ttmvm.AllPrice = item.TradePrice * item.TradeVolume;
                        dicTTVM.Add(item.ContractCode + item.Direction + item.OpenOffset, ttmvm);
                    }
                    else
                    {
                        dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].AllPrice    = dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].AllPrice + item.TradePrice * item.TradeVolume;
                        dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradeVolume = dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradeVolume + item.TradeVolume;
                        dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradePrice  = dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].AllPrice / dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradeVolume;
                    }
                }
                if (dicTTVM != null && dicTTVM.Values.Count > 0)
                {
                    TodayTraderViewModels.Instance().TodayTraderListALL.Clear();

                    foreach (TodayTraderModelViewModel item in dicTTVM.Values)
                    {
                        TodayTraderViewModels.Instance().TodayTraderListALL.Add(item);
                    }
                }
                if (CommParameterSetting.MessageAlert.TradeAlert == "窗口提示")
                {
                    // string msg = "\t合约已成交\t" + "\n\n" + ttm.contract_id + "\n\t" + "方向:" + (ttm.direction == "B" ? "买" : "卖") + "\n\t开平:" + (ttm.open_offset == 1 ? "开仓" : "平仓") + "\n\t成交数量:" + ttm.trade_volume + "\n\t成交价格" + ttm.trade_price;
                    string msg = "     " + ttm.contract_id + "\t" + "    方向:" + (ttm.direction == "B" ? "买" : "卖") + "\t\n     开平:" + (ttm.open_offset == 1 ? "开仓" : "平仓") + "\t    成交数量:" + ttm.trade_volume + "\t\n     成交价格" + ttm.trade_price + "\t" + "    已成交";
                    MessageBox.Show(msg, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    LogHelper.Info(msg + "成交时间:");
                }
                else if (CommParameterSetting.MessageAlert.TradeAlert == "声音提示")
                {
                    SoundPlayerHelper.Play();
                }
            }
            catch (Exception ex)
            {
                LogHelper.Info(ex.ToString());
            }
        }
示例#22
0
        public ActionResult Edit(int?SN, int?customerSN, string petName, int?petGender, int?kindSN, int?varietySN, string petRemark)
        {
            try
            {
                if (SN == null)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                }

                Comm_Pet pet = PetModel.getPetBySN(Convert.ToInt32(SN));

                if (pet == null)
                {
                    return(HttpNotFound());
                }

                #region Validation
                if (customerSN == null)
                {
                    ModelState.AddModelError("customerSN", "請選擇飼主");
                }

                if (petName == string.Empty)
                {
                    ModelState.AddModelError("petName", "請輸入寵物名稱");
                }

                if (petGender == null)
                {
                    ModelState.AddModelError("petGender", "請選擇寵物性別");
                }

                if (kindSN == null)
                {
                    ModelState.AddModelError("kindSN", "請選擇物種");
                }

                if (varietySN == null)
                {
                    ModelState.AddModelError("varietySN", "請選擇品種");
                }

                if (!ModelState.IsValid)
                {
                    List <Comm_Customer> customerList = CustomerModel.getCustomerList();
                    List <Comm_Kind>     kindList     = KindModel.getKindList();
                    List <Comm_Variety>  varietyList  = VarietyModel.getVarietyListByKindSN(pet.kindSN);

                    ViewBag.customerSN = new SelectList(customerList, "SN", "customerName", pet.customerSN);
                    ViewBag.kindSN     = new SelectList(kindList, "SN", "kindName", pet.kindSN);
                    ViewBag.varietySN  = new SelectList(varietyList, "SN", "varietyName", pet.varietySN);
                    return(View(pet));
                }
                #endregion

                Boolean gender = false;
                if (petGender == 1)
                {
                    gender = true;
                }

                pet.customerSN = Convert.ToInt32(customerSN);
                pet.petName    = petName;
                pet.petGender  = gender;
                pet.kindSN     = Convert.ToInt32(kindSN);
                pet.varietySN  = Convert.ToInt32(varietySN);
                pet.petRemark  = petRemark;

                return(RedirectToAction("Index"));
            }
            catch
            {
                return(View());
            }
        }