/// <summary> /// Начать выгрузку данных по инструменту. /// </summary> /// <param name="namePaper">имя бумаги которую будем запускать</param> /// <param name="timeFrameBuilder">объект несущий </param> /// <returns>В случае удачи возвращает CandleSeries /// в случае неудачи null</returns> public CandleSeries StartThisSecurity(string namePaper, TimeFrameBuilder timeFrameBuilder) { try { if (_lastStartServerTime.AddSeconds(15) > DateTime.Now) { return(null); } lock (_lockerStarter) { if (namePaper == "") { return(null); } // надо запустить сервер если он ещё отключен if (ServerStatus != ServerConnectStatus.Connect) { //MessageBox.Show("Сервер не запущен. Скачивание данных прервано. Инструмент: " + namePaper); return(null); } if (_securities == null || _portfolios == null) { Thread.Sleep(5000); return(null); } if (_lastStartServerTime != DateTime.MinValue && _lastStartServerTime.AddSeconds(15) > DateTime.Now) { return(null); } Security security = null; for (int i = 0; _securities != null && i < _securities.Count; i++) { if (_securities[i].Name == namePaper) { security = _securities[i]; break; } } if (security == null) { return(null); } _tickStorage.SetSecurityToSave(security); _krakenClient.ListenSecurity(namePaper); // 2 создаём серию свечек CandleSeries series = new CandleSeries(timeFrameBuilder, security); _candleManager.StartSeries(series); SendLogMessage("Инструмент " + series.Security.Name + "ТаймФрейм " + series.TimeFrame + " успешно подключен на получение данных и прослушивание свечек", LogMessageType.System); return(series); } } catch (Exception error) { SendLogMessage(error.ToString(), LogMessageType.Error); return(null); } }
/// <summary> /// Начать выгрузку данных по инструменту. /// </summary> /// <param name="namePaper">имя бумаги которую будем запускать</param> /// <param name="timeFrameBuilder">объект несущий </param> /// <returns>В случае удачи возвращает CandleSeries /// в случае неудачи null</returns> public CandleSeries StartThisSecurity(string namePaper, TimeFrameBuilder timeFrameBuilder) { try { if (_lastStartServerTime.AddSeconds(15) > DateTime.Now) { return(null); } lock (_lockerStarter) { if (namePaper == "") { return(null); } // надо запустить сервер если он ещё отключен if (ServerStatus != ServerConnectStatus.Connect) { //MessageBox.Show("Сервер не запущен. Скачивание данных прервано. Инструмент: " + namePaper); return(null); } if (_securities == null || _portfolios == null) { Thread.Sleep(5000); return(null); } if (_lastStartServerTime != DateTime.MinValue && _lastStartServerTime.AddSeconds(15) > DateTime.Now) { return(null); } Security security = null; for (int i = 0; _securities != null && i < _securities.Count; i++) { if (_securities[i].Name == namePaper) { security = _securities[i]; break; } } if (security == null) { return(null); } if (_connectedContracts == null) { _connectedContracts = new List <string>(); } if (_connectedContracts.Find(s => s == security.Name) == null) { _connectedContracts.Add(security.Name); } _tickStorage.SetSecurityToSave(security); // 2 создаём серию свечек CandleSeries series = new CandleSeries(timeFrameBuilder, security); if (NeadToGetCandles(timeFrameBuilder.TimeFrame)) { // подгружаем в серию свечки, если коннектор это позволяет short count = 500; string price = "MBA"; string instrument = security.Name; string granularity = GetTimeFrameInOandaFormat(timeFrameBuilder.TimeFrame).ToString(); var parameters = new Dictionary <string, string>(); parameters.Add("price", price); parameters.Add("granularity", granularity); parameters.Add("count", count.ToString()); Task <List <CandlestickPlus> > result = Rest20.GetCandlesAsync(instrument, parameters); while (!result.IsCanceled && !result.IsCompleted && !result.IsFaulted) { Thread.Sleep(10); } List <CandlestickPlus> candleOanda = result.Result; List <Candle> candlesOsEngine = new List <Candle>(); for (int i = 0; i < candleOanda.Count; i++) { Candle newCandle = new Candle(); newCandle.Open = Convert.ToDecimal(candleOanda[i].bid.o); newCandle.High = Convert.ToDecimal(candleOanda[i].bid.h); newCandle.Low = Convert.ToDecimal(candleOanda[i].bid.l); newCandle.Close = Convert.ToDecimal(candleOanda[i].bid.c); newCandle.TimeStart = DateTime.Parse(candleOanda[i].time); newCandle.State = CandleStates.Finished; newCandle.Volume = candleOanda[i].volume; candlesOsEngine.Add(newCandle); } series.CandlesAll = candlesOsEngine; } _candleManager.StartSeries(series); SendLogMessage("Инструмент " + series.Security.Name + "ТаймФрейм " + series.TimeFrame + " успешно подключен на получение данных и прослушивание свечек", LogMessageType.System); return(series); } } catch (Exception error) { SendLogMessage(error.ToString(), LogMessageType.Error); return(null); } }