Ejemplo n.º 1
0
 public void AddOrder(int contract, TradeDirectType dir, OrderType orderType, OrderPolicy policy, decimal count, decimal price, string userOpId = "")
 {
     Execute(() =>
     {
         var r = srv.AddOrder(CurTrader.Id, contract, dir, orderType, policy, (int)count, price, userOpId);
         CurCallBack.OnOrder(new OrderDto(r.Order), r);
     }, "add order");
 }
Ejemplo n.º 2
0
        public static Order Create(CreateOrder cmd)
        {
            var order = new Order(cmd.Id, cmd.TableNo, cmd.Status, cmd.Items, DateTimeOffset.Now);

            OrderPolicy.Verify(order);

            order.ApplyEvent(new OrderCreated(order.Id, order.TableNo, order.OrderItems, order.CreatedDate));

            return(order);
        }
Ejemplo n.º 3
0
 public static bool IsPriceValid(this OrderPolicy policy, decimal price)
 {
     if (price == 0)
     {
         if (!(policy == OrderPolicy.市价FOK || policy == OrderPolicy.市价IOC || policy == OrderPolicy.市价剩余转限价))
         {
             return(false);
         }
     }
     return(true);
 }
Ejemplo n.º 4
0
        public JsonResult OrderIt(int coinId, Core.TradeDirectType dir, OrderPolicy policy,
                                  string pwd,
                                  decimal count, decimal price)
        {
            try
            {
                var au = UserManager.FindByName(User.Identity.Name);
                if (au == null)
                {
                    return(Json(new OperationResult(501, "必须登录"), JsonRequestBehavior.AllowGet));
                }
                var u = User.GetTraderId();

                if (u == -1)
                {
                    return(Json(new OperationResult(1, "无此用户"), JsonRequestBehavior.AllowGet));
                }

                var ThisUser = adb.Users.Where(a => a.UserName == User.Identity.Name).FirstOrDefault();
                if (ThisUser.PhoneNumber == "" || ThisUser.PhoneNumber == null)
                {
                    return(Json(new OperationResult(3, "请进入安全中心绑定手机号"), JsonRequestBehavior.AllowGet));
                }
                string pwdPolicy = GetInputTradeCount();
                if (pwdPolicy == "n" || pwdPolicy == "1")
                {
                    if (pwd != ThisUser.TradePwd)
                    {
                        return(Json(new OperationResult(501, "交易密码错误"), JsonRequestBehavior.AllowGet));
                    }
                }
                if (count <= 0)
                {
                    return(Json(new OperationResult(2, "数量不能小于等于0"), JsonRequestBehavior.AllowGet));
                }
                if (!policy.IsPriceValid(price))
                {
                    return(Json(new OperationResult(4, "非市价策略价格必须有价格"), JsonRequestBehavior.AllowGet));
                }

                var r = spotService.AddOrder(u, coinId, dir, policy, count, price);
                return(Json(new { ResultCode = r.ResultCode, Desc = r.Desc, Spot = new SpotOrderDto(r.Spot) }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception e)
            {
                Singleton <TextLog> .Instance.Error(e, "spotcontroller");

                return(Json(new OperationResult(100, "服务器未知错误"), JsonRequestBehavior.AllowGet));
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 下单(委托)
        /// </summary>
        /// <param name="code"></param>
        /// <param name="policy"></param>
        /// <param name="price"></param>
        /// <param name="count"></param>
        /// <param name="direct"></param>
        /// <param name="openclose"></param>
        /// <returns></returns>
        public JsonResult OrderIt(string code, OrderPolicy policy,
                                  decimal price, int count, TradeDirectType direct,
                                  OrderType openclose, string userOpId, string pwd = "")
        {
            try
            {
                var au = UserManager.FindByName(User.Identity.Name);
                if (au == null)
                {
                    return(Json(new OperationResult(501, "必须登录"), JsonRequestBehavior.AllowGet));
                }
                var u = User.GetTraderId();
                if (u <= 0)
                {
                    return(Json(new OperationResult {
                        ResultCode = 500, Desc = "必须登录"
                    }, JsonRequestBehavior.AllowGet));
                }
                string pwdPolicy = GetInputTradeCount();
                if (pwdPolicy == "n" || pwdPolicy == "1")
                {
                    if (pwd != au.TradePwd)
                    {
                        return(Json(new OperationResult(501, "交易密码错误"), JsonRequestBehavior.AllowGet));
                    }
                }
                var ThisUser = adb.Users.Where(a => a.UserName == User.Identity.Name).FirstOrDefault();
                if (ThisUser.PhoneNumber == "" || ThisUser.PhoneNumber == null)
                {
                    return(Json(new OperationResult(1, "请进入安全中心绑定手机号"), JsonRequestBehavior.AllowGet));
                }
                var rr = tradeMgr.OrderIt(u, code, policy, price, count, direct, openclose, userOpId);
                return(Json(rr, JsonRequestBehavior.AllowGet));
            }
            catch (Exception e)
            {
                Singleton <TextLog> .Instance.Error(e, "order it in home");

                return(Json(new OperationResult {
                    ResultCode = 600, Desc = "服务器未知错误"
                }, JsonRequestBehavior.AllowGet));
            }
        }
Ejemplo n.º 6
0
        public OrderResultDto OrderIt(int uid, string code, OrderPolicy policy,
                                      decimal price, int count, TradeDirectType direct,
                                      OrderType openclose, string userOpId)
        {
            if (count <= 0)
            {
                return new OrderResultDto {
                           ResultCode = 101, Desc = "数量不能小于等于0"
                }
            }
            ;
            if (price == 0 && (policy != OrderPolicy.市价FOK && policy != OrderPolicy.市价IOC && policy != OrderPolicy.市价剩余转限价))
            {
                return(new OrderResultDto {
                    ResultCode = 102, Desc = "非市价策略价格不能为空"
                });
            }
            price = Math.Round(price, 2);
            var srv      = MvcApplication.OptionService;
            var contract = srv.Model.Contracts.Where(a => a.Code == code && a.IsDel == false).FirstOrDefault();

            if (contract == null)
            {
                return new OrderResultDto {
                           ResultCode = 100, Desc = "无此合约代码"
                }
            }
            ;
            //if (uid <= 0)
            //    return new OrderResultDto { ResultCode = 500, Desc = "必须登录" };
            var r = MvcApplication.OptionService.AddOrder(uid,
                                                          contract.Id, direct,
                                                          openclose, policy, count, price, userOpId);

            return(new OrderResultDto
            {
                Desc = r.Desc,
                ResultCode = r.ResultCode,
                UserOpId = userOpId,
                Order = new OrderDto(r.Order)
            });
        }
Ejemplo n.º 7
0
        public Order  CreateOrder(int who, int contract, TradeDirectType dir, OrderPolicy policy, int count, decimal price)
        {
            var w = dbContext.Set <Trader>().Where(a => a.Id == who).FirstOrDefault();

            if (w == null)
            {
                return(null);
            }
            var c = dbContext.Set <Contract>().Where(a => a.Id == contract).FirstOrDefault();

            if (c == null)
            {
                return(null);
            }
            Order o = new Order {
                Contract = c, Trader = w, OrderPolicy = policy,
                Id       = IdService <Contract> .Instance.NewId(),
                Count    = count, Direction = dir, Price = price, State = OrderState.等待中, OrderTime = DateTime.Now
            };

            return(o);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 创建委托
        /// </summary>
        /// <param name="who"></param>
        /// <param name="contract"></param>
        /// <param name="dir"></param>
        /// <param name="pos"></param>
        /// <param name="orderType"></param>
        /// <param name="policy"></param>
        /// <param name="count"></param>
        /// <param name="price"></param>
        /// <returns></returns>
        public Order CreateOrder(int who, int contract, TradeDirectType dir, OrderType orderType, OrderPolicy policy, int count, decimal price)
        {
            var w = Traders.Where(a => a.Id == who).FirstOrDefault();

            if (w == null)
            {
                return(null);
            }
            var c = Contracts.Where(a => a.Id == contract).FirstOrDefault();

            if (c == null)
            {
                return(null);
            }

            return(EntityFactory.CreateOrder(w, c, dir, orderType, policy, count, price));
        }
Ejemplo n.º 9
0
 public OrderResult AddOrder(int who, int contract, TradeDirectType dir, OrderType orderType,
                             OrderPolicy policy, int count, decimal price,
                             string userOpId = "")
 {
     return(processor.AddOrder(who, contract, dir, orderType, policy, count, price, userOpId));
 }
Ejemplo n.º 10
0
        public SpotOrderResult Create(int trader, int coinId, Core.TradeDirectType dir, OrderPolicy policy,
                                      decimal userCount, decimal price)
        {
            var count = Math.Round(userCount, 2);

            if (count <= 0)
            {
                return new SpotOrderResult
                       {
                           ResultCode = 1,
                           Desc       = "金额不能小于等于0",
                           Spot       = null
                       }
            }
            ;
            if (!policy.IsPriceValid(price))
            {
                return new SpotOrderResult
                       {
                           ResultCode = 1,
                           Desc       = "非市价策略必须有价格",
                           Spot       = null
                       }
            }
            ;
            var t = sm.Model.Traders.Where(a => a.Id == trader).FirstOrDefault();

            if (t == null)
            {
                return new SpotOrderResult {
                           Spot = null, Desc = "无此用户", ResultCode = 2
                }
            }
            ;
            var c = sm.Model.Coins.Where(a => a.Id == coinId).FirstOrDefault();

            if (c == null)
            {
                return new SpotOrderResult {
                           Spot = null, Desc = "无此虚拟币", ResultCode = 3
                }
            }
            ;
            var ap = Math.Round(price, 2);

            lock (loc)
            {
                var so = new SpotOrder
                {
                    Id          = IdService <SpotOrder> .Instance.NewId(),
                    Coin        = c,
                    CoinId      = c.Id,
                    Count       = count,
                    Direction   = dir,
                    OrderTime   = DateTime.Now,
                    Price       = ap,
                    State       = OrderState.等待中,
                    Trader      = t,
                    TraderId    = t.Id,
                    ReportCount = count,
                    OrderPolicy = policy
                };

                return(new SpotOrderResult {
                    ResultCode = 0, Desc = "创建委托成功", Spot = so
                });
            }
        }
    }
}
Ejemplo n.º 11
0
        public SpotOrderResult AddOrder(int trader, int coinId, Core.TradeDirectType dir, OrderPolicy policy,
                                        decimal count, decimal price)
        {
            try
            {
                if (isStop)
                {
                    return new SpotOrderResult {
                               ResultCode = 330, Desc = "系统已停止,请稍后重试"
                    }
                }
                ;
                var r = creator.Create(trader, coinId, dir, policy, count, price);
                if (r.ResultCode != 0)
                {
                    return(r);
                }
                var pr = pre.CouldOrder(r.Spot);
                if (pr != 0)
                {
                    if (pr == 1)
                    {
                        return new SpotOrderResult
                               {
                                   Spot       = r.Spot,
                                   ResultCode = 100,
                                   Desc       = "虚拟币不足"
                               }
                    }
                    ;
                    else if (pr == 2)
                    {
                        return new SpotOrderResult
                               {
                                   Spot       = r.Spot,
                                   ResultCode = 100,
                                   Desc       = "现金资金不足"
                               }
                    }
                    ;
                }
                post.Handle(r.Spot);
                match.Match(r.Spot);
                model.SaveUndeal(r.Spot);
                return(new SpotOrderResult
                {
                    ResultCode = 0,
                    Spot = r.Spot,
                    Desc = "下单成功"
                });
            }
            catch (Exception e)
            {
                Singleton <TextLog> .Instance.Error(e, "spot");

                return(new SpotOrderResult {
                    ResultCode = 100, Desc = "服务器错误"
                });
            }
        }
Ejemplo n.º 12
0
        public static Order CreateOrder(Trader who, Contract contract, TradeDirectType dir, OrderType orderType, OrderPolicy policy, int count, decimal price1)
        {
            var w = who;

            if (w == null)
            {
                return(null);
            }
            var c = contract;

            if (c == null)
            {
                return(null);
            }
            if (count <= 0)
            {
                return(null);
            }
            var price = Math.Round(price1, 2);

            if (price < 0)
            {
                return(null);
            }
            if (price == 0 && (policy != OrderPolicy.市价剩余转限价 && policy != OrderPolicy.市价IOC && policy != OrderPolicy.市价FOK))
            {
                return(null);
            }
            Order o;

            lock (createOrderSync)
            {
                o = new Order
                {
                    Id          = IdService <Order> .Instance.NewId(),
                    Contract    = c,
                    Trader      = w,
                    Count       = count,
                    ReportCount = count,
                    Direction   = dir,
                    Price       = price,
                    OrderType   = orderType,
                    OrderPolicy = policy,
                    State       = OrderState.等待中,
                    OrderTime   = DateTime.Now
                };
            }
            return(o);
        }
Ejemplo n.º 13
0
        public OrderResult AddOrder(int who, int contract, TradeDirectType dir, OrderType orderType, OrderPolicy policy, int count, decimal price,
                                    string userOpId = "")
        {
            if (IsStoped)
            {
                return new OrderResult {
                           ResultCode = 330, Desc = "系统维护中,请稍后重试"
                }
            }
            ;
            var o = Model.CreateOrder(who, contract, dir, orderType, policy, count, price);

            if (o == null)
            {
                return new OrderResult {
                           ResultCode = 10, Desc = "不能创建委托,请检查参数", UserOpId = userOpId
                }
            }
            ;
            o.State = OrderState.等待中;

            if (!IsAcceptByFuse(o))
            {
                return(new OrderResult
                {
                    UserOpId = userOpId,
                    Desc = "价格不能超出熔断范围",
                    Order = o,
                    ResultCode = 401
                });
            }
            var r = preHandler.CouldOrder(o);

            if (r.ResultCode == 10)
            {
                log.Info(string.Format("异常:人{0}-约{1}-向{2}-开{3}-策{4}-量{5}-价{6}-{7}", who, contract, dir, orderType, policy, count, price, userOpId));
                return(new OrderResult
                {
                    UserOpId = userOpId,
                    Desc = "下单未知错误",
                    Order = o,
                    ResultCode = 401
                });
            }
            log.Info(string.Format("下单前检查=={0}=={1}", o, r));
            if (r.IsSuccess)
            {
                var br = postHandler.Handle(o);
                if (!br)
                {
                    return(new OrderResult {
                        UserOpId = userOpId, Desc = "保证金不足", Order = o, ResultCode = 5
                    });
                }
                log.Info(string.Format("下单后处理=={0}=={1}", o, r));
                Matcher.Handle(o);
                log.Info(string.Format("撮合后=={0}=={1}", o, r));
            }
            return(new OrderResult {
                UserOpId = userOpId, Desc = r.Desc, Order = o, ResultCode = r.ResultCode
            });
        }
Ejemplo n.º 14
0
        /// <summary>
        /// 现货下单
        /// </summary>
        /// <param name="uid">用户标志</param>
        /// <param name="coinId">虚拟币编号:必须为2(当前只提供比特币)</param>
        /// <param name="dir">买卖</param>
        /// <param name="pwd">交易密码</param>
        /// <param name="count">数量</param>
        /// <param name="price">价格</param>
        /// <returns>下单结果</returns>
        public OpResult <SpotOrderResultDto> SpotOrderIt(int uid, int coinId, Core.TradeDirectType dir, OrderPolicy policy,
                                                         string pwd,
                                                         decimal count, decimal price)
        {
            return(Handle <SpotOrderResultDto>(uid, () =>
            {
                try
                {
                    if (count <= 0 || price <= 0)
                    {
                        return new SpotOrderResultDto {
                            Desc = "价格或数量不能小于等于0", ResultCode = 101, Spot = null
                        };
                    }
                    var tid = im.GetTraderId(uid);

                    var r = MvcApplication.SpotService.AddOrder(tid, coinId, dir, policy, count, price);
                    var rr = new SpotOrderResultDto {
                        Desc = r.Desc, IsSuccess = r.IsSuccess, ResultCode = r.ResultCode, Spot = new SpotOrderDto(r.Spot)
                    };
                    return rr;
                }
                catch (Exception e)
                {
                    Singleton <TextLog> .Instance.Error(e, "spotapi");
                    return new SpotOrderResultDto {
                        Desc = "服务器错误", ResultCode = 100, Spot = null
                    };
                }
            }));
        }