Esempio n. 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)");
        }
Esempio n. 2
0
        private static void ProcessUnzippedFile(string path)
        {
            //L,EUR,GBP,CHF,JPY,EURGBP,EURCHF,EURJPY,GBPCHF,GBPJPY,CHFJPY,CAD,EURCAD,AUD,AUDJPY,NZD,NZDJPY,XAU,XAG
            //S,EUR
            //D,41275
            //1,1.3184,1.3184,1.3184,1.3184

            using (var sr = new StreamReader(path, Encoding.ASCII))
            {
                var firstLine = sr.ReadLine();
                var tickers   = firstLine.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Skip(1).Select(
                    GetTickerFullName).ToList();

                var streams = tickers.ToDictionary(t => t, t => new StreamWriter(
                                                       path + "." + t, false, Encoding.ASCII));

                try
                {
                    StreamWriter currentStream = null;
                    var          curDay        = new DateTime();
                    DateTime?    lastSavedDate = null;

                    while (!sr.EndOfStream)
                    {
                        var line = sr.ReadLine();
                        if (string.IsNullOrEmpty(line))
                        {
                            continue;
                        }
                        if (line.StartsWith("S,"))
                        {
                            var currentTicker = GetTickerFullName(line.Substring("S,".Length));
                            currentStream = streams[currentTicker];
                            continue;
                        }
                        if (line.StartsWith("D,"))
                        {
                            var dayPart = line.Substring("D,".Length).ToInt();
                            curDay        = new DateTime(1900, 1, 1).AddDays(dayPart);
                            lastSavedDate = null;
                            continue;
                        }

                        if (currentStream == null)
                        {
                            continue;
                        }
                        var lineParts = line.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                        var time      = curDay.AddMinutes(lineParts[0].ToInt());
                        var open      = lineParts[1].ToFloatUniform();
                        var high      = lineParts[2].ToFloatUniform();
                        var low       = lineParts[3].ToFloatUniform();
                        var close     = lineParts[4].ToFloatUniform();
                        var candle    = new CandleData(open, high, low, close, time, time.AddMinutes(1));
                        var pointCost = open < 20 ? 10000 : open < 70 ? 1000 : 100;

                        if (lastSavedDate == null || lastSavedDate.Value != curDay)
                        {
                            lastSavedDate = curDay;
                            currentStream.WriteLine(lastSavedDate.Value.ToString("ddMMyyyy"), curDay);
                        }
                        currentStream.WriteLine("{0} {1} {2}",
                                                candle.timeOpen.ToString("HHmm"),
                                                candle.open.ToStringUniformPriceFormat(true),
                                                candle.GetHlcOffsetHEX16(pointCost));
                    }
                }
                finally
                {
                    foreach (var stream in streams)
                    {
                        stream.Value.Close();
                    }
                }
            }
        }