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)); } } }
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(); }
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(); }
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; } }
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(); } }
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; } }
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)); } } }
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;}