Ejemplo n.º 1
0
        public Result Close(string token)
        {
            if (token != ConfigurationManager.AppSettings["CloseToken"])
            {
                return(Result(ApiResultEnum.InvalidRequest));
            }

            int status_trade = MonitorRA.GetStatusTrade();

            UserRA.FlushDatabase(new List <int>()
            {
                7, 8, (int)DateTime.Now.AddDays(1).DayOfWeek
            });
            if (status_trade != 0)
            {
                if (LogTradeDA.Close("系统"))
                {
                    MonitorRA.SetStatusTrade((int)StatusTradeEnum.Closed);
                    OpenCloseBiz.Close();
                    NLog.Info("系统自动收盘");
                    return(Result(ApiResultEnum.Success));
                }
            }
            return(Result(ApiResultEnum.Order_Closed));
        }
Ejemplo n.º 2
0
        private void JY_OrderCanceled(object sender, OrderItem e)
        {
            string[] keys = TradeRA.KeySearch("O_" + e.order_no + "_*");
            if (keys.Length == 0 || keys[0].EndsWith("U_0") || keys[0].EndsWith("_F"))
            {
                return;
            }

            Order model = new Order()
            {
                order_no     = e.order_no,
                deal_count   = (int)decimal.Parse(e.deal_count),
                cancel_count = (int)decimal.Parse(e.cancel_count),
                status       = e.status,
            };

            OrderRA.UpdateStatus(model, keys[0]);

            //撤单成功取消冻结
            Order order = OrderRA.Get(keys[0]);

            MessageBiz.Send(order.user_id.ToString(), MessageTypeEnum.Order_Canceled, "[" + order.code + "]" + order.name + "撤单成功,撤单数量:" + model.cancel_count);
            if (e.type == "0")
            {
                string key_unit = "U_" + order.unit_id;
                UnitRA.UpdateCapitalOrderBuy(-order.price * model.cancel_count, key_unit);
            }
            else if (e.type == "1")
            {
                string key_position = "P_" + order.code + "_A_" + order.account_id + "_U_" + order.unit_id;
                PositionRA.UpdateSellableOrderSell(order.cancel_count, key_position);
            }
            MonitorRA.Increment("account_" + account_id, "cancel_count");
        }
Ejemplo n.º 3
0
        public Result UpdateUnits(UserUnits model)
        {
            ApiResultEnum result = UnitDA.UpdateUserID(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                string[] keys = TradeRA.KeySearch("U_*");
                foreach (string key in keys)
                {
                    string _user_id = TradeRA.Get(key, "user_id");
                    if (model.unit_ids.Contains(int.Parse(key.Substring(2))))
                    {
                        if (model.id != _user_id)
                        {
                            UnitRA.UpdateUserID(model.id, key);
                        }
                    }
                    else
                    {
                        if (model.id == _user_id)
                        {
                            UnitRA.UpdateUserID("0", key);
                        }
                    }
                }
            }
            return(Result(result));
        }
Ejemplo n.º 4
0
 static MessageBiz()
 {
     if (!MonitorRA.HashExists("message", "count"))
     {
         MonitorRA.Set("message", "count", "0");
     }
 }
Ejemplo n.º 5
0
        public Result UpdateRatioFreezing(Model.DB.Unit model)
        {
            ApiResultEnum result = UnitDA.UpdateRatioFreezing(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                UnitRA.UpdateRatioFreezing(model.ratio_freezing, "U_" + model.id);
            }
            return(Result(result));
        }
Ejemplo n.º 6
0
        public Result UpdateStatus(Status model)
        {
            ApiResultEnum result = UnitDA.UpdateStatus(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                UnitRA.UpdateStatus(model.status, "U_" + model.id);
            }
            return(Result(result));
        }
Ejemplo n.º 7
0
        public Result Update(Model.DB.Unit model)
        {
            ApiResultEnum result = UnitDA.Update(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                OpenCloseBiz.LoadUnit(model, false);
            }
            return(Result(result));
        }
