/// <summary> /// Загрузить все данные по торговому счету /// </summary> /// <param name="accountID">Торговый счет</param> public void LoadData(int accountID) { _account = _accountDA.GetAccountByID(accountID); if (_account == null) { throw new ApplicationException("Счет не найден."); } _cash = _accountDA.GetCash(accountID); if (_cash == null) { _cash = new Cash(); _cash.AccountID = accountID; } _holdings = _accountDA.GetHoldings(accountID).ToList(); _orders = _accountDA.GetOrders(accountID).ToList(); _stopOrders = _accountDA.GetStopOrders(accountID).ToList(); _trades = _accountDA.GetTrades(accountID).ToList(); }
public IEnumerable <Order> GetOrders(int accountId, int idFrom) { return(_da.GetOrders(accountId, false, idFrom).ToList()); }
/// <summary> /// Полная синхронизация заявок /// </summary> private async Task SyncOrdersFull(ISyncPipeServer sps, int localAccountID, int remoteAccountID) { var remOrders = await sps.GetOrders(remoteAccountID, 0); if (remOrders == null) { return; } var orders = _accountDA.GetOrders(localAccountID, false); foreach (var rOrd in remOrders) { int insID = 0; // пытаемся сопоставить инструмент if (_instrum_rid_lid.ContainsKey(rOrd.InsID)) { insID = _instrum_rid_lid[rOrd.InsID]; } if (insID == 0) { continue; // если не смогли сопоставить инструмент, то ничего больше сделать не можем } // ссылка на стоп-заявку int?soID = null; if (rOrd.StopOrderID != null && _stoporder_rid_lid.ContainsKey(rOrd.StopOrderID.Value)) { soID = _stoporder_rid_lid[rOrd.StopOrderID.Value]; } if (_order_rid_lid.ContainsKey(rOrd.OrderID)) { int lid = _order_rid_lid[rOrd.OrderID]; var order = orders.FirstOrDefault(r => r.OrderID == lid); if (order != null) // локальный найден { // сравниваем все по полной, хотя в реальности объект не может так сильно меняться bool isUpdate = false; if (order.InsID != insID) { order.InsID = insID; isUpdate = true; } if (order.BuySell != rOrd.BuySell) { order.BuySell = rOrd.BuySell; isUpdate = true; } if (order.LotCount != rOrd.LotCount) { order.LotCount = rOrd.LotCount; isUpdate = true; } if (order.Status != rOrd.Status) { order.Status = rOrd.Status; isUpdate = true; } if (order.OrderNo != rOrd.OrderNo) { order.OrderNo = rOrd.OrderNo; isUpdate = true; } if (order.Time != rOrd.Time) { order.Time = rOrd.Time; isUpdate = true; } if (order.Price != rOrd.Price) { order.Price = rOrd.Price; isUpdate = true; } if (order.StopOrderID != soID) { order.StopOrderID = soID; isUpdate = true; } if (isUpdate) { _accountDA.UpdateOrder(order); } } else // соответствие есть, но локальный не найден, значит соответствие уже не действительно { _order_rid_lid.Remove(rOrd.OrderID); // удаляем старое соответствие var ord = _accountDA.CreateOrder(localAccountID, rOrd.Time, insID, rOrd.BuySell, rOrd.LotCount, rOrd.Price, rOrd.Status, soID, rOrd.OrderNo); _order_rid_lid.Add(rOrd.OrderID, ord.OrderID); } } else // соответствие не найдено { var ord = _accountDA.CreateOrder(localAccountID, rOrd.Time, insID, rOrd.BuySell, rOrd.LotCount, rOrd.Price, rOrd.Status, soID, rOrd.OrderNo); _order_rid_lid.Add(rOrd.OrderID, ord.OrderID); } } }
/// <summary> /// Получить список заявок по счету /// </summary> /// <param name="accountID">Торговый счет</param> /// <param name="fromID">Начиная с указанного ID или все (null)</param> /// <returns>Список заявок</returns> public IEnumerable <Order> GetOrders(int accountID, int?fromID = null) { return(_accountDA.GetOrders(accountID, false, fromID)); }