Example #1
0
        private void btnQuotes_Click(object sender, EventArgs e)
        {
            using (var fs = new LocalFileSystem())
            {
                var sdb = new SecDBFileReader(fs, new FileSystemSessionConnectParams(), tbSecDBFile.Text);

                Text = "Exchange: {0}, Origin time: {1}, {2}".Args(sdb.SystemHeader.Exchange,
                                                                   sdb.SystemHeader.Date + sdb.SystemHeader.OriginLocalTimeOffset,
                                                                   sdb.SystemHeader.OriginLocalTimeName);


                var sw = System.Diagnostics.Stopwatch.StartNew();

                var cnt = sdb.GetAllStreamData().Count(s => s is SecDBFileReader.SecondSample);
                var el  = sw.ElapsedMilliseconds;

                MessageBox.Show("{0} samples in {1} msec at {2}/sec".Args(cnt, el, cnt / (el / 1000d)));

                try
                {
                    System.IO.File.WriteAllText(@"c:\Users\Anton\Desktop\SEC_DBDUMP.json", sdb.GetAllStreamData().Take(tbHowMany.Text.AsInt()).ToJSON(JSONWritingOptions.PrettyPrint));
                }
                catch (Exception err)
                {
                    MessageBox.Show("{0}\n------------\n{1}".Args(err.ToMessageWithType(), err.StackTrace));
                }
            }
        }
Example #2
0
 private void cboFile_SelectedValueChanged(object sender, EventArgs e)
 {
     m_SecDBFile = new SecDBFileReader(m_FS, new FileSystemSessionConnectParams(), cboFile.Text);
     Text        = "Exchange: {0}, Origin time: {1}, {2}".Args(m_SecDBFile.SystemHeader.Exchange,
                                                               m_SecDBFile.SystemHeader.Date + m_SecDBFile.SystemHeader.OriginLocalTimeOffset,
                                                               m_SecDBFile.SystemHeader.OriginLocalTimeName);
     loadData();
 }
Example #3
0
 private void cboFile_SelectedValueChanged(object sender, EventArgs e)
 {
     m_SecDBFile = new SecDBFileReader(m_FS, new FileSystemSessionConnectParams(), cboFile.Text);
       Text = "Exchange: {0}, Origin time: {1}, {2}".Args(m_SecDBFile.SystemHeader.Exchange,
                                                 m_SecDBFile.SystemHeader.Date+m_SecDBFile.SystemHeader.OriginLocalTimeOffset,
                                                 m_SecDBFile.SystemHeader.OriginLocalTimeName);
       loadData();
 }
Example #4
0
        private void btnSynthCandles_Click(object sender, EventArgs e)
        {
            using (var fs = new LocalFileSystem())
            {
                var sdb = new SecDBFileReader(fs, new FileSystemSessionConnectParams(), tbSecDBFile.Text);

                //var tradedata = sdb.GetAllStreamData()
                //                   .Where( s => s is SecDBFileReader.TradeSample)
                //                   .Cast<SecDBFileReader.TradeSample>()
                //                   .Select( t => new CandleSample(t.TimeStamp)
                //                                 {
                //                                   OpenPrice = t.Price,
                //                                   ClosePrice = t.Price,
                //                                   HighPrice = t.Price,
                //                                   LowPrice = t.Price
                //                                 }
                //                    );

                var data = sdb.GetAllStreamData().Where(s => s is SecDBFileReader.TradeSample).SynthesizeCandles(tbSecPeriod.Text.AsUInt(),
                                                                                                                 (cs, qs, i) => {},
                                                                                                                 (cs, ts, i) => // "Beautifier function"
                {
                    if (i == 0)
                    {
                        cs.OpenPrice = ts.Price;
                    }
                    cs.HighPrice  = Math.Max(cs.HighPrice, ts.Price);
                    cs.LowPrice   = cs.LowPrice != 0f ? Math.Min(cs.LowPrice, ts.Price) : ts.Price;
                    cs.ClosePrice = ts.Price;

                    if (ts.IsQty)
                    {
                        if (ts.Side == SecDBFileReader.TradeSample.SideType.Buy)
                        {
                            cs.BuyVolume += ts.Qty;
                        }
                        else
                        {
                            cs.SellVolume += ts.Qty;
                        }
                    }
                }
                                                                                                                 );


                m_Data = new CandleTimeSeries("Candles", 0);

                m_Data.Views.Register(
                    new CandleView("Candle View", 1)
                {
                    ShowYLevels  = true,
                    ShowBalloons = true
                });

                //m_Data.Views.Register(
                //    new CandleMidLineView("MidLineHiLo", 1)
                //    {
                //      MidLineType = MidLineType.HighLow,
                //      LineStyle = new LineStyle{ Color = Color.FromArgb(200, 255, 0,0), Width = 2}
                //    });

                m_Data.Views.Register(new CandleBuySellView("BuySell", 2)
                {
                });

                data.ForEach(s => m_Data.Add(s));

                m_Data.YLevels.Register(new TimeSeries.YLevel("Lo", 0)
                {
                    Value = m_Data.Data.Min(cs => cs.ClosePrice), AffectsScale = true, HLineStyle = new LineStyle {
                        Color = Color.Red, Width = 2
                    }
                });
                m_Data.YLevels.Register(new TimeSeries.YLevel("Hi", 0)
                {
                    Value = m_Data.Data.Max(cs => cs.ClosePrice), AffectsScale = true, HLineStyle = new LineStyle {
                        Color = Color.Blue, Width = 2
                    }
                });

                chart.Series = m_Data;
            }
        }