Ejemplo n.º 8
0
        public Result UpdateStatusOrder(StatusOrder model)
        {
            ApiResultEnum result = AccountDA.UpdateStatusOrder(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                AccountRA.UpdateStatusOrder(model.status, "A_" + model.id);
            }
            return(Result(result));
        }
Ejemplo n.º 9
0
        public Result Update(Model.DB.Account model)
        {
            model.created_by = user_id;
            ApiResultEnum result = AccountDA.Update(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                OpenCloseBiz.LoadAccount(model, false);
            }
            return(Result(result));
        }
Ejemplo n.º 10
0
        protected void Application_Start(object sender, EventArgs e)
        {
            Config.Init();
            StockInfoBiz.Init();

            int status_trade = MonitorRA.GetStatusTrade();

            if (status_trade > 0)
            {
                OpenCloseBiz.Open();
            }
        }
Ejemplo n.º 11
0
        public Result CapitalInOut(LogCapital model)
        {
            model.@operator = user_id;
            decimal       delta;
            ApiResultEnum result = LogCapitalDA.Add(model, out delta);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                UnitRA.UpdateCapitalInOut(delta, "U_" + model.unit_id);
            }
            return(Result(result));
        }
Ejemplo n.º 12
0
        public void Order(Order order)
        {
            string request_id = FuncHelper.GetUniqueID().ToString();

            order.account_id = account_id;
            order.name       = StockInfoBiz.GetStock(order.code).name;
            order.time_dt    = DateTime.Now;
            OrderRA.Add(order, "O_" + request_id + "_T_" + order.trade_no + "_U_" + order.unit_id + "_F");

            JY.Order(new JY.Order(order.code, order.type, order.count, order.price, request_id));
            MonitorRA.Increment("account_" + account_id, "order_count");
        }
Ejemplo n.º 13
0
        public Result <int> Add(Model.DB.Account model)
        {
            int id = 0;

            model.created_by = user_id;
            ApiResultEnum result = AccountDA.Add(model, ref id);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                model.id = id;
                OpenCloseBiz.LoadAccount(model);
            }
            return(Result(result, id));
        }
Ejemplo n.º 14
0
 public static async void Send(string user_id, MessageTypeEnum messageType, string message = "")
 {
     await Task.Run(() =>
     {
         string msg = string.Format("{0}|{1}{2}", user_id, ((int)messageType).ToString(), message);
         string response;
         bool result = Send(msg, out response);
         if (result && response == "1")
         {
             MonitorRA.Increment("message", "count");
             MonitorRA.Set("message", "time", DateTime.Now.Format());
         }
     });
 }
Ejemplo n.º 15
0
        public Result <List <LogTrade> > ListLogTrade()
        {
            List <LogTrade> lst          = LogTradeDA.List();
            int             status_trade = MonitorRA.GetStatusTrade();

            if (status_trade == 1)
            {
                lst.Last().state = "交易中";
            }
            else if (status_trade == 2)
            {
                lst.Last().state = "已暂停";
            }
            return(Result(lst));
        }
Ejemplo n.º 16
0
        public Result <int> Add(Model.DB.Unit model)
        {
            int id = 0;

            model.created_by        = user_id;
            model.status_order_enum = StatusOrderEnum.Allowed;
            ApiResultEnum result = UnitDA.Add(model, ref id);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                model.id = id;
                OpenCloseBiz.LoadUnit(model);
            }
            return(Result(result, id));
        }
Ejemplo n.º 17
0
        public Result UpdateStatusTrade(StatusTradeEnum status)
        {
            int status_trade = MonitorRA.GetStatusTrade();

            if (status_trade == 0)
            {
                if (status != StatusTradeEnum.Opening)
                {
                    return(Result(ApiResultEnum.Failed));
                }

                //开盘
                if (!LogTradeDA.Open(UserRA.Get(user_id.ToString(), "name")))
                {
                    return(Result(ApiResultEnum.Failed));
                }

                MonitorRA.SetStatusTrade((int)status);
                OpenCloseBiz.Open();
            }
            else
            {
                if (status == StatusTradeEnum.Opening)
                {
                    OpenCloseBiz.Open();
                    return(Result(ApiResultEnum.Success));
                }
                else if (status == StatusTradeEnum.Recovery)
                {
                    MonitorRA.SetStatusTrade((int)StatusTradeEnum.Opening);
                }
                else if (status == StatusTradeEnum.Pause)
                {
                    MonitorRA.SetStatusTrade((int)status);
                }
                else
                {
                    //收盘
                    if (!LogTradeDA.Close(UserRA.Get(user_id.ToString(), "name")))
                    {
                        return(Result(ApiResultEnum.Failed));
                    }
                    MonitorRA.SetStatusTrade((int)status);
                    OpenCloseBiz.Close();
                }
            }
            return(Result(ApiResultEnum.Success));
        }
