Diese Methode ist recht wichtig, deshalb wollte ich wissen, ob meine Implementierung richtig ist, und auch, wie dafür ein funktionaler Ansatz aussehen könnte.
Es soll geprüft werden, ob der RSI-Wert von unten nach oben kreuzt und aktuell über einem festen Wert liegt. Dafür muss ich doch nur über eine bestimmte Zeitspanne die lokalen Minima und Maxima ermitteln - oder? Wie lang muss diese Zeitspanne denn sein?
Könnte diese Methode auch anders implementiert werden? Und ist der Doc-String auch richtig, oder ist er "zu blumig" (also zu sehr "Wie?", anstatt "Was?" betont) geschrieben?
Es soll geprüft werden, ob der RSI-Wert von unten nach oben kreuzt und aktuell über einem festen Wert liegt. Dafür muss ich doch nur über eine bestimmte Zeitspanne die lokalen Minima und Maxima ermitteln - oder? Wie lang muss diese Zeitspanne denn sein?
Könnte diese Methode auch anders implementiert werden? Und ist der Doc-String auch richtig, oder ist er "zu blumig" (also zu sehr "Wie?", anstatt "Was?" betont) geschrieben?
Java:
/**
* Checks whether the RSI has risen from below 50 to above 50 in recent periods.
*
* <p>To do this, local minima and maxima of the RSI values in the last look-back periods are
* determined and compared to determine whether the minimum occurred before the maximum. Finally,
* this method checks whether the last RSI value is above 50.
*
* @return true if RSI has risen from below 50 to above 50, false otherwise
*/
public boolean isRsiRisesFromBelowToAbove50() {
final int lookBackPeriods = 6;
ClosePriceIndicator closePrice = new ClosePriceIndicator(series);
RSIIndicator rsiIndicator = new RSIIndicator(closePrice, RSI_PERIOD);
final int endIndex = series.getEndIndex();
int minIndex = endIndex - lookBackPeriods;
int maxIndex = endIndex - lookBackPeriods;
for (int i = endIndex - lookBackPeriods + 1; i < endIndex; i++) {
double rsiValue = rsiIndicator.getValue(i).doubleValue();
if (rsiValue < rsiIndicator.getValue(minIndex).doubleValue()) {
minIndex = i;
}
if (rsiValue > rsiIndicator.getValue(maxIndex).doubleValue()) {
maxIndex = i;
}
}
double lastRsi = rsiIndicator.getValue(endIndex).doubleValue();
return minIndex < maxIndex && lastRsi > 50.0;
}