Example #5
0
        private void btnLoadSecDB_Click(object sender, EventArgs e)
        {
            using (var fs = new LocalFileSystem())
            {
                var sdb = new SecDBFileReader(fs, new FileSystemSessionConnectParams(), tbSecDBFile.Text);

                Text = "Exchange: {0}, Origin time: {1}, {2}".Args(sdb.SystemHeader.Exchange,
                                                                   sdb.SystemHeader.Date + sdb.SystemHeader.OriginLocalTimeOffset,
                                                                   sdb.SystemHeader.OriginLocalTimeName);

                MessageBox.Show(sdb.Headers.ToJSON());

                m_Data = new CandleTimeSeries("From file", 0);
                m_Data.YLevels.Register(new TimeSeries.YLevel("LAST_PRICE", 0)
                {
                    Value = 0f
                });                                                                  //,  HLineStyle = new LineStyle{Color=Color.Red}});

                m_Data.Views.Register(new CandleView("Candles", 0)
                {
                    ShowYLevels = true, ShowBalloons = true
                });
                m_Data.Views.Register(new CandleBuySellView("BuySell", 0)
                {
                });

                m_Data.Views.Register(
                    new CandleMidLineView("MidLineHiLo", 1)
                {
                    MidLineType = MidLineType.HighLow,
                    LineStyle   = new LineStyle {
                        Color = Color.FromArgb(200, 255, 0, 0), Width = 2
                    }
                });

                m_Data.Views.Register(
                    new CandleMidLineView("MidLineOpCl1", 2)
                {
                    MidLineType = MidLineType.OpenClose,
                    LineStyle   = new LineStyle {
                        Color = Color.FromArgb(200, 50, 0, 200), Width = 1.5f, DashStyle = System.Drawing.Drawing2D.DashStyle.Dot
                    }
                });

                m_Data.MaxSamples = 100000;

                var data = sdb.GetCandleDataAsCandleSamples(sdb.CandlesMetadata.Resolutions.Min());

                data.ForEach(s => m_Data.Add(s));


                m_Data.YLevels["LAST_PRICE"].Value = m_Data.DataReveresed.First().ClosePrice;
                m_Data.YLevels.Register(new TimeSeries.YLevel("Lo", 0)
                {
                    Value = m_Data.Data.Min(cs => cs.LowPrice), AffectsScale = false, HLineStyle = new LineStyle {
                        Color = Color.Red, Width = 2
                    }
                });
                m_Data.YLevels.Register(new TimeSeries.YLevel("Hi", 0)
                {
                    Value = m_Data.Data.Max(cs => cs.HighPrice), AffectsScale = false, HLineStyle = new LineStyle {
                        Color = Color.Blue, Width = 2
                    }
                });

                m_Data.Views.Register(new CandleView("Candles2", 0, "MLPane")
                {
                    BlackWhite = true, ShowBalloons = true
                });
                m_Data.Views.Register(
                    new CandleMidLineView("MidLineOpCl2", 1, "MLPane")
                {
                    MidLineType = MidLineType.OpenClose,
                    ShowYLevels = true,
                    LineStyle   = new LineStyle {
                        Color = Color.FromArgb(200, 255, 180, 0), Width = 3f
                    }
                });

                chart.Series = m_Data;
                //chart.NotifySeriesChange();
            }
        }
