/// <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(); }
/// <summary> /// Получить список стоп-заявок по счету /// </summary> /// <param name="accountID">Торговый счет</param> /// <param name="fromID">Начиная с указанного ID или все (null)</param> /// <returns>Список заявок</returns> public IEnumerable <StopOrder> GetStopOrders(int accountID, int?fromID = null) { return(_accountDA.GetStopOrders(accountID, false, fromID)); }
/// <summary> /// Полная синхронизация стоп-заявок /// </summary> private async Task SyncStopOrdersFull(ISyncPipeServer sps, int localAccountID, int remoteAccountID) { var remStopOrders = await sps.GetStopOrders(remoteAccountID, 0); if (remStopOrders == null) { return; } var stopOrders = _accountDA.GetStopOrders(localAccountID, false); foreach (var rso in remStopOrders) { int insID = 0; // пытаемся сопоставить инструмент if (_instrum_rid_lid.ContainsKey(rso.InsID)) { insID = _instrum_rid_lid[rso.InsID]; } if (insID == 0) { continue; // если не смогли сопоставить инструмент, то ничего больше сделать не можем } if (_stoporder_rid_lid.ContainsKey(rso.StopOrderID)) { int lid = _stoporder_rid_lid[rso.StopOrderID]; var stopOrder = stopOrders.FirstOrDefault(r => r.StopOrderID == lid); if (stopOrder != null) // локальный найден { // сравниваем все по полной, хотя в реальности объект не может так сильно меняться bool isUpdate = false; if (stopOrder.InsID != insID) { stopOrder.InsID = insID; isUpdate = true; } if (stopOrder.AlertPrice != rso.AlertPrice) { stopOrder.AlertPrice = rso.AlertPrice; isUpdate = true; } if (stopOrder.BuySell != rso.BuySell) { stopOrder.BuySell = rso.BuySell; isUpdate = true; } if (stopOrder.LotCount != rso.LotCount) { stopOrder.LotCount = rso.LotCount; isUpdate = true; } if (stopOrder.Status != rso.Status) { stopOrder.Status = rso.Status; isUpdate = true; } if (stopOrder.StopOrderNo != rso.StopOrderNo) { stopOrder.StopOrderNo = rso.StopOrderNo; isUpdate = true; } if (stopOrder.StopType != rso.StopType) { stopOrder.StopType = rso.StopType; isUpdate = true; } if (stopOrder.Time != rso.Time) { stopOrder.Time = rso.Time; isUpdate = true; } if (stopOrder.Price != rso.Price) { stopOrder.Price = rso.Price; isUpdate = true; } if (stopOrder.EndTime != rso.EndTime) { stopOrder.EndTime = rso.EndTime; isUpdate = true; } if (stopOrder.CompleteTime != rso.CompleteTime) { stopOrder.CompleteTime = rso.CompleteTime; isUpdate = true; } if (isUpdate) { _accountDA.UpdateStopOrder(stopOrder); } } else // соответствие есть, но локальный не найден, значит соответствие уже не действительно { _stoporder_rid_lid.Remove(rso.StopOrderID); // удаляем старое соответствие var so = _accountDA.CreateStopOrder(localAccountID, rso.Time, insID, rso.BuySell, rso.StopType, rso.EndTime, rso.AlertPrice, rso.Price, rso.LotCount, rso.Status, rso.CompleteTime, rso.StopOrderNo); _stoporder_rid_lid.Add(rso.StopOrderID, so.StopOrderID); } } else // соответствие не найдено { var so = _accountDA.CreateStopOrder(localAccountID, rso.Time, insID, rso.BuySell, rso.StopType, rso.EndTime, rso.AlertPrice, rso.Price, rso.LotCount, rso.Status, rso.CompleteTime, rso.StopOrderNo); _stoporder_rid_lid.Add(rso.StopOrderID, so.StopOrderID); } } }
public IEnumerable <StopOrder> GetStopOrders(int accountId, int idFrom) { return(_da.GetStopOrders(accountId, false, idFrom).ToList()); }