Ejemplo n.º 18
0
        private void JY_NewDeal(object sender, DealItem e)
        {
            Order order   = null;
            int   unit_id = 0;

            string[] keys = TradeRA.KeySearch("O_" + e.order_no + "_*");
            if (keys.Length > 0)
            {
                order   = OrderRA.Get(keys[0]);
                unit_id = order.unit_id;
            }

            string key = "D_" + e.deal_no + "_O_" + e.order_no + "_U_" + unit_id;

            if (TradeRA.KeyExists(key))
            {
                return;
            }

            Deal deal = new Deal()
            {
                code        = e.code,
                name        = e.name,
                type        = int.Parse(e.type),
                count       = (int)decimal.Parse(e.count),
                money       = decimal.Parse(e.money),
                time_dt     = DateTime.Parse(e.date.ToDate() + " " + e.time.ToTime()),
                deal_no     = e.deal_no,
                order_no    = e.order_no,
                price       = decimal.Parse(e.price),
                unit_id     = unit_id,
                account_id  = account_id,
                transferred = unit_id > 0 ? 0 : 1,
            };

            DealRA.Add(deal, key);

            //更新成交均价
            DealAveragePrice(deal);

            //系统内成交
            if (unit_id > 0)
            {
                MessageBiz.Send(order.user_id.ToString(), MessageTypeEnum.Order_Dealt, "[" + deal.code + "]" + deal.name + "已成交,成交数量:" + deal.count);
                TradeBiz.NewDeal(deal, order.price);
                MonitorRA.Increment("account_" + account_id, "deal_count");
            }
        }
Ejemplo n.º 19
0
        public Result Delete(Model.DB.AccountGroup model)
        {
            var units = UnitDA.List4AccountGroup(model.id);

            if (units.Count > 0)
            {
                return(Result(ApiResultEnum.Cited, string.Join(",", units.Select(u => u.code))));
            }

            model.created_by = user_id;
            ApiResultEnum result = AccountGroupDA.Delete(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                AccountGroupRA.Delete4AccountGroup(model.id);
            }
            return(Result(result, string.Empty));
        }
Ejemplo n.º 20
0
        public Result Delete(Model.DB.Account model)
        {
            var account_groups = AccountGroupDA.List4Account(model.id);

            if (account_groups.Count > 0)
            {
                return(Result(ApiResultEnum.Cited, string.Join(",", account_groups.Select(u => u.code))));
            }

            model.created_by = user_id;
            ApiResultEnum result = AccountDA.Delete(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                TradeBiz.RemoveAccount(model.id);
                AccountRA.Delete("A_" + model.id);
            }
            return(Result(result));
        }
Ejemplo n.º 21
0
        public JYBiz(int _account_id, string ip, int port)
        {
            account_id            = _account_id;
            JY                    = new JYService(ip, port);
            JY.Order_Done        += JY_Order_Done;
            JY.QueryCapital_Done += JY_QueryCapital_Done;
            JY.NewOrder          += JY_NewOrder;
            JY.OrderChanged      += JY_OrderChanged;
            JY.OrderCanceled     += JY_OrderCanceled;
            JY.NewDeal           += JY_NewDeal;

            if (!MonitorRA.HashExists("account_" + account_id, "order_count"))
            {
                MonitorRA.Set("account_" + account_id, "order_count", "0");
                MonitorRA.Set("account_" + account_id, "success_count", "0");
                MonitorRA.Set("account_" + account_id, "failed_count", "0");
                MonitorRA.Set("account_" + account_id, "cancel_count", "0");
                MonitorRA.Set("account_" + account_id, "deal_count", "0");
            }
        }
