Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add Indicator.unstablePeriod #918

Closed
wants to merge 22 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Changelog for `ta4j`, roughly following [keepachangelog.com](http://keepachangel

### Added
- added `TradingRecord.getStartIndex()` and `TradingRecord.getEndIndex()` to track start and end of the recording
- added `Indicator.getUnstablePeriod()`
- added **SuperTrendIndicator**
- added **SuperTrendUpperBandIndicator**
- added **SuperTrendLowerBandIndicator**
Expand Down
5 changes: 5 additions & 0 deletions ta4j-core/src/main/java/org/ta4j/core/Indicator.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ public interface Indicator<T> {
*/
T getValue(int index);

/**
* @return the number of bars up to which the indicator calculates wrong values
*/
int getUnstablePeriod();
nimo23 marked this conversation as resolved.
Show resolved Hide resolved

/**
* @return the related bar series
*/
Expand Down
5 changes: 5 additions & 0 deletions ta4j-core/src/main/java/org/ta4j/core/analysis/CashFlow.java
Original file line number Diff line number Diff line change
Expand Up @@ -265,4 +265,9 @@ static int determineEndIndex(Position position, int finalIndex, int maxIndex) {
}
return idx;
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
5 changes: 5 additions & 0 deletions ta4j-core/src/main/java/org/ta4j/core/analysis/Returns.java
Original file line number Diff line number Diff line change
Expand Up @@ -221,4 +221,9 @@ private void fillToTheEnd(int endIndex) {
values.addAll(Collections.nCopies(barSeries.getEndIndex() - values.size() + 1, barSeries.zero()));
}
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ public Num getValue(int index) {
return averageTrueRangeIndicator.getValue(index);
}

@Override
public int getUnstablePeriod() {
return getBarCount();
}

public TRIndicator getTRIndicator() {
return trIndicator;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,9 @@ public AccelerationDecelerationIndicator(BarSeries series) {
protected Num calculate(int index) {
return awesome.getValue(index).minus(sma.getValue(index));
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,9 @@ public AwesomeOscillatorIndicator(BarSeries series) {
protected Num calculate(int index) {
return sma5.getValue(index).minus(sma34.getValue(index));
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,11 @@ protected Num calculate(int index) {
return (typicalPrice.minus(typicalPriceAvg)).dividedBy(meanDeviation.multipliedBy(factor));
}

@Override
public int getUnstablePeriod() {
return barCount;
}

@Override
public String toString() {
return getClass().getSimpleName() + " barCount: " + barCount;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,9 @@ protected Num calculate(int index) {
}
return sumOfGains.minus(sumOfLosses).dividedBy(sumOfGains.plus(sumOfLosses)).multipliedBy(hundred());
}

@Override
public int getUnstablePeriod() {
return barCount;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,9 @@ public ChandelierExitLongIndicator(BarSeries series, int barCount, double k) {
protected Num calculate(int index) {
return high.getValue(index).minus(atr.getValue(index).multipliedBy(k));
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,9 @@ public ChandelierExitShortIndicator(BarSeries series, int barCount, double k) {
protected Num calculate(int index) {
return low.getValue(index).plus(atr.getValue(index).multipliedBy(k));
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,9 @@ public Num calculate(int index) {
// TODO: implement Num.log10(Num)
return scaleUpTo.multipliedBy(numOf(Math.log10(a.doubleValue()))).dividedBy(log10n);
}

@Override
public int getUnstablePeriod() {
return timeFrame;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,9 @@ public CoppockCurveIndicator(Indicator<Num> indicator, int longRoCBarCount, int
protected Num calculate(int index) {
return wma.getValue(index);
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,11 @@ protected Num calculate(int index) {
return indicatorMinusPreviousSMAIndicator.getValue(index);
}

@Override
public int getUnstablePeriod() {
return 0;
}

@Override
public String toString() {
return name;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,9 @@ protected ZonedDateTime calculate(int index) {
Bar bar = getBarSeries().getBar(index);
return this.action.apply(bar);
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,9 @@ protected Num calculate(int index) {
Num maValue = (Num) movingAverage.getValue(index);
return (closePrice.minus(maValue)).dividedBy(maValue);
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,9 @@ protected Num calculate(int index) {
public String toString() {
return getClass().getSimpleName() + " barCount: " + barCount;
}

@Override
public int getUnstablePeriod() {
return barCount;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,9 @@ public class EMAIndicator extends AbstractEMAIndicator {
public EMAIndicator(Indicator<Num> indicator, int barCount) {
super(indicator, barCount, (2.0 / (barCount + 1)));
}

@Override
public int getUnstablePeriod() {
return getBarCount();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,11 @@ protected Num calculate(int index) {
Num term3 = term2.plus(beta.multipliedBy(getValue(index - 1)));
return term3.dividedBy(FisherIndicator.this.densityFactor);
}

@Override
public int getUnstablePeriod() {
return 0;
}
};
}

Expand All @@ -192,4 +197,9 @@ protected Num calculate(int index) {
return gamma.multipliedBy(term1).plus(delta.multipliedBy(term2));
}

@Override
public int getUnstablePeriod() {
return 0;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@ protected Num calculate(int index) {
return sqrtWma.getValue(index);
}

@Override
public int getUnstablePeriod() {
return barCount;
}

@Override
public String toString() {
return getClass().getSimpleName() + " barCount: " + barCount;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,9 @@ protected Num calculate(int index) {
return priorKAMA.plus(sc.multipliedBy(currentPrice.minus(priorKAMA)));
}

@Override
public int getUnstablePeriod() {
return 0;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,9 @@ protected Num calculate(int index) {
.plus(RCMA3.getValue(index).multipliedBy(RCMA3Multiplier))
.plus(RCMA4.getValue(index).multipliedBy(RCMA4Multiplier)));
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@ protected Num calculate(int index) {
return sum.dividedBy(denominator);
}

@Override
public int getUnstablePeriod() {
return barCount;
}

@Override
public String toString() {
return getClass().getSimpleName() + " barCount: " + barCount;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,9 @@ public EMAIndicator getLongTermEma() {
protected Num calculate(int index) {
return shortTermEma.getValue(index).minus(longTermEma.getValue(index));
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,9 @@ public class MMAIndicator extends AbstractEMAIndicator {
public MMAIndicator(Indicator<Num> indicator, int barCount) {
super(indicator, barCount, 1.0 / barCount);
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,9 @@ protected Num calculate(int index) {
}
return massIndex;
}

@Override
public int getUnstablePeriod() {
return barCount;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,9 @@ protected Num calculate(int index) {
Num longEmaValue = longTermEma.getValue(index);
return shortEmaValue.minus(longEmaValue).dividedBy(longEmaValue).multipliedBy(hundred());
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,11 @@ protected Num calculate(int index) {
return sar;
}

@Override
public int getUnstablePeriod() {
return 0;
}

/**
* Increments the acceleration factor.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,9 @@ protected Num calculate(int index) {
Num longMA = longSma.getValue(index);
return shortMA.minus(longMA).dividedBy(longMA).multipliedBy(hundred());
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ protected Num calculate(int index) {
return currentValue.minus(nPeriodsAgoValue).dividedBy(nPeriodsAgoValue).multipliedBy(hundred());
}

@Override
public int getUnstablePeriod() {
return barCount;
}

@Override
public String toString() {
return getClass().getSimpleName() + " barCount: " + barCount;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,9 @@ protected Num calculate(int index) {
// compute relative strength index
return hundred().minus(hundred().dividedBy(one().plus(relativeStrength)));
}

@Override
public int getUnstablePeriod() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ protected Num calculate(int index) {
return maxRWIH;
}

@Override
public int getUnstablePeriod() {
return barCount;
}

private Num calcRWIHFor(final int index, final int n) {
BarSeries series = getBarSeries();
Num high = series.getBar(index).getHighPrice();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ protected Num calculate(int index) {
return minRWIL;
}

@Override
public int getUnstablePeriod() {
return barCount;
}

private Num calcRWIHFor(final int index, final int n) {
BarSeries series = getBarSeries();
Num low = series.getBar(index).getLowPrice();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@ protected Num calculate(int index) {
return sum.dividedBy(numOf(realBarCount));
}

@Override
public int getUnstablePeriod() {
return barCount;
}

@Override
public String toString() {
return getClass().getSimpleName() + " barCount: " + barCount;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ protected Num calculate(int index) {
return indicator.getValue(index);
}

@Override
public int getUnstablePeriod() {
return 0;
}

@Override
public String toString() {
return getClass().getSimpleName() + " " + indicator;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@ protected Num calculate(int index) {
.multipliedBy(hundred());
}

@Override
public int getUnstablePeriod() {
return barCount;
}

@Override
public String toString() {
return getClass().getSimpleName() + " barCount: " + barCount;
Expand Down