public void Process(int newValue) { switch (CurrentEngineStatus) { case EngineStatus.NoProfitPeriod: { if (CurrentPeriod.Process(newValue) == PeriodStatus.Closed) { //Refine further - Compare Before Override //PreviousPeriod = CurrentPeriod; historicalPeriods.Add(CurrentPeriod); CurrentEngineStatus = EngineStatus.OneProfitPeriod; PreviousBestPeriod = new ProfitPeriod() { PeriodLow = CurrentPeriod.PeriodLow, PeriodHigh = CurrentPeriod.PeriodHigh }; CurrentPeriod = new ProfitPeriod(); CurrentPeriod.Process(newValue); } ; break; } case EngineStatus.OneProfitPeriod: { if (CurrentPeriod.Process(newValue) == PeriodStatus.Closed) { //Refine further - Compare Before Override if (PreviousBestPeriod.Gain < CurrentPeriod.Gain) { //replace previous best period PreviousBestPeriod = new ProfitPeriod() { PeriodLow = CurrentPeriod.PeriodLow, PeriodHigh = CurrentPeriod.PeriodHigh }; } ; historicalPeriods.Add(CurrentPeriod); CurrentEngineStatus = EngineStatus.MoreThanOnePeriod; CurrentPeriod = new ProfitPeriod(); CurrentPeriod.Process(newValue); } ; break; } case EngineStatus.MoreThanOnePeriod: { if (CurrentPeriod.Process(newValue) == PeriodStatus.Closed) { //Compare Before Override //potentially keep a SecondBestPeriod if (PreviousBestPeriod.Gain < CurrentPeriod.Gain) { //replace previous best period PreviousBestPeriod = new ProfitPeriod() { PeriodLow = CurrentPeriod.PeriodLow, PeriodHigh = CurrentPeriod.PeriodHigh }; } ; historicalPeriods.Add(CurrentPeriod); CurrentPeriod = new ProfitPeriod(); CurrentPeriod.Process(newValue); } ; break; } } }
public StockBuySellEngine() { CurrentEngineStatus = EngineStatus.NoProfitPeriod; PreviousBestPeriod = null; CurrentPeriod = new ProfitPeriod(); }