public void TestHlcFormat() { var candleData = new CandleData { open = (float) 1.2345, high = (float) 1.2355, low = (float) 1.2335, close = (float) 1.2344 }; var offset = candleData.GetHlcOffset(VersePointValue); Assert.AreEqual(0x7E7589, offset, "TestHlcFormat: GetHlcOffset error"); var line = candleData.GetHlcOffsetHEX(VersePointValue); Assert.AreEqual("7E7589", line, "TestHlcFormat: GetHlcOffsetHEX error"); var offset16 = candleData.GetHlcOffset16(VersePointValue); Assert.AreEqual(0x7F9B8063, offset16, "TestHlcFormat: GetHlcOffset16 error"); var line16 = candleData.GetHlcOffsetHEX16(VersePointValue); Assert.AreEqual("7F9B8063", line16, "TestHlcFormat: GetHlcOffsetHEX16 error"); var candle = new CandleData {open = candleData.open}; candle.MakeHlcFromOffset(offset, VersePointValue); Assert.AreEqual(candleData.high, candle.high, 0.00001, "TestHlcFormat: MakeHlcFromOffset error (high)"); Assert.AreEqual(candleData.low, candle.low, 0.00001, "TestHlcFormat: MakeHlcFromOffset error (low)"); Assert.AreEqual(candleData.close, candle.close, 0.00001, "TestHlcFormat: MakeHlcFromOffset error (close)"); candle.MakeHlcFromOffsetHEX(line, VersePointValue); Assert.AreEqual(candleData.high, candle.high, 0.00001, "TestHlcFormat: MakeHlcFromOffsetHEX error (high)"); Assert.AreEqual(candleData.low, candle.low, 0.00001, "TestHlcFormat: MakeHlcFromOffsetHEX error (low)"); Assert.AreEqual(candleData.close, candle.close, 0.00001, "TestHlcFormat: MakeHlcFromOffsetHEX error (close)"); candle.MakeHlcFromOffset16(offset16, VersePointValue); Assert.AreEqual(candleData.high, candle.high, 0.00001, "TestHlcFormat: MakeHlcFromOffset16 error (high)"); Assert.AreEqual(candleData.low, candle.low, 0.00001, "TestHlcFormat: MakeHlcFromOffset16 error (low)"); candle.MakeHlcFromOffsetHEX16(line16, VersePointValue); Assert.AreEqual(candleData.high, candle.high, 0.00001, "TestHlcFormat: MakeHlcFromOffset16 error (high)"); Assert.AreEqual(candleData.low, candle.low, 0.00001, "TestHlcFormat: MakeHlcFromOffset16 error (low)"); }
public static List<CandleData> ReadTopNumCandles(string symbol, int count, DateTime dateStart, DateTime dateEnd) { var candles = new List<CandleData>(); var ticker = DalSpot.Instance.GetFXICodeBySymbol(symbol); if (ticker == 0) return candles; var pointValue = DalSpot.Instance.GetPrecision10(symbol); var cmdText = string.Format("select top({0}) date, [open], HLC from QUOTE where ticker={1} and " + "date between '{2:yyyyMMdd HH:mm}' and '{3:yyyyMMdd HH:mm}'", count, ticker, dateStart, dateEnd); var cmd = new SqlCommand(cmdText); var values = new object[3]; try { using (var connection = new SqlConnection(connectionString)) { cmd.Connection = connection; connection.Open(); using (var reader = cmd.ExecuteReader()) { CandleData previousCandle = null; while (reader.Read()) { if (reader.GetValues(values) != values.Length) continue; var candle = new CandleData { timeOpen = (DateTime) values[0], open = (float) (double) values[1], }; var hlc = (int) values[2]; candle.MakeHlcFromOffset16(hlc, pointValue); if (previousCandle != null) { previousCandle.close = candle.open; previousCandle.high = Math.Max(candle.open, previousCandle.high); previousCandle.low = Math.Min(candle.open, previousCandle.low); } previousCandle = candle; candles.Add(candle); } } } } catch (Exception ex) { Logger.Error("ReadTopNumCandles() error", ex); } return candles; }
public void TestPackedCandleStream() { var stream = new PackedCandleStream( srcCandles.Select( c => new CandleDataPacked { timeOpen = c.timeOpen, open = c.open, HLC = c.GetHlcOffset16(VersePointValue), close = c.close }).ToList(), true); var parsedCandles = stream.GetCandles().Select(c => { var candle = new CandleData {timeOpen = c.timeOpen, open = c.open, close = c.close}; candle.MakeHlcFromOffset16(c.HLC, VersePointValue); return candle; }).ToList(); for (var candleIndex = 0; candleIndex < srcCandles.Count; candleIndex++) { var candle = srcCandles[candleIndex]; var parsedCandle = parsedCandles[candleIndex]; Assert.AreEqual(candle.high, parsedCandle.high, 0.000001, "TestPackedCandleStream: ParseLine error (high)"); Assert.AreEqual(candle.low, parsedCandle.low, 0.000001, "TestPackedCandleStream: ParseLine error (low)"); Assert.AreEqual(candle.close, parsedCandle.close, 0.000001, "TestPackedCandleStream: ParseLine error (close)"); } }