Ejemplo n.º 22
0
        //检查系统和用户是否满足下单条件
        public static ApiResultEnum CheckStatus(Order model)
        {
            StatusOrderEnum status_order = (StatusOrderEnum)int.Parse(UserRA.Get(model.user_id.ToString(), "status_order"));

            if (status_order == StatusOrderEnum.Forbidden)
            {
                return(ApiResultEnum.Order_User_Forbidden_Order);
            }
            if (model.type_enum == OrderTypeEnum.Buy && status_order == StatusOrderEnum.NoBuying)
            {
                return(ApiResultEnum.Order_User_NoBuying_Order);
            }

            StatusTradeEnum status_trade = (StatusTradeEnum)MonitorRA.GetStatusTrade();

            if (status_trade == StatusTradeEnum.Closed)
            {
                return(ApiResultEnum.Order_Closed);
            }
            else if (status_trade == StatusTradeEnum.Pause)
            {
                return(ApiResultEnum.Order_Paused);
            }

            BlockInfo block = StockInfoBiz.GetBlock(model.code);

            if (block == null)
            {
                return(ApiResultEnum.Order_Code_Error);
            }
            if (model.price == 0)
            {
                return(ApiResultEnum.Order_Price_Error);
            }
            if (model.count == 0)
            {
                return(ApiResultEnum.Order_Count_Error);
            }

            return(ApiResultEnum.Success);
        }
Ejemplo n.º 23
0
        public Result UpdateItems(Model.DB.AccountGroup model)
        {
            model.items = model.items.OrderBy(i => i.sort_buy).AsEnumerable().DistinctBy(i => i.account_id).ToList();
            ApiResultEnum result = AccountGroupDA.UpdateItems(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                var units = UnitDA.List4AccountGroup(model.id);
                foreach (var kvp in units)
                {
                    UnitRA.UpdatePriorityStrategy(model.priority_strategy, "U_" + kvp.id);
                }
                AccountGroupRA.Delete4AccountGroup(model.id);
                List <Model.DB.AccountGroupItem> items = AccountGroupDA.ListItems4AccountGroup(model.id);
                foreach (Model.DB.AccountGroupItem item in items)
                {
                    OpenCloseBiz.LoadAccountGroupItem(item);
                }
                TradeBiz.RunCalculateValue();
            }
            return(Result(result));
        }
Ejemplo n.º 24
0
        private void JY_Order_Done(object sender, OrderResult e)
        {
            string[] keys = TradeRA.KeySearch("O_" + e.request_id + "_*");
            if (keys.Length == 0)
            {
                return;
            }

            Order order = OrderRA.Get(keys[0]);

            if (order.state_enum != OrderStatusEnum.Submitted)
            {
                return;
            }

            //委托失败解除冻结
            if (!e.result)
            {
                if (order.type_enum == OrderTypeEnum.Buy)
                {
                    string key_unit = "U_" + order.unit_id;
                    UnitRA.UpdateCapitalOrderBuy(-order.price * order.count, key_unit);
                }
                else if (order.type_enum == OrderTypeEnum.Sell)
                {
                    string key_position = "P_" + order.code + "_A_" + order.account_id + "_U_" + order.unit_id;
                    PositionRA.UpdateSellableOrderSell(order.count, key_position);
                }
                OrderRA.UpdateOrderFailed(keys[0], e.message);
                MessageBiz.Send(order.user_id.ToString(), MessageTypeEnum.Order_Failed, "[" + order.code + "]" + order.name + "委托失败。" + e.message);
                MonitorRA.Increment("account_" + account_id, "failed_count");
            }
            else
            {
                OrderRA.UpdateOrderSuccess(keys[0], order.unit_id, order.trade_no, e.order_no);
                MonitorRA.Increment("account_" + account_id, "success_count");
            }
        }