예제 #1
0
        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)");
        }
예제 #2
0
        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;
        }
예제 #3
0
 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)");
     }
 }