protected override void Initialize(HistoricalPriceVolume historicalData) { AroonIndicator aroon = new AroonIndicator("Aroon", _period); aroon.Calculate(historicalData); AddIndicator(aroon); }
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 }); } }
public void Calculate(HistoricalPriceVolume graph) { HistoricalData = graph; CalculationStart(); for (int i = HistoricalData.GraphData.Count - BeginCalculationOffset - 1; i >= 0; i--) { _current = i; CalculateFor(i); } CalculationEnd(); }
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); }
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])); }
protected abstract void Initialize(HistoricalPriceVolume historicalData);