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));
     }
 }
Пример #3
0
        /// <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;
            }
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
            }
        }