Beispiel #1
0
        // private const string TableNameQuote = "QUOTE";
        /// <summary>
        /// получает котировки (свечи m1) по всем торгуемым активам на момент
        /// времени t меньше либо равный time
        /// </summary>
        public static Dictionary<string, CandleData> GetCandlesOnTime(DateTime? time)
        {
            var candles = new Dictionary<string, CandleData>();
            var cmdText =
                time.HasValue ?
                "WITH e AS ( select ticker, MAX([date]) as 'mxdate' from QUOTE where [date] <= '"
                + time.Value.ToString("yyyyMMdd HH:mm") +
                "' group by ticker ) select q.* " +
                "FROM e join QUOTE q on q.ticker = e.ticker and q.date = e.mxdate"
                :
                "WITH e AS ( select ticker, MAX([date]) as 'mxdate' from QUOTE group by ticker ) select q.* " +
                "FROM e join QUOTE q on q.ticker = e.ticker and q.date = e.mxdate";

            var cmd = new SqlCommand(cmdText);
            var values = new object[4];

            try
            {
                using (var conn = MakeSqlConnection())
                {
                    cmd.Connection = conn;
                    conn.Open();

                    using (var reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            if (reader.GetValues(values) != values.Length) continue;
                            var ticker = (Int16) values[0];
                            var symbol = DalSpot.Instance.GetSymbolByFXICode(ticker);
                            if (string.IsNullOrEmpty(symbol)) continue;

                            var pointValue = DalSpot.Instance.GetPrecision10(symbol);

                            var candle = new CandleData
                            {
                                timeOpen = (DateTime)values[1],
                                open = (float)(double)values[2],
                            };
                            var hlc = (int)values[3];
                            candle.MakeHlcFromOffset(hlc, pointValue);
                            candles.Add(symbol, candle);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("GetCandlesOnTime() - ошибка доступа к БД котировок", ex);
            }

            return candles;
        }
Beispiel #2
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)");
        }