Esempio n. 1
0
        protected override void Initialize(HistoricalPriceVolume historicalData)
        {
            AroonIndicator aroon = new AroonIndicator("Aroon", _period);

            aroon.Calculate(historicalData);
            AddIndicator(aroon);
        }
Esempio n. 2
0
        public void Calculate(HistoricalPriceVolume data)
        {
            List <HistoricalPriceVolumeEntry> graph = data.Items;

            for (int i = Period; i < graph.Count; i++)
            {
                HistoricalPriceVolumeEntry entry = graph[i];
                int current = i + 1;

                DateTime date = entry.Date;
                int      back = current - Period;
                back = back < 0 ? 0 : back;

                List <HistoricalPriceVolumeEntry> range = graph.GetRange(i - Period, Period + 1);

                int     dayHigh       = IndicatorUtils.GetHighestId(range.Select(e => e.High));
                int     daysSinceHigh = range.Count - dayHigh;
                decimal aroonUp       = 100 * (Period - daysSinceHigh) / (decimal)Period;

                int     dayLow       = IndicatorUtils.GetLowestId(range.Select(e => e.Low));
                int     daysSinceLow = range.Count - dayLow;
                decimal aroonDown    = 100 * (Period - daysSinceLow) / (decimal)Period;

                Debug.WriteLine("");
                Debug.WriteLine($"Date: {date.ToString("d")}");
                Debug.WriteLine($"Up: {aroonUp}");
                Debug.WriteLine($"Down: {aroonDown}");

                AroonGraph.Add(date, new[] { aroonUp, aroonDown });
            }
        }
Esempio n. 3
0
 public void Calculate(HistoricalPriceVolume graph)
 {
     HistoricalData = graph;
     CalculationStart();
     for (int i = HistoricalData.GraphData.Count - BeginCalculationOffset - 1; i >= 0; i--)
     {
         _current = i;
         CalculateFor(i);
     }
     CalculationEnd();
 }
Esempio n. 4
0
        public HistoricalPriceVolume ParseHistoricalData(string res)
        {
            string[] lines             = res.Split('\n');
            HistoricalPriceVolume data = new HistoricalPriceVolume(lines.Take(lines.Length - 1)
                                                                   .TakeWhile(line => line != null)
                                                                   .Select(StockUtils.ParseCsvRow).Select(line => new HistoricalPriceVolumeEntry
            {
                Date   = DateTime.Parse(line[0]),
                Open   = NumberUtils.ParseDecimal(line[1]),
                High   = NumberUtils.ParseDecimal(line[2]),
                Low    = NumberUtils.ParseDecimal(line[3]),
                Close  = NumberUtils.ParseDecimal(line[4]),
                Volume = NumberUtils.ParseInt(line[5])
            }) /*.Reverse()*/.ToList());


            return(data);
        }
Esempio n. 5
0
        public BacktestResult BackTest(StockInfo stock, HistoricalPriceVolume historicalData)
        {
            Stock          = stock;
            HistoricalData = historicalData;
            Account        = Capital;
            SharesOwned    = 0;
            Indicators.Clear();
            Trades = new List <TradeInfo>();
            Reset();

            Initialize(HistoricalData);

            int offset = Indicators.Values.Max(ind => ind.BeginCalculationOffset);

            for (int i = HistoricalData.Items.Count - offset - 1; i >= 0; i--)
            {
                CurrentSharePrice = HistoricalData.Items[i].Open; // Wrong
                Signal(HistoricalData.Items[i]);
            }
            return(new BacktestResult(Capital, Account + SharesOwned * CurrentSharePrice, Stock, Trades, HistoricalData.Items[0]));
        }
Esempio n. 6
0
 protected abstract void Initialize(HistoricalPriceVolume historicalData);