public override void ApplyTo(StockSerie stockSerie) { float accelerationFactorStart = (float)this.parameters[0]; float accelerationFactorStep = (float)this.parameters[1]; float accelerationFactorMax = (float)this.parameters[2]; FloatSerie sarSupport; FloatSerie sarResistance; stockSerie.CalculateSAR(accelerationFactorStep, accelerationFactorStart, accelerationFactorMax, out sarSupport, out sarResistance, (int)this.parameters[3]); this.Series[0] = sarSupport; this.Series[1] = sarResistance; // Detecting events this.CreateEventSeries(stockSerie.Count); float previousHigh = stockSerie.Values.First().HIGH, previousLow = stockSerie.Values.First().LOW; float previousHigh2 = stockSerie.Values.First().HIGH, previousLow2 = stockSerie.Values.First().LOW; bool waitingForEndTrend = false; for (int i = 5; i < stockSerie.Count; i++) { if (float.IsNaN(sarResistance[i]) && !float.IsNaN(sarResistance[i - 1])) { this.Events[0][i] = true; // SupportDetected if (waitingForEndTrend) { this.Events[3][i] = true; // EndOfTrend waitingForEndTrend = false; } if (sarSupport[i] > previousLow) { this.Events[4][i] = true; // HigherLow if (sarSupport[i] > previousHigh2) { this.Events[2][i] = true; // PB waitingForEndTrend = true; } } previousLow2 = previousLow; previousLow = sarSupport[i]; } if (float.IsNaN(sarSupport[i]) && !float.IsNaN(sarSupport[i - 1])) { this.Events[1][i] = true; // ResistanceDetected if (waitingForEndTrend) { this.Events[3][i] = true; // EndOfTrend waitingForEndTrend = false; } if (sarResistance[i] < previousHigh) { this.Events[5][i] = true; // LowerHigh if (sarResistance[i] < previousLow2) { this.Events[2][i] = true; // PB waitingForEndTrend = true; } } previousHigh2 = previousHigh; previousHigh = sarResistance[i]; } this.Events[6][i] = false; this.Events[7][i] = false; this.Events[8][i] = float.IsNaN(sarResistance[i]); this.Events[9][i] = float.IsNaN(sarSupport[i]); } }
public override void ApplyTo(StockSerie stockSerie) { float accelerationFactorStep = (float)this.parameters[0]; float accelerationFactorMax = (float)this.parameters[1]; FloatSerie sarSupport1; FloatSerie sarResistance1; FloatSerie sarSupport2; FloatSerie sarResistance2; float ratio = (float)this.parameters[2]; stockSerie.CalculateSAR(accelerationFactorStep, accelerationFactorStep, accelerationFactorMax, out sarSupport1, out sarResistance1, 1); stockSerie.CalculateSAR2(accelerationFactorStep / ratio, accelerationFactorStep / ratio, accelerationFactorMax / ratio, sarSupport1, sarResistance1, out sarSupport2, out sarResistance2); this.Series[0] = sarSupport1; this.Series[1] = sarResistance1; this.Series[2] = sarSupport2; this.Series[3] = sarResistance2; // Detecting events this.CreateEventSeries(stockSerie.Count); for (int i = 5; i < stockSerie.Count; i++) { this.Events[0][i] = float.IsNaN(sarResistance1[i - 1]) && !float.IsNaN(sarResistance1[i]); this.Events[1][i] = float.IsNaN(sarSupport1[i - 1]) && !float.IsNaN(sarSupport1[i]); this.Events[2][i] = float.IsNaN(sarResistance2[i - 1]) && !float.IsNaN(sarResistance2[i]); this.Events[3][i] = float.IsNaN(sarSupport2[i - 1]) && !float.IsNaN(sarSupport2[i]); } }