public void BarAnalyzerBreakTest() { List <IBar> bars = upTrendMocks.ToList(); IBarDatum workingBar = null; Felix.Data.Trend.TrendType currentTrend = Felix.Data.Trend.TrendType.Unknown; for (int i = 0, c = bars.Count; i < c; ++i) { IBarDatum datum = CreateBar(bars[i]); BarAnalyzerResult result = BarAnalyzer.Analyze(workingBar, datum, currentTrend); Felix.Data.Trend.TrendType expectedType = GetExpectedTrendType(datum.Index); IBarDatum expectedBar = datum.Index != 25 ? datum : workingBar; VerifyBarAnalyzerResult(result, expectedBar, datum.Index != 25, expectedType); workingBar = result.WorkingBar; currentTrend = result.Trend; } }
public void Insert(IBarDatum bd) { InsertDataList(bd); BarAnalyzerResult result = BarAnalyzer.Analyze(WorkingBar, bd, CurrentTrendType); Update(result); }
private void VerifyBarAnalyzerResult(BarAnalyzerResult result, IBarDatum expectedBar, bool expectedValidity, Felix.Data.Trend.TrendType expectedTrend) { Assert.IsNotNull(result); Assert.IsTrue(result.Trend == expectedTrend); Assert.IsTrue(result.WorkingBar == expectedBar); Assert.IsTrue(result.IsValidTrendBar == expectedValidity); }
private void TransitionToUpFromDown(BarAnalyzerResult result) { // Get Highest high IBarDatum lowest = DataList .Where(e => e.Index >= WorkingBar.Index && e.Index <= result.WorkingBar.Index) .OrderBy(e => e.Low) .First(); LowList.Add(lowest); Transition(result, lowest); }
private void TransitionToDownFromUp(BarAnalyzerResult result) { // get lowest low IBarDatum highest = DataList .Where(e => e.Index >= WorkingBar.Index && e.Index <= result.WorkingBar.Index) .OrderByDescending(e => e.High) .First(); HighList.Add(highest); Transition(result, highest); }
private void Transition(BarAnalyzerResult result, IBarDatum datum) { IMove prevMove = CurrentMove.Close(datum); var newMove = Move.Open(MoveList.Count, datum, (int)result.Trend); MoveList.Add(newMove); CurrentTrendType = result.Trend; MoveSubject.OnNext(prevMove); }
private void Update(BarAnalyzerResult result) { // set WorkingBar to result.WorkingBar if CurrentTrend is Unknown or result.IsValidTrendBar is true // if (!HighList.Any() && !LowList.Any()) if (CurrentTrendType == Trend.TrendType.Unknown) { if (result.Trend == Trend.TrendType.Up) { LowList.Add(result.WorkingBar); } else if (result.Trend == Trend.TrendType.Down) { HighList.Add(result.WorkingBar); } CurrentTrendType = result.Trend; WorkingBar = result.WorkingBar; MoveList.Add(Move.Open(MoveList.Count, result.WorkingBar, (int)result.Trend)); } else { if (result.IsValidTrendBar) { WorkingBar = result.WorkingBar; // currentTrend: undetermined: currentTrend = trend // currentTrend: Up: if( trend.Down) changecurrentTrend to down and add bar Highest high series I {Working ... barDatum} // currentTrend: Down: if (trend.up) changcurrentTrend to up and add bar with Lowest low in series {WorkingBar .. barDatum} switch (CurrentTrendType) { case Trend.TrendType.Up: { if (result.Trend == Trend.TrendType.Down) { TransitionToDownFromUp(result); } } break; case Trend.TrendType.Down: { if (result.Trend == Trend.TrendType.Up) { TransitionToUpFromDown(result); } } break; } } } }
public void BarAnalyzerInitialTest() { IBar bar = upTrendMocks.First(); IBarDatum datum = CreateBar(bar); BarAnalyzerResult result = BarAnalyzer.Analyze(null, datum, Felix.Data.Trend.TrendType.Unknown); Assert.IsNotNull(result); Assert.IsTrue(result.Trend == Felix.Data.Trend.TrendType.Up); Assert.IsTrue(result.WorkingBar == datum); Assert.IsTrue(result.IsValidTrendBar == true); }
public void BarAnalyzerTest() { List <IBar> bars = upTrendMocks.Take(5).ToList(); IBarDatum workingBar = null; foreach (IBar bar in bars) { IBarDatum datum = CreateBar(bar); BarAnalyzerResult result = BarAnalyzer.Analyze(workingBar, datum, Felix.Data.Trend.TrendType.Unknown); VerifyBarAnalyzerResult(result, datum, true, Felix.Data.Trend.TrendType.Up); workingBar = result.WorkingBar; } }