public void Create_ParamsSet__CorrectBackBufferLength() { const int periodValue = 125; StatBB testObj = new StatBB(""); testObj.StatParams.Set(StatBBParams.Period, periodValue); testObj.BackBufferLength.ShouldBe(periodValue); }
public void Create__HasDefaultValues() { StatBB testObj = new StatBB(""); testObj.StatParams.Get(StatBBParams.Period).As<int>().ShouldBeGreaterThan(0); testObj.StatParams.Get(StatBBParams.SigmaWidth).As<float>().ShouldBeGreaterThan(0); testObj.BackBufferLength.ShouldBe(testObj.StatParams.Get(StatBBParams.Period).As<int>()); }
public static void Initialize(BBTrendFundsData data, string[] fundsNames, int bbPeriod, float bbSigmaWidth, int hlPeriod, IStockDataProvider dataProvider) { for (int i = 0; i < fundsNames.Length; i++) { data.Stocks[i] = dataProvider.GetStockDefinition(fundsNames[i]); StockStat statBB = new StatBB("") .SetParam(StatBBParams.Period, new MOParamInt() { Value = bbPeriod }) .SetParam(StatBBParams.SigmaWidth, new MOParamFloat() { Value = bbSigmaWidth }); data.StatsBB[i] = (StatBB)statBB; data.CurrentTrends[i] = BBTrendType.Unknown; data.CurrentExpectations[i] = BBTrendExpectation.Unknown; StockStat statHL = new StatHLChannel("") .SetParam(StatHLChannelParams.Period, new MOParamInt() { Value = hlPeriod }); data.StatsHLChannel[i] = (StatHLChannel)statHL; data.ExpectationChanged[i] = false; } }
public static BBTrendExpectation GetExpectation(StockPricesData data, StatBB statBB, int leadingIndex, BBTrendType currentTrend) { if (currentTrend == BBTrendType.Up) { return(data.C[leadingIndex] > statBB.Data(StatBBData.SMA)[leadingIndex - statBB.BackBufferLength + 1] ? BBTrendExpectation.UpAndRaising : BBTrendExpectation.UpButPossibleChange); } if (currentTrend == BBTrendType.Down) { return(data.C[leadingIndex] <= statBB.Data(StatBBData.SMA)[leadingIndex - statBB.BackBufferLength + 1] ? BBTrendExpectation.DownAndFalling : BBTrendExpectation.DownButPossibleChange); } return(BBTrendExpectation.Unknown); }
public static BBTrendType RecognizeTrend(StockPricesData data, StatBB statBB, int leadingIndex, BBTrendType currentTrend, out float trendStartLevel) { trendStartLevel = 0; if (((currentTrend == BBTrendType.Unknown) || (currentTrend == BBTrendType.Up)) && ((data.L[leadingIndex] < statBB.Data(StatBBData.BBL)[leadingIndex - statBB.BackBufferLength + 1]) || (data.L[leadingIndex] < statBB.Data(StatBBData.BBL)[leadingIndex - statBB.BackBufferLength]))) { trendStartLevel = Math.Max(statBB.Data(StatBBData.BBL)[leadingIndex - statBB.BackBufferLength + 1], statBB.Data(StatBBData.BBL)[leadingIndex - statBB.BackBufferLength]); return(BBTrendType.Down); } if (((currentTrend == BBTrendType.Unknown) || (currentTrend == BBTrendType.Down)) && ((data.H[leadingIndex] > statBB.Data(StatBBData.BBH)[leadingIndex - statBB.BackBufferLength + 1]) || (data.H[leadingIndex] > statBB.Data(StatBBData.BBH)[leadingIndex - statBB.BackBufferLength]))) { trendStartLevel = Math.Min(statBB.Data(StatBBData.BBH)[leadingIndex - statBB.BackBufferLength + 1], statBB.Data(StatBBData.BBH)[leadingIndex - statBB.BackBufferLength]); return(BBTrendType.Up); } return(currentTrend); }