Example #6
0
        private void btnSynthCandles_Click(object sender, EventArgs e)
        {
            using(var fs = new LocalFileSystem())
              {
            var sdb = new SecDBFileReader(fs, new FileSystemSessionConnectParams(), tbSecDBFile.Text);

            //var tradedata = sdb.GetAllStreamData()
            //                   .Where( s => s is SecDBFileReader.TradeSample)
            //                   .Cast<SecDBFileReader.TradeSample>()
            //                   .Select( t => new CandleSample(t.TimeStamp)
            //                                 {
            //                                   OpenPrice = t.Price,
            //                                   ClosePrice = t.Price,
            //                                   HighPrice = t.Price,
            //                                   LowPrice = t.Price
            //                                 }
            //                    );

            var data = sdb.GetAllStreamData().Where(s => s is SecDBFileReader.TradeSample).SynthesizeCandles(tbSecPeriod.Text.AsUInt(),
             (cs, qs, i) => {},
             (cs, ts, i) => // "Beautifier function"
              {
                if (i==0) cs.OpenPrice = ts.Price;
                cs.HighPrice = Math.Max(cs.HighPrice, ts.Price);
                cs.LowPrice  = cs.LowPrice!=0f ? Math.Min( cs.LowPrice , ts.Price) : ts.Price;
                cs.ClosePrice = ts.Price;

                if (ts.IsQty)
                {
                  if (ts.Side==SecDBFileReader.TradeSample.SideType.Buy)
                    cs.BuyVolume += ts.Qty;
                  else
                    cs.SellVolume += ts.Qty;
                }
              }
            );

            m_Data = new CandleTimeSeries("Candles", 0);

            m_Data.Views.Register(
            new CandleView("Candle View", 1)
            {
              ShowYLevels = true,
              ShowBalloons = true
            });

            //m_Data.Views.Register(
            //    new CandleMidLineView("MidLineHiLo", 1)
            //    {
            //      MidLineType = MidLineType.HighLow,
            //      LineStyle = new LineStyle{ Color = Color.FromArgb(200, 255, 0,0), Width = 2}
            //    });

            m_Data.Views.Register( new CandleBuySellView("BuySell", 2){} );

            data.ForEach( s =>  m_Data.Add( s ));

            m_Data.YLevels.Register( new TimeSeries.YLevel("Lo", 0){Value = m_Data.Data.Min(cs=>cs.ClosePrice), AffectsScale = true,  HLineStyle = new LineStyle{Color=Color.Red, Width =2}});
            m_Data.YLevels.Register( new TimeSeries.YLevel("Hi", 0){Value = m_Data.Data.Max(cs=>cs.ClosePrice), AffectsScale = true, HLineStyle = new LineStyle{Color=Color.Blue, Width =2}});

            chart.Series = m_Data;
              }
        }
Example #7
0
        private void btnQuotes_Click(object sender, EventArgs e)
        {
            using(var fs = new LocalFileSystem())
              {
            var sdb = new SecDBFileReader(fs, new FileSystemSessionConnectParams(), tbSecDBFile.Text);

            Text = "Exchange: {0}, Origin time: {1}, {2}".Args(sdb.SystemHeader.Exchange,
                                                        sdb.SystemHeader.Date+sdb.SystemHeader.OriginLocalTimeOffset,
                                                        sdb.SystemHeader.OriginLocalTimeName);

            var sw = System.Diagnostics.Stopwatch.StartNew();

            var cnt = sdb.GetAllStreamData().Count( s => s is SecDBFileReader.SecondSample);
            var el = sw.ElapsedMilliseconds;

            MessageBox.Show("{0} samples in {1} msec at {2}/sec".Args(cnt, el, cnt / (el /1000d)));

            try
            {
             System.IO.File.WriteAllText(@"c:\Users\Anton\Desktop\SEC_DBDUMP.json", sdb.GetAllStreamData().Take(tbHowMany.Text.AsInt()).ToJSON( JSONWritingOptions.PrettyPrint) );
            }
            catch(Exception err)
            {
              MessageBox.Show("{0}\n------------\n{1}".Args(err.ToMessageWithType(), err.StackTrace));
            }
              }
        }
