private IEnumerable <(TimeSeries, Color)> GetIndicators()
        {
            CandleTimeSeries series = Context.Instance.HistoryCandleTimeSeries.Candles
                                      .ToCandleTimeSeries();

            return(UtilsPresenter.GetIndicators(series, view.IndicatorPeriod, view.SmoothingPeriod));
        }
        public Tendency Classify(DateTime day, CandleTimeSeries series)
        {
            AverageDirectionalMovementIndex adx = AverageDirectionalMovementIndex.Create(directionalIndexPeriod, averagePeriod);
            double   adxValue    = adx.GetValueAt(series, day.Date);
            double   adxSlope    = 0;
            DateTime previousDay = day.Date.Subtract(TimeSpan.FromDays(1));
            bool     containsPreviousDayCandle = series.ContainsCandleAt(previousDay);

            if (containsPreviousDayCandle)
            {
                double previousDayAdxValue = adx.GetValueAt(series, previousDay);
                adxSlope = (adxValue - previousDayAdxValue) / 1;
            }
            DirectionalMovementPlus diPlus   = DirectionalMovementPlus.Create();
            double diPlusValue               = diPlus.GetValueAt(series, day.Date);
            DirectionalMovementMinus diMinus = DirectionalMovementMinus.Create();
            double diMinusValue              = diMinus.GetValueAt(series, day.Date);

            if (adxValue >= adxMinimumValue &&
                adxSlope >= 0)
            {
                return(diPlusValue > diMinusValue
                    ? Tendency.Up
                    : Tendency.Down);
            }
            return(Tendency.Range);
        }
        private void View_LoadDataRequest()
        {
            CandleTimeSeries data = GetCandleTimeSeries();
            IEnumerable <(TimeSeries, Color)> indicators = GetIndicators();

            view.LoadData(data, indicators);
        }
예제 #4
0
 public PriceVariationAdxSustainedSlopeMaxProvider(CandleTimeSeries candleSeries, TimeSeries dx, TimeSeries adx, TimeSeries diPlus, TimeSeries diMinus)
 {
     this.candleSeries = candleSeries;
     this.dx           = dx;
     this.adx          = adx;
     this.diPlus       = diPlus;
     this.diMinus      = diMinus;
 }
예제 #5
0
 public Trader(IWallet wallet, IBroker broker, List <IStrategy> strategies, CandleTimeSeries series, TimeSpan workPeriod)
 {
     this.wallet     = wallet;
     this.broker     = broker;
     this.strategies = strategies;
     this.series     = series;
     this.workPeriod = workPeriod;
 }
 public BenefitFollowingStrategyProvider(CandleTimeSeries series, TimeSeries dx, TimeSeries adx, TimeSeries diPlus, TimeSeries diMinus)
 {
     this.series  = series;
     this.dx      = dx;
     this.adx     = adx;
     this.diPlus  = diPlus;
     this.diMinus = diMinus;
 }
예제 #7
0
 public CandleQuantityAdxSustainedSlopeDataProvider(CandleTimeSeries series, TimeSeries dx, TimeSeries adx, TimeSeries diPlus, TimeSeries diMinus)
 {
     this.series  = series;
     this.dx      = dx;
     this.adx     = adx;
     this.diPlus  = diPlus;
     this.diMinus = diMinus;
 }
예제 #8
0
        private void updateLevels(CandleTimeSeries series)
        {
            var last = series.DataReveresed.First();
            var fp   = series.Data.First().ClosePrice;
            var lp   = last.ClosePrice;
            var mp   = (fp + lp) / 2f;

            series.YLevels["FIRST_PRICE"].Value = fp;
            series.YLevels["MID_PRICE"].Value   = mp;
            series.YLevels["LAST_PRICE"].Value  = lp;
        }
예제 #9
0
        private IEnumerable <DailyClassification> DoAnalysis(IDailyClassificationMethod method)
        {
            CandleTimeSeries series = Context.Instance.HistoryCandleTimeSeries;
            IEnumerable <DailyClassification> classifications = series.Candles
                                                                .Where(candle => candle.Start >= view.GetStartDay() &&
                                                                       candle.Start <= view.GetEndDay())
                                                                .Select(candle => new DailyClassification(candle: candle,
                                                                                                          classification: method.Classify(candle.Start.Date, series)));

            return(classifications);
        }
