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"); }
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); }
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); }
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)); } }
/// <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)); } }
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) }); }
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); }
/// <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)); }
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)); }
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 }); } } } }
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 = "服务器错误" }); } }
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); }
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 }); }
/// <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 }; } })); }