Example #8
0
        private void btnLoadSecDB_Click(object sender, EventArgs e)
        {
            using(var fs = new LocalFileSystem())
              {
            var sdb = new SecDBFileReader(fs, new FileSystemSessionConnectParams(), tbSecDBFile.Text);

            Text = "Exchange: {0}, Origin time: {1}, {2}".Args(sdb.SystemHeader.Exchange,
                                                        sdb.SystemHeader.Date+sdb.SystemHeader.OriginLocalTimeOffset,
                                                        sdb.SystemHeader.OriginLocalTimeName);

            MessageBox.Show( sdb.Headers.ToJSON() );

            m_Data = new CandleTimeSeries("From file", 0);
            m_Data.YLevels.Register( new TimeSeries.YLevel("LAST_PRICE", 0){Value = 0f});//,  HLineStyle = new LineStyle{Color=Color.Red}});

            m_Data.Views.Register( new CandleView("Candles", 0){ ShowYLevels = true, ShowBalloons = true } );
            m_Data.Views.Register( new CandleBuySellView("BuySell", 0){} );

            m_Data.Views.Register(
            new CandleMidLineView("MidLineHiLo", 1)
            {
              MidLineType = MidLineType.HighLow,
              LineStyle = new LineStyle{ Color = Color.FromArgb(200, 255, 0,0), Width = 2}
            });

            m_Data.Views.Register(
            new CandleMidLineView("MidLineOpCl1", 2)
            {
              MidLineType = MidLineType.OpenClose,
              LineStyle = new LineStyle{ Color = Color.FromArgb(200, 50, 0, 200), Width = 1.5f, DashStyle = System.Drawing.Drawing2D.DashStyle.Dot}
            });

            m_Data.MaxSamples = 100000;

            var data = sdb.GetCandleDataAsCandleSamples( sdb.CandlesMetadata.Resolutions.Min() );

            data.ForEach( s =>  m_Data.Add( s ));

            m_Data.YLevels["LAST_PRICE"].Value = m_Data.DataReveresed.First().ClosePrice;
            m_Data.YLevels.Register( new TimeSeries.YLevel("Lo", 0){Value = m_Data.Data.Min(cs=>cs.LowPrice), AffectsScale = false,  HLineStyle = new LineStyle{Color=Color.Red, Width =2}});
            m_Data.YLevels.Register( new TimeSeries.YLevel("Hi", 0){Value = m_Data.Data.Max(cs=>cs.HighPrice), AffectsScale = false, HLineStyle = new LineStyle{Color=Color.Blue, Width =2}});

            m_Data.Views.Register( new CandleView("Candles2", 0, "MLPane"){ BlackWhite = true, ShowBalloons = true});
            m_Data.Views.Register(
            new CandleMidLineView("MidLineOpCl2", 1, "MLPane")
            {
              MidLineType = MidLineType.OpenClose,
              ShowYLevels = true,
              LineStyle = new LineStyle{ Color = Color.FromArgb(200, 255, 180, 0), Width = 3f}
            });

            chart.Series = m_Data;
            //chart.NotifySeriesChange();
              }
        }
        internal OrderSample(SecDBFileReader file, OrderSample ps, DateTime ts, Stream stream) : base(ts)
        {
           var flags = SecDBPrimitives.ReadByte(stream);

           InternalOrder =    (flags & (1)) !=0;
           CancelAll =        (flags >> 1) !=0;

           if (!CancelAll)
           {
             IsActive =       (flags >> 2) !=0;
             IsReplacement =  (flags >> 3) !=0;
             Side = (SideType)((flags >> 4)&0x1);
             
             IsTakeProfit =   (flags >> 5) !=0;
             IsStopLoss    =   (flags >> 6) !=0;

             OrderID = SecDBPrimitives.ReadSLEB128(stream);

             if (IsActive)
             {
                 var price = SecDBPrimitives.ReadSLEB128(stream);
                 if (ps!=null)
                    PriceStep = price;
                  else
                    PriceStep = ps.PriceStep + price;

                 Price = PriceStep * file.SystemHeader.PriceStep;

                 Qty  = SecDBPrimitives.ReadSLEB128(stream);
             }

             if (IsReplacement)  
              OldOrderID = SecDBPrimitives.ReadSLEB128(stream);
           }
        }
        internal TradeSample(SecDBFileReader file, TradeSample ps, DateTime ts, Stream stream) : base(ts)
        {
           var flags = SecDBPrimitives.ReadByte(stream);

           InternalTrade =    (flags & (1)) !=0;
           Aggressor = (AggressorType)((flags >> 1)&0x3);
           Side = (SideType)((flags >> 3)&0x1);

           IsQty =      (flags & (1 << 4)) !=0;
           IsTradeID =  (flags & (1 << 5)) !=0;
           IsOrderID =  (flags & (1 << 6)) !=0;

           var price = SecDBPrimitives.ReadSLEB128(stream);
           if (ps==null)
              PriceStep = price;
            else
              PriceStep = ps.PriceStep + price;

           Price = PriceStep * file.SystemHeader.PriceStep;

           if (IsQty)      Qty  = SecDBPrimitives.ReadSLEB128(stream);
           if (IsTradeID)  TradeID = SecDBPrimitives.ReadULEB128(stream);
           if (IsOrderID)  OrderID = SecDBPrimitives.ReadULEB128(stream);
        }
        internal QuoteSample(SecDBFileReader file, QuoteSample ps, DateTime ts, Stream stream) : base(ts)
        {
          var bt = SecDBPrimitives.ReadByte(stream);

          BidCount =  bt & 0xf;
          AskCount =  (bt & 0xf0) >> 4;
          var cnt = BidCount + AskCount;

          if (cnt==0)
            throw new FinancialException(StringConsts.SECDB_FILE_HEADER_ERROR + "QuoteSample: no px levels");

          PriceLevels = new PxLevel[ cnt ];

          var pxStep = file.SystemHeader.PriceStep;

          var currentPrice = 0L;
          for(var i=0; i<cnt; i++)
          {
            var price = SecDBPrimitives.ReadSLEB128(stream);
            if (i==0)
            {
              if (ps==null)
               currentPrice = price;
              else
              {
                currentPrice = ps.PriceLevels[0].PriceStep;
                currentPrice += price;
              }
            }
            else
             currentPrice += price;

            var qty = SecDBPrimitives.ReadSLEB128(stream);

            var pl = new PxLevel{ PriceStep = currentPrice, Price = currentPrice * pxStep, Quantity = qty };
            PriceLevels[i] = pl;
          }
        }
        internal CandleData(SecDBFileReader file, int sampleNumber, DateTime timestamp, Stream stream)
        {
          File = file;

          SampleNumber = sampleNumber;
          TimeStamp = timestamp;
          
          OpenSteps  = SecDBPrimitives.ReadInt32( stream );
          HighSteps  = SecDBPrimitives.ReadInt32( stream );
          LowSteps   = SecDBPrimitives.ReadInt32( stream );
          CloseSteps = SecDBPrimitives.ReadInt32( stream );
          
          BuyVolume  = SecDBPrimitives.ReadInt32( stream );
          SellVolume = SecDBPrimitives.ReadInt32( stream );

          FirstStreamOffset = SecDBPrimitives.ReadUInt64( stream );
        }
 internal CandleHeader(SecDBFileReader file,
                       ushort resolutionSec,
                       uint startTimeOffsetSec,
                       DateTime startTimeDt,
                       uint count,
                       uint offset)
 {
   File = file;
   ResolutionSec = resolutionSec;
   StartTimeMidnightOffsetSec = startTimeOffsetSec;
   StartTime = startTimeDt;
   CandleCount = count;
   DataOffset = offset;
 }
 internal CandlesMeta(SecDBFileReader file, CandleHeader[] candles) { File = file; Candles = candles;}