예제 #10
0
파일: ChartForm.cs 프로젝트: vlapchenko/nfx
        private void btnConnect_Click(object sender, EventArgs e)
        {
            m_Data = new CandleTimeSeries("My data", 0);
            //  m_Data.MaxSamples = 10;

              var sd = DateTime.Now.AddSeconds(-500);

              var samples = CandleSample.GenerateRandom(300,
                                                sd,
                                                1000,
                                                10,

                                                20, 8,

                                                120.0f);

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

              m_Data.Views.Register( new CandleView("Candles", 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.Views.Register( new CandleView("Candles2", 0, "MLPane"){ BlackWhite = true });
              m_Data.Views.Register(
            new CandleMidLineView("MidLineOpCl2", 1, "MLPane")
            {
              MidLineType = MidLineType.OpenClose,
              LineStyle = new LineStyle{ Color = Color.FromArgb(200, 255, 180, 0), Width = 3f}
            });

             //     m_Data.Views.Register( new CandleView("Avg1", 0, "Another Pane0"));
             //     m_Data.Views.Register( new CandleView("Avg2", 0, "Another Pane1"));

              //m_Data.Views.Register( new CandleView("Avg3", 0, "Another Pane2"));
              //m_Data.Views.Register( new CandleView("Avg4", 0, "Another Pane3"));
              //m_Data.Views.Register( new CandleView("Avg5", 0, "Another Pane4"));
              //m_Data.Views.Register( new CandleView("Avg6", 0, "Another Pane5"));

              chart.Series = m_Data;
        }
예제 #11
0
        public static IEnumerable <(TimeSeries, Color)> GetIndicators(CandleTimeSeries series
                                                                      , int indicatorPeriod
                                                                      , int smoothingPeriod
                                                                      , DateTime?startDate = null)
        {
            if (startDate == null)
            {
                startDate = series.Candles.Min(candle => candle.Start);
            }

            DirectionalIndicatorPlus diPlus =
                DirectionalIndicatorPlus.Create(indicatorPeriod);
            TimeSeries diPlusSeries = series.Candles
                                      .Where((candle, index) => index > 0 &&
                                             candle.Start >= startDate)
                                      .Select(candle => new DateValue(candle.Start, diPlus[series, candle.Start]))
                                      .ToTimeSeries(DiPlusIndicatorName);

            yield return(diPlusSeries, Color.Blue);

            DirectionalIndicatorMinus diMinus =
                DirectionalIndicatorMinus.Create(indicatorPeriod);
            TimeSeries diMinusSeries = series.Candles
                                       .Where((candle, index) => index > 0 &&
                                              candle.Start >= startDate)
                                       .Select(candle => new DateValue(candle.Start, diMinus[series, candle.Start]))
                                       .ToTimeSeries(DiMinusIndicatorName);

            yield return(diMinusSeries, Color.Red);

            DirectionalMovementIndex dx = DirectionalMovementIndex.Create(indicatorPeriod);
            TimeSeries dxSeries         = series.Candles
                                          .Where((candle, index) => index > 0 &&
                                                 candle.Start >= startDate)
                                          .Select(candle => new DateValue(candle.Start, dx[series, candle.Start]))
                                          .ToTimeSeries(DxIndicatorName);

            yield return(dxSeries, Color.DarkSlateGray);

            AverageDirectionalMovementIndex adx =
                AverageDirectionalMovementIndex.Create(indicatorPeriod, smoothingPeriod);
            TimeSeries adxSeries = series.Candles
                                   .Where((candle, index) => index > 0 &&
                                          candle.Start >= startDate)
                                   .Select(candle => new DateValue(candle.Start, adx[series, candle.Start]))
                                   .ToTimeSeries(AdxIndicatorName);

            yield return(adxSeries, Color.DarkGray);
        }
예제 #12
0
        private void reset()
        {
            m_SD = DateTime.UtcNow;
            //   m_stat_TotalCalls = 0;
            m_Data = new CandleTimeSeries("Throughput", 0);
            m_Data.Views.Register(new CandleView("Candles", 0));
            //m_Data.Views.Register(
            //      new CandleMidLineView("MidLineHiLo", 1)
            //      {
            //        MidLineType = MidLineType.OpenClose,
            //        LineStyle = new LineStyle{ Color = Color.FromArgb(200, 255, 0,0), Width = 1}
            //      });

            chart.Series = m_Data;
        }
예제 #13
0
        public void LoadData(CandleTimeSeries candleSeries, IEnumerable <TimeSeries> indicators)
        {
            Dictionary <string, TimeSeries> inds = indicators
                                                   .ToDictionary(i => i.Name);

            diPlus  = inds[UtilsPresenter.DiPlusIndicatorName];
            diMinus = inds[UtilsPresenter.DiMinusIndicatorName];
            adx     = inds[UtilsPresenter.AdxIndicatorName];
            dx      = inds[UtilsPresenter.DxIndicatorName];
            series  = candleSeries;

            DataTable table = GetStatistics();

            view.LoadData(table);
        }
예제 #14
0
        private void btnConnect_Click(object sender, EventArgs e)
        {
            if (m_Data != null)
            {
                return;
            }
            m_Data = new CandleTimeSeries("My data", 0);

            var sd = DateTime.Now.AddSeconds(-500);

            var op = 120.11f;
            var cp = 123.23f;
            var hp = 200.92f;
            var lp = 110.11f;

            for (var i = 0; i < 150; i++)
            {
                m_Data.Add(
                    new CandleSample(sd)
                {
                    OpenPrice  = op,
                    ClosePrice = cp,
                    HighPrice  = hp,
                    LowPrice   = lp,
                    BuyVolume  = 23,
                    SellVolume = 8
                });

                op += ExternalRandomGenerator.Instance.NextScaledRandomInteger(-2, +2);
                cp += ExternalRandomGenerator.Instance.NextScaledRandomInteger(-2, +2);
                hp += ExternalRandomGenerator.Instance.NextScaledRandomInteger(-2, +2);
                lp += ExternalRandomGenerator.Instance.NextScaledRandomInteger(-2, +2);

                sd = sd.AddSeconds(1);
            }


            m_Data.Views.Register(new CandleView("Candles", 0));
            m_Data.Views.Register(new CandleView("Avg1", 0, "Another Pane0"));
            m_Data.Views.Register(new CandleView("Avg2", 0, "Another Pane1"));
            //m_Data.Views.Register( new CandleView("Avg3", 0, "Another Pane2"));
            //m_Data.Views.Register( new CandleView("Avg4", 0, "Another Pane3"));
            //m_Data.Views.Register( new CandleView("Avg5", 0, "Another Pane4"));
            //m_Data.Views.Register( new CandleView("Avg6", 0, "Another Pane5"));


            chart.Series = m_Data;
        }
예제 #15
0
    private void btnConnect_Click(object sender, EventArgs e)
    {
      if (m_Data!=null) return;
      m_Data = new CandleTimeSeries("My data", 0);
      
      var sd = DateTime.Now.AddSeconds(-500);

      var op = 120.11f;
      var cp = 123.23f;
      var hp = 200.92f;
      var lp = 110.11f;

      for (var i=0; i<150; i++)
      {
      
          m_Data.Add( 
            new CandleSample( sd )
            { 
              OpenPrice = op,
              ClosePrice = cp,
              HighPrice=hp,
              LowPrice=lp,
              BuyVolume=23,
              SellVolume=8
            });

        op += ExternalRandomGenerator.Instance.NextScaledRandomInteger(-2, +2);
        cp += ExternalRandomGenerator.Instance.NextScaledRandomInteger(-2, +2);
        hp += ExternalRandomGenerator.Instance.NextScaledRandomInteger(-2, +2);
        lp += ExternalRandomGenerator.Instance.NextScaledRandomInteger(-2, +2);

        sd = sd.AddSeconds(1);
      }


      m_Data.Views.Register( new CandleView("Candles", 0));
      m_Data.Views.Register( new CandleView("Avg1", 0, "Another Pane0"));
      m_Data.Views.Register( new CandleView("Avg2", 0, "Another Pane1"));
      //m_Data.Views.Register( new CandleView("Avg3", 0, "Another Pane2"));
      //m_Data.Views.Register( new CandleView("Avg4", 0, "Another Pane3"));
      //m_Data.Views.Register( new CandleView("Avg5", 0, "Another Pane4"));
      //m_Data.Views.Register( new CandleView("Avg6", 0, "Another Pane5"));


      chart.Series = m_Data;
    }
예제 #16
0
        public Tendency Classify(DateTime day, CandleTimeSeries candleSeries)
        {
            TimeSeries    series        = GetTimeSeries(candleSeries);
            DateTime      dayBefore     = day.AddDays(-1);
            double        slowMaValue   = series.GetExponentialMovingAverageAt(dayBefore, slowMovingAveragePeriod);
            double        mediumMaValue = series.GetExponentialMovingAverageAt(dayBefore, mediumMovingAveragePeriod);
            double        fastMaValue   = series.GetExponentialMovingAverageAt(dayBefore, fastMovingAveragePeriod);
            List <double> values        = new List <double> {
                slowMaValue, mediumMaValue, fastMaValue
            };

            if (values.IsSorted())
            {
                return(Tendency.Up);
            }
            return(values.IsDescendantlySorted()
                ? Tendency.Down
                : Tendency.Range);
        }
예제 #17
0
        private void LoadSeriesIndicators(
            AdxInputsPresenter adxInputsPresenter,
            MovingAverageInputsPresenter movingAverageInputsPresenter,
            SeriesIndicatorPresenter seriesPresenter)
        {
            if (view.SelectedDay == DateTime.MinValue)
            {
                return;
            }
            CandleTimeSeries series = Context.Instance.HistoryCandleTimeSeries.Candles
                                      .Where(candle => candle.Start >= view.SelectedDay.Date.AddMonths(-3) &&
                                             candle.Start <= view.SelectedDay.Date)
                                      .ToCandleTimeSeries();
            IEnumerable <(TimeSeries, Color)> indicators = UtilsPresenter.GetIndicators(
                series: Context.Instance.HistoryCandleTimeSeries,
                indicatorPeriod: adxInputsPresenter.GetDxPeriod(),
                smoothingPeriod: adxInputsPresenter.GetMovingAveragePeriod());
            TimeSeries timeSeries = series.Candles
                                    .Select(candle => new DateValue(candle.Start, candle.Close))
                                    .ToTimeSeries();

            TimeSeries slowMovingAverage = timeSeries
                                           .GetExponentialMovingAverage(movingAverageInputsPresenter.SlowMovingAveragePeriod)
                                           .ToTimeSeries("Slow MA");
            TimeSeries mediumMovingAverage = timeSeries
                                             .GetExponentialMovingAverage(movingAverageInputsPresenter.MediumMovingAveragePeriod)
                                             .ToTimeSeries("Medium MA");
            TimeSeries fastMovingAverage = timeSeries
                                           .GetExponentialMovingAverage(movingAverageInputsPresenter.FastMovingAveragePeriod)
                                           .ToTimeSeries("Fast MA");

            seriesPresenter.LoadData(
                series: series,
                indicators: indicators,
                slowMovingAverage: slowMovingAverage,
                mediumMovingAverage: mediumMovingAverage,
                fastMovingAverage: fastMovingAverage
                );
        }
예제 #18
0
파일: ChartForm.cs 프로젝트: vlapchenko/nfx
        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;
              }
        }
