Пример #1
0
        public void ClosePosition(UnitOfWork unit, EIDProcess proc, Position pos)
        {
            IDictionary <Func <Position, bool>, Func <UnitOfWork, Position, Order> > actionDic = new Dictionary <Func <Position, bool>, Func <UnitOfWork, Position, Order> >();

            //Если позиция лонг
            actionDic.Add((p) => { return(p.Total > 0); }, (u, p) =>
            {
                ClosePosition cp = new Models.ClosePosition(new CloseLongStrategy());

                return(cp.CreateOrder(u, p));
            });

            Transaction trn = new Transaction()
            {
                Name      = "Ввод заявки",
                Status    = 0,
                Processed = true
            };

            unit.TransactionRepository.Create(trn);

            unit.Commit();

            Order order = actionDic.Single(d => d.Key.Invoke(pos)).Value.Invoke(unit, pos);

            TransactionModel trsModel = new TransactionModel();

            trsModel.CreateOrder(order, trn.Id);

            proc.Data = string.Format("CODE:{0};TRN({1});", pos.Code, trn.Id);

            proc.Status = EIDProcessStatus.ClosePosition;

            unit.Commit();
        }
Пример #2
0
        public IList <int> GetTransactionId(UnitOfWork unit, EIDProcess proc)
        {
            string mask = @"TRN\((?<trn>.+)\);";

            Regex rgx   = new Regex(mask);
            Match match = rgx.Match(proc.Data);

            string trn = null;

            if (match.Success)
            {
                trn = match.Groups["trn"].Value;
            }

            string[] trnArr = trn.Split(',');

            IList <int> id_arr = new List <int>();

            foreach (string id in trnArr)
            {
                id_arr.Add(int.Parse(id));
            }

            return(id_arr);
        }
Пример #3
0
        /// <summary>
        /// Получить позицию
        /// </summary>
        /// <param name="unit"></param>
        /// <param name="proc"></param>
        /// <returns></returns>
        public Position GetPosition(UnitOfWork unit, EIDProcess proc)
        {
            string sec = GetCode(proc);

            var pos = unit.PositionRepository.Query <Position>(p => p.Code == sec && p.PosType == PosTypeEnum.T2, null).SingleOrDefault();

            return(pos);
        }
Пример #4
0
        public int CheckStop(UnitOfWork unit, EIDProcess proc)
        {
            int order_count = 0;

            string sec = GetCode(proc);

            order_count = unit.StopOrderRepository.Query <StopOrder>(s => s.Code == sec && s.OrderState == OrderStateEnum.IsActive, null).Count();

            return(order_count);
        }
Пример #5
0
        public string GetCode(EIDProcess proc)
        {
            string mask = @"CODE:(?<code>\w+);";

            Regex rgx   = new Regex(mask);
            Match match = rgx.Match(proc.Data);

            string sec = null;

            if (match.Success)
            {
                sec = match.Groups["code"].Value;
            }

            return(sec);
        }
Пример #6
0
        public void CancelStopOrders(UnitOfWork unit, EIDProcess proc)
        {
            string sec = GetCode(proc);

            var orders = unit.StopOrderRepository.Query <StopOrder>(p => p.Code == sec && p.OrderState == OrderStateEnum.IsActive, null).ToList();

            if (orders.Count > 0)
            {
                CancelStop(orders, proc, sec, unit);
            }

            if (orders.Count == 0)
            {
                proc.Status = EIDProcessStatus.KillStopCompleted;
            }

            unit.Commit();
        }
Пример #7
0
        public JsonResult ClosePosition(string sec)
        {
            EIDProcess process = new EIDProcess();

            process.Type   = EIDProcessType.ClosePosition;
            process.Status = EIDProcessStatus.Created;

            process.Data = string.Format("CODE:{0};", sec);

            using (UnitOfWork unit = new UnitOfWork((DbContext) new DataContext()))
            {
                unit.EIDProcessRepository.Create(process);

                unit.Commit();
            }

            return(Json("ok", JsonRequestBehavior.AllowGet));
        }
Пример #8
0
        private void CancelStop(List <StopOrder> orders, EIDProcess proc, string sec, UnitOfWork unit)
        {
            IList <Transaction> trnList = new List <Transaction>();

            foreach (var order in orders)
            {
                Transaction trn = CreateKillTransaction(unit, order);

                trnList.Add(trn);
            }

            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            foreach (Transaction trn in trnList)
            {
                sb.Append(trn.Id.ToString());
                sb.Append(",");
            }
            string trnline = sb.ToString().Remove(sb.Length - 1);


            proc.Data   = string.Format("CODE:{0};TRN({1});", sec, trnline);
            proc.Status = EIDProcessStatus.KillStop;
        }