private static List <CandleDataPacked> GetMinuteCandlesUnpacked(string symbol, DateTime start, DateTime end) { var tickerCode = DalSpot.Instance.GetFXICodeBySymbol(symbol); if (tickerCode == 0) { Logger.ErrorFormat("Ошибка в GetMinuteCandlesUnpacked: инструмент не определен: {0}", symbol); return(null); } var values = new object[3]; var candles = new List <CandleDataPacked>(); try { using (var connection = new SqlConnection(connectionString)) { var commandSql = string.Format("SELECT date, [open], HLC FROM QUOTE " + "WHERE ticker={0} AND date BETWEEN '{1:yyMMdd HH:mm}' " + "AND '{2:yyMMdd HH:mm}'", tickerCode, start, end); var command = new SqlCommand(commandSql) { Connection = connection }; connection.Open(); using (var reader = command.ExecuteReader()) { CandleDataPacked previousCandle = null; while (reader.Read()) { if (reader.GetValues(values) != values.Length) { continue; } var candle = new CandleDataPacked { timeOpen = (DateTime)values[0], open = (float)(double)values[1], HLC = (int)values[2] }; candle.close = candle.open; // default if (previousCandle != null) { previousCandle.close = candle.open; } previousCandle = candle; candles.Add(candle); } } } } catch (Exception ex) { Logger.ErrorFormat("Ошибка в GetMinuteCandlesUnpacked({0}, {1:dd.MM.yyyy HH:mm}, " + "{2:dd.MM.yyyy HH:mm}) : {3}", symbol, start, end, ex); return(null); } return(candles); }
public CandleData(CandleDataPacked spec, int pointCost) { open = spec.open; timeOpen = spec.timeOpen; timeClose = spec.timeOpen.AddMinutes(1); close = spec.close; MakeHlcFromOffset16(spec.HLC, pointCost); }
/// <summary> /// Вызывает хранимую процедуру 'GetLastQuote' или 'FindQuote' /// </summary> public QuoteData GetQuoteStoredProc(string ticker, DateTime?start = null) { if (string.IsNullOrEmpty(ticker)) { return(null); } SqlConnection conn = null; SqlDataReader rdr = null; var tickerId = DalSpot.Instance.GetFXICodeBySymbol(ticker); var date = default(DateTime); var open = -1f; var lhc = -1; try { var connectionString = ConfigurationManager.ConnectionStrings["QuoteBase"].ConnectionString; conn = new SqlConnection(connectionString); conn.Open(); var procName = start.HasValue ? "FindQuote" : "GetLastQuote"; var cmd = new SqlCommand(procName, conn) { CommandType = CommandType.StoredProcedure }; cmd.Parameters.Add(new SqlParameter("@ticker", tickerId)); if (start.HasValue) { cmd.Parameters.Add(new SqlParameter("@date", start.Value)); } rdr = cmd.ExecuteReader(); while (rdr.Read()) { if (!int.TryParse(rdr["ticker"].ToString(), out tickerId)) { return(null); } if (!DateTime.TryParse(rdr["date"].ToString(), out date)) { return(null); } if (!float.TryParse(rdr["open"].ToString(), out open)) { return(null); } if (!int.TryParse(rdr["HLC"].ToString(), out lhc)) { return(null); } } } catch (Exception ex) { Logger.Error("Ошибка в методе GetQuoteStoredProc", ex); return(null); } finally { if (conn != null) { conn.Close(); } if (rdr != null) { rdr.Close(); } } var candelDataPacked = new CandleDataPacked { HLC = lhc, open = open, timeOpen = date, close = open // default }; var candleData = new CandleData(candelDataPacked, DalSpot.Instance.GetPrecision10(ticker)); var useOpen = start.HasValue && date == start.Value; return(GetQuoteWithDefaultSpread(candleData, ticker, useOpen)); }