예제 #19
0
 public CandleQuantityProvider(CandleTimeSeries series)
 {
     this.series = series;
 }
예제 #20
0
파일: ChartForm.cs 프로젝트: vlapchenko/nfx
        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();
              }
        }
예제 #21
0
        private void loadData()
        {
            if (m_SecDBFile==null)
              {
               chart.Series = null;
               return;
              }

              var series = new CandleTimeSeries("Candles", 0);
              m_OriginalDataFromFile = m_SecDBFile.GetAllStreamData()
                                              .SynthesizeCandles(m_SecResolution)
                                              .ToArray();

              m_OriginalDataFromFile.ForEach( s =>  series.Add( s ));

              series.Views.Register(
            new CandleView("Candles", 1)
            {
              ShowYLevels = true,
              ShowBalloons = true
            });

              series.Views.Register( new CandleBuySellView("Volume", 2)
                            {
                             Visible = chkVolumes.Checked,
                             Kind = getVolumeKind()
                            } );
              series.Views.Register(
            new CandleMidLineView("MidLine", 3)
            {
              MidLineType = MidLineType.HighLow,
              LineStyle = new LineStyle{ Color = Color.FromArgb(200, 255, 0,0), Width = 2},
              Visible = chkMidLines.Checked
            });

              series.YLevels.Register(
            new TimeSeries.YLevel("FIRST_PRICE", 1)
            {
              Visible =  chkMidLevels.Checked,
              HLineStyle = new LineStyle{ Color = Color.FromArgb(255, 20, 10), DashStyle = System.Drawing.Drawing2D.DashStyle.Dash}
            });

              series.YLevels.Register(
            new TimeSeries.YLevel("MID_PRICE", 2)
            {
              Visible =  chkMidLevels.Checked,
              HLineStyle = new LineStyle{ Color = Color.FromArgb(0, 180, 80), DashStyle = System.Drawing.Drawing2D.DashStyle.Dot}
            });

              series.YLevels.Register(
            new TimeSeries.YLevel("LAST_PRICE", 3)
            {
              Value =  series.DataReveresed.First().ClosePrice,
              HLineStyle = new LineStyle{ Color = Color.FromArgb(120, 40, 255), DashStyle = System.Drawing.Drawing2D.DashStyle.Dash}
            });

              updateLevels(series);

              chart.Series = series;
        }
