public TurningPoint(double delta) { PatternState = EPatternState.init; PatternPt0 = 0; PatternPt1 = 0; cntNewUp = 0; cntNewDown = 0; cntTurns = 0; dblPatternDelta = delta; }
public void Calculate(Double val) { double dif; // // Pattern calculation // switch (PatternState) { case EPatternState.init: PatternPt1 = val; PatternPt0 = val; PatternState = EPatternState.start; //dsPattern.Add( quote.DateTime, val ); //Console.WriteLine( "{0} Pattern init {1}", SmartQuant.Clock.Now, PatternState ); break; case EPatternState.start: if (Math.Abs(val - PatternPt1) >= dblPatternDelta) { dtPatternPt1 = Clock.Now; PatternPt0 = val; if (val > PatternPt1) { PatternState = EPatternState.up; //gpstrategy.BuySignal = true; //Console.WriteLine( "{0} Pattern start {1}", SmartQuant.Clock.Now, PatternState ); } else { PatternState = EPatternState.down; //gpstrategy.SellSignal = true; //Console.WriteLine( "{0} Pattern start {1}", SmartQuant.Clock.Now, PatternState ); } PatternPt1 = val; } break; case EPatternState.up: PatternPt0 = val; if (val > PatternPt1) { PatternPt1 = val; dtPatternPt1 = Clock.Now; cntNewUp++; if (null != OnUpDecisionPointFound) { OnUpDecisionPointFound(this); } } dif = PatternPt1 - PatternPt0; //dsPt0Ratio.Add( quote.DateTime, dif / dblPatternDelta ); if (dif >= dblPatternDelta) { //dsPattern.Add( dtPatternPt1, PatternPt1 ); cntTurns++; if (null != OnPeakFound) { OnPeakFound(this, dtPatternPt1, PatternPt1, PatternState); } //mp.ClassifyDoubleSeriesEnd( dsPattern ); if (PatternPt1 > PatternPt0) { //Console.WriteLine( "{0} Pattern from {1}", SmartQuant.Clock.Now, PatternState ); PatternState = EPatternState.down; } else { //Console.WriteLine( "{0} Pattern already {1}", SmartQuant.Clock.Now, PatternState ); } } else { // rPatternDeltaDistance[ (int) Math.Round( dif * 100 ) ]++; } break; case EPatternState.down: PatternPt0 = val; if (val < PatternPt1) { PatternPt1 = val; dtPatternPt1 = Clock.Now; cntNewDown++; if (null != OnDownDecisionPointFound) { OnDownDecisionPointFound(this); } } dif = PatternPt0 - PatternPt1; //dsPt0Ratio.Add( quote.DateTime, dif / dblPatternDelta ); if (dif >= dblPatternDelta) { //dsPattern.Add( dtPatternPt1, PatternPt1 ); cntTurns++; if (null != OnPeakFound) { OnPeakFound(this, dtPatternPt1, PatternPt1, PatternState); } //mp.ClassifyDoubleSeriesEnd( dsPattern ); if (PatternPt1 < PatternPt0) { //Console.WriteLine( "{0} Pattern from {1}", SmartQuant.Clock.Now, PatternState ); PatternState = EPatternState.up; } else { //Console.WriteLine( "{0} Pattern already {1}", SmartQuant.Clock.Now, PatternState ); } } else { //rPatternDeltaDistance[ (int) Math.Round( dif * 100 ) ]++; } break; } }