public void Store(int tickerId, PendingTestResult testResult) { using (syncRoot.Lock()) { testResultByTicker[tickerId] = testResult; } }
public bool TryGetPendingTestResult(int tickerId, out PendingTestResult testResult) { using (syncRoot.Lock()) { return(testResultByTicker.TryGetValue(tickerId, out testResult)); } }
/// <summary> /// Подписаться на рыночные данные /// </summary> /// <param name="instrument"> /// Инструмент /// </param> public async Task <SubscriptionResult> Subscribe(Instrument instrument) { // Получаем контракт по инструменту var contract = await connector.ContractContainer.GetContractAsync(instrument); if (contract == null) { return(new SubscriptionResult(instrument, false, $"Can't subscribe to \"{instrument}\"")); } var tickerId = NextTickerId(); var pendingTestResult = new PendingTestResult(); // Сохраняем тикер marketDataTickers.Store(tickerId, instrument, pendingTestResult); // Подписываемся на рыночные данные const string genericTickList = "165"; // Miscellaneous Stats Socket.reqMktData(tickerId, contract, genericTickList, snapshot: false); var result = await pendingTestResult.WaitAsync(); return(new SubscriptionResult(instrument, result)); }
public void Store(int tickerId, Instrument instrument, PendingTestResult pendingTestResult) { using (syncRoot.Lock()) { Store(tickerId, instrument); testResultByTicker[tickerId] = pendingTestResult; } }
/// <summary> /// Проверить контракт /// </summary> /// <param name="contract"> /// Контракт /// </param> /// <returns> /// Ожидающая операция /// </returns> public PendingTestResult TestContract(Contract contract) { var testResult = new PendingTestResult(); var id = NextTickerId(); pendingTestResultTickerContainer.Store(id, testResult); contractDetailsContainer.Store(id, contract); if (!Socket.reqContractDetails(id, contract)) { testResult.Reject(); pendingTestResultTickerContainer.RemoveTickerId(id); contractDetailsContainer.RemoveTickerId(id); } return(testResult); }
/// <summary> /// Подождать заявку перед отправкой сделки /// </summary> public async Task WaitOrderForFill(Execution fill) { PendingTestResult pendingResult; using (containerLock.ReadLock()) { // Если заявка уже пришла или не ждём транзакций, то сделку можно отправлять сразу if (ordersByPermId.ContainsKey(fill.PermId) || !pendingTransactions.Any()) { return; } if (!pendingFillByPermId.TryGetValue(fill.PermId, out pendingResult)) { pendingFillByPermId[fill.PermId] = pendingResult = new PendingTestResult(); } } // Иначе ждём информации по заявке await pendingResult.WaitAsync(); }
public bool TryGetInstrumentAndPendingTestResult(int tickerId, out Instrument instrument, out PendingTestResult pendingTestResult) { using (syncRoot.Lock()) { if (TryGetInstrument(tickerId, out instrument)) { if (testResultByTicker.TryGetValue(tickerId, out pendingTestResult)) { testResultByTicker.Remove(tickerId); } return(true); } pendingTestResult = null; return(false); } }