예제 #22
0
 public CandleBodyStandardDeviationProvider(CandleTimeSeries series)
 {
     this.series = series;
 }
예제 #23
0
파일: ChartForm.cs 프로젝트: uzbekdev1/nfx
        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;
            }
        }
 public CandleBodyAverageProvider(CandleTimeSeries s)
 {
     series = s;
 }
예제 #25
0
 public ITransaction GetTradeInfo(CandleTimeSeries series, DateTime date)
 {
     return(f(series, date));
 }
예제 #26
0
 private TimeSeries GetTimeSeries(CandleTimeSeries series) => series.Candles
 .Select(candle => new DateValue(candle.Start, candle.Close))
 .ToTimeSeries();
 public CandleBodyDataProvider(CandleTimeSeries series)
 {
     this.series = series;
 }
예제 #28
0
 public double this[CandleTimeSeries series, DateTime date] => GetValueAt(series, date);
예제 #29
0
 public double GetValueAt(CandleTimeSeries series, DateTime date)
 {
     return f(series, date);
 }
예제 #30
0
 public void LoadData(
     CandleTimeSeries series,
     IEnumerable <(TimeSeries, Color)> indicators,
예제 #31
0
        private void updateLevels(CandleTimeSeries series)
        {
            var last = series.DataReveresed.First();
              var fp = series.Data.First().ClosePrice;
              var lp = last.ClosePrice;
              var mp = (fp + lp) / 2f;

              series.YLevels["FIRST_PRICE"].Value =  fp;
              series.YLevels["MID_PRICE"].Value =  mp;
              series.YLevels["LAST_PRICE"].Value =  lp;
        }
예제 #32
0
파일: ChartForm.cs 프로젝트: uzbekdev1/nfx
        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();
            }
        }
