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)); }
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"); }
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)); }
static MessageBiz() { if (!MonitorRA.HashExists("message", "count")) { MonitorRA.Set("message", "count", "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)); }
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)); }
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)); }
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)); }
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)); }
protected void Application_Start(object sender, EventArgs e) { Config.Init(); StockInfoBiz.Init(); int status_trade = MonitorRA.GetStatusTrade(); if (status_trade > 0) { OpenCloseBiz.Open(); } }
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)); }
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"); }
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)); }
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()); } }); }
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)); }
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)); }
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)); }
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"); } }
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)); }
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)); }
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"); } }
//检查系统和用户是否满足下单条件 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); }
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)); }
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"); } }