Ejemplo n.º 1
0
        public static void Main(string[] args)
        {
            // Getting the time series
            TimeSeries series = CsvTradesLoader.loadBitstampSeries();
            // Building the trading strategy
            Strategy strategy = MovingMomentumStrategy.buildStrategy(series);

            /// <summary>
            /// Building chart datasets
            /// </summary>
            TimeSeriesCollection dataset = new TimeSeriesCollection();

            dataset.addSeries(buildChartTimeSeries(series, new ClosePriceIndicator(series), "Bitstamp Bitcoin (BTC)"));

            /// <summary>
            /// Creating the chart
            /// </summary>
            JFreeChart chart = ChartFactory.createTimeSeriesChart("Bitstamp BTC", "Date", "Price", dataset, true, true, false);             // generate URLs? -  generate tooltips? -  create legend? -  data -  y-axis label -  x-axis label -  title
            XYPlot     plot  = (XYPlot)chart.Plot;
            DateAxis   axis  = (DateAxis)plot.DomainAxis;

            axis.DateFormatOverride = new SimpleDateFormat("MM-dd HH:mm");

            /// <summary>
            /// Running the strategy and adding the buy and sell signals to plot
            /// </summary>
            addBuySellSignals(series, strategy, plot);

            /// <summary>
            /// Displaying the chart
            /// </summary>
            displayChart(chart);
        }
        public CurrencyData GetCurrencyData(Currency variableCurrency)
        {
            if (!_currencyDataTable.Keys.Contains(variableCurrency))
            {

                CurrencyAdapter currrencyAdapter = null;// = new CurrencyAdapter();
                var currencyList = currrencyAdapter.GetCurrencies();

              
                CurrencyData currencyData = new CurrencyData(_baseCurrency,variableCurrency);

                //TimeSeriesCollection<InterestRate> baseInRateCollection = new TimeSeriesCollection<InterestRate>();
                //baseInRateCollection.AddTimeSeriesData(
                //        inRateAdapter.GetInterestRates(BaseCurrency.Name)
                //        .Select(c => new InterestRate()
                //        {
                //            Currency = BaseCurrency,
                //            Time = c.Date,
                //            Value = c.Value
                //        })
                //        );

                currencyData.BaseCurrencyInterestRates = _baseInRateCollection;

                TimeSeriesCollection<ExchangeRate> exRateCollection = new TimeSeriesCollection<ExchangeRate>();
                exRateCollection.AddTimeSeriesData(
                    _exRateAdapter.GetExchangeRates(BaseCurrency.Name, variableCurrency.Name).
                        Select(a => new ExchangeRate()
                        {
                            BaseCurrency = BaseCurrency,
                            VariableCurrency = variableCurrency,
                            Time = a.Date,
                            Value = a.AskPrice // TODO
                        }));
                currencyData.ExchangeRates = exRateCollection;
                
                TimeSeriesCollection<InterestRate> varInRateCollection = new TimeSeriesCollection<InterestRate>();
                varInRateCollection.AddTimeSeriesData(
                        _inRateAdapter.GetInterestRates(variableCurrency.Name)
                        .Select(c => new InterestRate()
                        {
                            Currency = variableCurrency,
                            Time = c.Date,
                            Value = c.Value
                        })
                        );
                currencyData.VariableCurrencyInterestRates = varInRateCollection;

                _currencyDataTable[variableCurrency] = currencyData;
                return currencyData;


            }
            else
            {
                return _currencyDataTable[variableCurrency];
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Builds an additional JFreeChart dataset from a ta4j time series. </summary>
        /// <param name="series"> a time series </param>
        /// <returns> an additional dataset </returns>
        private static TimeSeriesCollection createAdditionalDataset(TimeSeries series)
        {
            ClosePriceIndicator  indicator = new ClosePriceIndicator(series);
            TimeSeriesCollection dataset   = new TimeSeriesCollection();

            org.jfree.data.time.TimeSeries chartTimeSeries = new org.jfree.data.time.TimeSeries("Btc price");
            for (int i = 0; i < series.TickCount; i++)
            {
                Tick tick = series.getTick(i);
                chartTimeSeries.add(new Second(tick.EndTime.toDate()), indicator.getValue(i).toDouble());
            }
            dataset.addSeries(chartTimeSeries);
            return(dataset);
        }
Ejemplo n.º 4
0
        public static void Main(string[] args)
        {
            /// <summary>
            /// Getting time series
            /// </summary>
            TimeSeries series = CsvTradesLoader.loadBitstampSeries().subseries(0, Period.hours(6));

            /// <summary>
            /// Creating the OHLC dataset
            /// </summary>
            OHLCDataset ohlcDataset = createOHLCDataset(series);

            /// <summary>
            /// Creating the additional dataset
            /// </summary>
            TimeSeriesCollection xyDataset = createAdditionalDataset(series);

            /// <summary>
            /// Creating the chart
            /// </summary>
            JFreeChart chart = ChartFactory.createCandlestickChart("Bitstamp BTC price", "Time", "USD", ohlcDataset, true);
            // Candlestick rendering
            CandlestickRenderer renderer = new CandlestickRenderer();

            renderer.AutoWidthMethod = CandlestickRenderer.WIDTHMETHOD_SMALLEST;
            XYPlot plot = chart.XYPlot;

            plot.Renderer = renderer;
            // Additional dataset
            int index = 1;

            plot.setDataset(index, xyDataset);
            plot.mapDatasetToRangeAxis(index, 0);
            XYLineAndShapeRenderer renderer2 = new XYLineAndShapeRenderer(true, false);

            renderer2.setSeriesPaint(index, Color.blue);
            plot.setRenderer(index, renderer2);
            // Misc
            plot.RangeGridlinePaint = Color.lightGray;
            plot.BackgroundPaint    = Color.white;
            NumberAxis numberAxis = (NumberAxis)plot.RangeAxis;

            numberAxis.AutoRangeIncludesZero = false;
            plot.DatasetRenderingOrder       = DatasetRenderingOrder.FORWARD;

            /// <summary>
            /// Displaying the chart
            /// </summary>
            displayChart(chart);
        }
Ejemplo n.º 5
0
        public static void Main(string[] args)
        {
            // 1. Import data.
            string       inputPath = "/home/xavier/Documents/chronojump-no-git/kinoveafiltering-cb3bafc0f6f2/Data/sample-signal.txt";
            List <float> values    = ParseInput(inputPath);

            // 2. Convert values to a list of timed points.
            // In this example, time is implicit in the input and interval between data point is given.
            // Kinovea's code is tailored for 2D values, since we are dealing with a 1D series we'll just set the Y component to 0 for all points.
            // Convert the relative displacements into absolute coordinates on the fly.
            long              intervalMilliseconds = 1;
            long              time    = 0;
            float             coord   = 0;
            List <TimedPoint> samples = new List <TimedPoint>();

            foreach (float value in values)
            {
                coord += value;
                samples.Add(new TimedPoint(coord, 0, time));
                time += intervalMilliseconds;
            }

            // 3. Filter the data.
            // In Kinovea this also takes a calibration helper to convert positions and times between video space and real world space.
            // Here we assume the data is already in real world space so the function was slightly simplified.
            double             framerate = 1000.0 / intervalMilliseconds;
            FilteredTrajectory traj      = new FilteredTrajectory();

            traj.Initialize(samples, framerate);

            // 4. Compute linear kinematics on the data.
            // At this point `traj` contains a list of raw positions, a list of filtered positions at various cutoff frequencies, and the best-guess cutoff frequency.
            // The LinearKinematics class was simplified a lot compared to the Kinovea code to focus on 1D and only compute speed and acceleration.
            // A second pass of filtering is possible, this was for high speed video sources which tend to create extra noisy values at the digitization step, it shouldn't be needed here.
            bool                 enableSecondPassFiltering = false;
            LinearKinematics     linearKinematics          = new LinearKinematics();
            TimeSeriesCollection tsc = linearKinematics.BuildKinematics(traj, intervalMilliseconds, enableSecondPassFiltering);

            // 5. Export the result.
            // At this point the speed and acceleration are expressed in ms⁻¹ and ms⁻².
            string outputFilename = string.Format("{0}-output.csv", Path.GetFileNameWithoutExtension(inputPath));
            string outputPath     = Path.Combine(Path.GetDirectoryName(inputPath), outputFilename);

            ExportCSV(outputPath, tsc);

            Console.WriteLine("Done. Press any key.");
            Console.ReadKey();
        }
 public TimeSeriesCollection<InterestRate> GetInterestRateData(string currencyName)
 {
     if (!_currencyNameInterestRateTable.Keys.Contains(currencyName))
     {
         TimeSeriesCollection<InterestRate> inRateCollection = new TimeSeriesCollection<InterestRate>();
         inRateCollection.AddTimeSeriesData(
             _inRateAdapter.GetInterestRates(currencyName)
             .Select(c => new InterestRate()
             {
                 CurrencyName = currencyName,
                 Time = c.Date,
                 Value = c.Value
             })
             );
         _currencyNameInterestRateTable[currencyName] = inRateCollection;
     }
     return _currencyNameInterestRateTable[currencyName];
 }
        public CurrencyPairData GetCurrencyPairData(string baseCurrencyName, string variableCurrencyName)
        {
            if (!_currencyPairDataTable.Keys.Contains(new Tuple<string, string>(baseCurrencyName, variableCurrencyName)))
            {
               
                CurrencyPairData currencyData = new CurrencyPairData(baseCurrencyName, variableCurrencyName);

                TimeSeriesCollection<ExchangeRateBid> exRateCollection = new TimeSeriesCollection<ExchangeRateBid>();
                exRateCollection.AddTimeSeriesData(
                    _exRateAdapter.GetExchangeRates(baseCurrencyName, variableCurrencyName).
                        Select(a => new ExchangeRateBid()
                        {
                            BaseCurrencyName = baseCurrencyName,
                            VariableCurrencyName = variableCurrencyName,
                            Time = a.Date,
                            Value = a.BidPrice
                        }));
                currencyData.ExchangeRates = exRateCollection;

                TimeSeriesCollection<ExchangeRateAsk> exAskRateCollection = new TimeSeriesCollection<ExchangeRateAsk>();
                exAskRateCollection.AddTimeSeriesData(
                    _exRateAdapter.GetExchangeRates(baseCurrencyName, variableCurrencyName).
                        Select(a => new ExchangeRateAsk()
                        {
                            BaseCurrencyName = baseCurrencyName,
                            VariableCurrencyName = variableCurrencyName,
                            Time = a.Date,
                            Value = a.AskPrice
                        }));
                currencyData.AskExchangeRates = exAskRateCollection;

                currencyData.VariableCurrencyInterestRates = GetInterestRateData(variableCurrencyName);
                currencyData.BaseCurrencyInterestRates = GetInterestRateData(baseCurrencyName);

                //_currencyDataTable[variableCurrencyName] = currencyData;
                _currencyPairDataTable[new Tuple<string, string>(baseCurrencyName, variableCurrencyName)] = currencyData;
               
            }
            return _currencyPairDataTable[new Tuple<string, string>(baseCurrencyName, variableCurrencyName)];
        }
Ejemplo n.º 8
0
        public MeasurementCollection BuildMeasurementCollection(string name, TimeSpan timespan)
        {
            var r = TimeSeriesCollection.Find(x => (x.Name == name));

            TimeSeries ts;

            if (r.Count <TimeSeries>() == 0)
            {
                ts = new TimeSeries
                {
                    Name         = name,
                    TimeSpan     = timespan,
                    Measurements = new List <Measurement>()
                };
                TimeSeriesCollection.Insert(ts);
            }
            else
            {
                ts = r.First();
            }
            return(new MeasurementCollection(ts));
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Export the computed kinematics to a CSV file.
        /// </summary>
        private static void ExportCSV(string outputPath, TimeSeriesCollection tsc)
        {
            List <string> csv       = new List <string>();
            string        separator = CultureInfo.CurrentCulture.TextInfo.ListSeparator;

            // Header.
            List <string> headers = new List <string>()
            {
                "Time (ms)", "Raw coordinate (mm)", "Filtered coordinate (mm)", "Velocity (mm/ms)", "Acceleration (mm/ms²)"
            };

            csv.Add(string.Join(separator, headers.ToArray()));

            // Values.
            for (int i = 0; i < tsc.Length; i++)
            {
                List <double> p = new List <double>();
                p.Add(tsc.Times[i]);
                p.Add(tsc[Kinematics.XRaw][i]);
                p.Add(tsc[Kinematics.X][i]);
                p.Add(tsc[Kinematics.LinearHorizontalVelocity][i]);
                p.Add(tsc[Kinematics.LinearHorizontalAcceleration][i]);

                string[] values = p.Select(v => double.IsNaN(v) ? "" : v.ToString()).ToArray();
                string   line   = string.Join(separator, values);
                csv.Add(line);
            }

            try
            {
                File.WriteAllLines(outputPath, csv);
            }
            catch (Exception e)
            {
                Console.WriteLine(string.Format("An error occured while saving the file: {0}", e.Message));
            }
        }