예제 #33
0
 private IEnumerable<CandleSample> getDataPerScroll(CandleTimeSeries cdata)
 {
   return cdata.Data;//todo SKIP depending on scroll bar position
 }
예제 #34
0
파일: ChartForm.cs 프로젝트: uzbekdev1/nfx
        private void btnConnect_Click(object sender, EventArgs e)
        {
            m_Data = new CandleTimeSeries("My data", 0);
            //  m_Data.MaxSamples = 10;

            var sd = DateTime.Now.AddSeconds(-500);

            var samples = CandleSample.GenerateRandom(300,
                                                      sd,
                                                      1000,
                                                      10,

                                                      20, 8,

                                                      120.0f);

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

            m_Data.Views.Register(new CandleView("Candles", 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.Views.Register(new CandleView("Candles2", 0, "MLPane")
            {
                BlackWhite = true
            });
            m_Data.Views.Register(
                new CandleMidLineView("MidLineOpCl2", 1, "MLPane")
            {
                MidLineType = MidLineType.OpenClose,
                LineStyle   = new LineStyle {
                    Color = Color.FromArgb(200, 255, 180, 0), Width = 3f
                }
            });

            //     m_Data.Views.Register( new CandleView("Avg1", 0, "Another Pane0"));
            //     m_Data.Views.Register( new CandleView("Avg2", 0, "Another Pane1"));



            //m_Data.Views.Register( new CandleView("Avg3", 0, "Another Pane2"));
            //m_Data.Views.Register( new CandleView("Avg4", 0, "Another Pane3"));
            //m_Data.Views.Register( new CandleView("Avg5", 0, "Another Pane4"));
            //m_Data.Views.Register( new CandleView("Avg6", 0, "Another Pane5"));


            chart.Series = m_Data;
        }
 public static double GetPriceVariation(List <DateTime> g, CandleTimeSeries series, bool upTendency = true) => upTendency
         ? series[g.Max(date => date)].Close - series[g.Min(date => date)].Close
         : series[g.Max(date => date)].Close - series[g.Min(date => date)].Close;
예제 #36
0
        private void loadData()
        {
            if (m_SecDBFile == null)
            {
                chart.Series = null;
                return;
            }

            var series = new CandleTimeSeries("Candles", 0);

            m_OriginalDataFromFile = m_SecDBFile.GetAllStreamData()
                                     .SynthesizeCandles(m_SecResolution)
                                     .ToArray();

            m_OriginalDataFromFile.ForEach(s => series.Add(s));

            series.Views.Register(
                new CandleView("Candles", 1)
            {
                ShowYLevels  = true,
                ShowBalloons = true
            });

            series.Views.Register(new CandleBuySellView("Volume", 2)
            {
                Visible = chkVolumes.Checked,
                Kind    = getVolumeKind()
            });
            series.Views.Register(
                new CandleMidLineView("MidLine", 3)
            {
                MidLineType = MidLineType.HighLow,
                LineStyle   = new LineStyle {
                    Color = Color.FromArgb(200, 255, 0, 0), Width = 2
                },
                Visible = chkMidLines.Checked
            });

            series.YLevels.Register(
                new TimeSeries.YLevel("FIRST_PRICE", 1)
            {
                Visible    = chkMidLevels.Checked,
                HLineStyle = new LineStyle {
                    Color = Color.FromArgb(255, 20, 10), DashStyle = System.Drawing.Drawing2D.DashStyle.Dash
                }
            });

            series.YLevels.Register(
                new TimeSeries.YLevel("MID_PRICE", 2)
            {
                Visible    = chkMidLevels.Checked,
                HLineStyle = new LineStyle {
                    Color = Color.FromArgb(0, 180, 80), DashStyle = System.Drawing.Drawing2D.DashStyle.Dot
                }
            });

            series.YLevels.Register(
                new TimeSeries.YLevel("LAST_PRICE", 3)
            {
                Value      = series.DataReveresed.First().ClosePrice,
                HLineStyle = new LineStyle {
                    Color = Color.FromArgb(120, 40, 255), DashStyle = System.Drawing.Drawing2D.DashStyle.Dash
                }
            });

            updateLevels(series);

            chart.Series = series;
        }
 public CandleRangeDataProvider(CandleTimeSeries series)
 {
     this.series = series;
 }