A Java library for technical analysis.

Overview

ta4j Build Status develop Build Status master Discord License: MIT Maven Central Sonatype Nexus (Snapshots)

Technical Analysis For Java

Ta4j main chart

Ta4j is an open source Java library for technical analysis. It provides the basic components for creation, evaluation and execution of trading strategies.


Features

  • 100% Pure Java - works on any Java Platform version 8 or later
  • More than 130 technical indicators (Aroon, ATR, moving averages, parabolic SAR, RSI, etc.)
  • A powerful engine for building custom trading strategies
  • Utilities to run and compare strategies
  • Minimal 3rd party dependencies
  • Simple integration
  • One more thing: it's MIT licensed

Maven configuration

Ta4j is available on Maven Central. You just have to add the following dependency in your pom.xml file.

<dependency>
  <groupId>org.ta4j</groupId>
  <artifactId>ta4j-core</artifactId>
  <version>0.13</version>
</dependency>

For snapshots, add the following repository to your pom.xml file.

<repository>
    <id>sonatype snapshots</id>
    <url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>

The current snapshot version is 0.14-SNAPSHOT from the develop branch.

<dependency>
  <groupId>org.ta4j</groupId>
  <artifactId>ta4j-core</artifactId>
  <version>0.14-SNAPSHOT</version>
</dependency>

You can also download example code from the maven central repository by adding the following dependency to your pom.xml:

<dependency>
  <groupId>org.ta4j</groupId>
  <artifactId>ta4j-examples</artifactId>
  <version>0.13</version>
</dependency>

Getting Help

The wiki is the best place to start learning about ta4j. For more detailed questions, please use the issues tracker.

Contributing to ta4j

Here are some ways for you to contribute to ta4j:

See also: the contribution policy and Code of Cunduct


YourKit supports the Ta4j project with its full-featured Java Profiler. YourKit, LLC is the creator of YourKit Java Profiler and YourKit .NET Profiler, innovative and intelligent tools for profiling Java and .NET applications.

Comments
  • Extract interface of BigDecimal to provide calculations with other data types

    Extract interface of BigDecimal to provide calculations with other data types

    Issue #75 shows that there is also a big demand for increasing the performance of ta4j. It also shows that with BigDecimal the potential of increasing performance is very limited.

    To satisfy the demand for performance and precision, I think it will be a good solution to create several classes like FastDecimal and ExactDecimal which implement an interface of the current Decimal class.

    • FastDecimal will have a double as delegate and will be standard (?)

    • ExactDecimal will have a BigDecimal as delegate and can be used as parameter by creating a Tick/TimeSeries

    With a Decimal interface it will be also possible to have further data types for calculation. E.g. if someone needs only integers he can do so with a custom class that implement the interface.

    enhancement performance 
    opened by team172011 58
  • Lack of performance

    Lack of performance

    Hello guys,

    I'm watching this project since few months. It seems to be good (tests, docs, etc.). But.. this framework has a lack of performance.

    Here is an example:

    `
    @Test public void testIfQuickEnough() { long start = System.currentTimeMillis(); int initialCapacity = 54 * 5 * 24 * 60 * 3;

        double[] input = new double[initialCapacity];
        for (int i = 0; i < input.length; i++) {
            input[i] = 5d;
        }
    
        /**
         * just adding close price instead timestamp with close price:
         *   AnotherMockTimeSeries: ticks.add(new MockTick(data[i]));
             //MockTimeSeries: ticks.add(new MockTick(ZonedDateTime.now().with(ChronoField.MILLI_OF_SECOND, i), data[i]));
         */
        TimeSeries timeSeries = new AnotherMockTimeSeries(input);
    
        Decimal average = null;
        for (int h = 2; h < 3; h++) {
            SMAIndicator quoteSMA = new SMAIndicator(new ClosePriceIndicator(timeSeries), h);
            for (int i = 0; i < timeSeries.getTickCount(); i++) {
                average = quoteSMA.getValue(i);
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("average = " + average);
    
        System.out.println("Time elapsed: " + (end - start));
    }
    

    `

    Output: average = 5 Time elapsed: 15811

    if you use int h = 2; h < 200 instead h < 3: ... stopped java process... too slow.... 200x15811~3 000 000 ms ~50 min.

    ... VERY SLOW...

    Used Macbook Pro Mid 2014. Looks like this framework is only for realtime trading :)

    For comparison:

    Are there any roadmap issues to increase performance?

    enhancement question 
    opened by damir78 51
  • Unable to use because of ZonedDateTime

    Unable to use because of ZonedDateTime

    Hi I want to use this library for Android App. But this library uses ZonedDateTime class which is supported only in Oreo (API 26) based Android devices. You can confirm it from below URL : https://developer.android.com/reference/java/time/ZonedDateTime.html So my question is how I can use this library function for older API based devices. Oreo is not available on almost 80% of total Android devices as of now.

    enhancement question 
    opened by yogikorke 45
  • Update AnalysisCriterion to Num

    Update AnalysisCriterion to Num

    Fixes #186 .

    Changes proposed in this pull request:

    • Fixed requirements as mentioned in #186

    • Use Num in AnalysisCriterion

    • But keep Criterion parameters as primitives

    • [x] added an entry to the unreleased section of CHANGES.md

    Notes:

    • There was 1 test, namely NumberOfTradesTest::calculateWithOneTrade that passed the TimeSeries as null, but I changed this to some series, otherwise series.numOf() would give a null pointer exception,
    • LinearTransactionCostCriterionTest is giving different results, it's not consistent anymore with external data, nor the test data, it looks to me like a precision diff between double/Num. Please check it. I think we should change the xls/tests to reflect the new outcome. (Because of this the tests are currently failing)
    • Don't merge yet, until LinearTransactionCostCriterion(Test) is fixed :)
    opened by MarijnKoesen 30
  • Construct StochasticRSI indicator properly

    Construct StochasticRSI indicator properly

    Hello,

    I am trying to build Stochastic RSI indicator. In StochasticRSI there are K, D, Rsi and Stochastic parameters.

    I want build StochRSI(14, 9, 3, 3):

    • RSI = 14
    • Stoch = 9
    • K = 3
    • D = 3
    StochasticOscillatorKIndicator k = new StochasticOscillatorKIndicator(series, 3);
    StochasticOscillatorDIndicator d = new StochasticOscillatorDIndicator(k);
    RSIIndicator rsi = new RSIIndicator(d, 14); // I think it's wrong
    StochasticRSIIndicator stochRsi = new StochasticRSIIndicator(rsi, 9);
    

    Result of the stochRsi calculation is totally wrong when compare to result with exchange's graphs. How can I construct StochasticRSIIndicator properly?

    enhancement question 
    opened by FatihErdem 25
  • Trade != Order

    Trade != Order

    We know a trade is not an order. However, ta4j uses Trade and Order in a confusing way.

    • in ta4j, a trade is a pair of entry and exit order, however, an order is not a trade and even two orders are not a trade.

    Maybe we should consider to rename the followings: -rename Order.class to Trade.class -rename Trade.classto TradePair.class (or other better names?)

    Or?

    opened by nimo23 24
  • ADX Constructors

    ADX Constructors

    Fixes:

    Fixed numOf() inside calculate() for ADX related indicators using existing final instance field pattern.

    Changes proposed in this pull request:

    Added constructors so ADX and related objects can be created and used with substantially fewer "child" indicators. Reduces the number of array lists (27 to 12, by my count) if ADX and +/-DI are used together in a strategy. Might improve processing a little. These constructors will create 1 instance of each object, rather than separate objects that end up calculating and caching the same numbers.

    Moved DX to adx package. The ADX constructor is the only place DX is referenced.

    +DM and -DM were also moved to adx package, only being referenced by +/-DI respectively. There is a small chance these 3 moves will break import statements in 0.13 user code, but it seems unlikely that people would instantiate these objects independently.

    Added getBarCount() and toString to ATR.

    opened by johnthetireless 21
  • Fixes #287 Implemented a way to find the best result for multiple strategies by submitting a range of numbers while backtesting

    Fixes #287 Implemented a way to find the best result for multiple strategies by submitting a range of numbers while backtesting

    Fixes #287 Implemented a way to find the best result for multiple strategies by submitting a range of numbers while backtesting

    • [x] added an entry to the unreleased section of CHANGES.md
    opened by jansoren 21
  • "constrained time" series vs "subseries"

    I have a timeseries s and want to create a new subseries s1 from it. s has 20 ticks with index 0 to 19. s1 should be a subseries from s containing only the last 10 ticks from the actual index backwards.

    TimeSeries s1 = new BaseTimeSeries(s, index - 10, index);

    However, after printing "s1.getTickData()" and "series.getTickData()", both timeseries has the same ticks included. s1 normally should have only 10 ticks included and not 20. What is wrong?

    bug enhancement change 
    opened by nimo23 21
  • New: convergence and divergence rules

    New: convergence and divergence rules

    Changes proposed in this pull request:

    • ConvergenceDivergenceIndicator.java

    • ChaikinOscillator.java

    • add parameter "name" in (Base)Strategy.java

    • [x] added an entry to the unreleased section of CHANGES.md

    opened by nimo23 21
  • Enhance/precision num

    Enhance/precision num

    Fixes #198 .

    Changes proposed in this pull request:

    • PrecisionNum introduction

    • add Num numOf(String, int)

    • more tests in NumTest

    • add TestUtils.assertIndicatorEquals() with delta for inexact matching

    • logging

    • rename DoubleNumVsBigDecimalNum to CompareNumTypes, add error percentage reporting

    • [ ] added an entry to the unreleased section of CHANGES.md

    opened by edlins 20
  • fixed expectancy criterion calculation, updated unit tests, noted in …

    fixed expectancy criterion calculation, updated unit tests, noted in …

    Fixes #926

    Changes proposed in this pull request:

    • Fixed ExpectancyCriterion calculation

    • Updated unit tests

    • updated changelog

    • [X] added an entry with related ticket number(s) to the unreleased section of CHANGES.md

    opened by TheCookieLab 0
  • [BUG] ExpectancyCriterion Incorrect Calculation

    [BUG] ExpectancyCriterion Incorrect Calculation

    I have checked existing issues and wiki

    Describe the bug The Expectancy calculation is incorrect. In it's current form, it can only ever be negative or zero.

    To Reproduce Steps to reproduce the behavior:

    1. Run ExpectancyCriterionTest.calculateOnlyWithProfitPositions(). The trading record has 100% win rate with positive overall profit yet the expectancy score is 0.

    Expected behavior In the above unit test the expectancy should be 1.0

    Additional context The expectancy formula linked in the comments (https://www.straightforex.com/advanced-forex-course/money-management/two-important-things-to-be-considered/) is incorrect, which is likely the root cause of this bug.

    bug 
    opened by TheCookieLab 0
  • Merge pull request #1 from quimsical/patch-1

    Merge pull request #1 from quimsical/patch-1

    Create Fork ta4j

    Fixes #.

    Changes proposed in this pull request:

    • [ ] added an entry with related ticket number(s) to the unreleased section of CHANGES.md

    opened by quimsical 0
  • Supertrend Indicator

    Supertrend Indicator

    I have checked existing issues and wiki

    Is it possible to add the Supertrend indicator? I found a beginning of the solution in https://stackoverflow.com/questions/68063996/java-implementation-of-supertrend

    Thank you

    enhancement 
    opened by jiro1072 0
  • How to manage stop loss orders ?

    How to manage stop loss orders ?

    I have checked existing issues and wiki

    If possible provide a minimal working example!

    ta4j is the most complete ta library I found as far as indicators are concerned. Awesome job !

    I was considering using it until I met the strategy implementation. This one brought a lot of questions to me about entry and exit rules.

    Actually, the exist rule was what really buged me.

    When trading, the exist rule is usally a mix between a stop loss and a take profit orders which are placed according to a predifined risk ratio.

    Let's say I'm willing to have a 1:1 risk ratio. Which means I'll risk as much as I'm targeting to profit. To defined my profit target, I'll first set my stop loss. There are several ways to do so, but let's say the PSAR will be used. When an entry signal is detected, my exist rule should be both:

    • a stop loss order at the PSAR value
    • a take profit order at the current price + (current price - PSAR value)

    ta4j makes possible to implement such a rule. But unfortunately, it won't work on a trading bot.

    Let's say the bot is trading on the 1h time frame. The exist rule will be evaluated at the next received bar (= the next hour). The exit decision will be taken too late risking way more than the risk management strategy allows. The only way to comply with the risk management is to place orders which will be executed directly by the broker.

    What I've considered was to ignore the exist rule (or use it for short entry signals) and create orders I'll push to the broker according to the entry signal. However, it makes the strategy unable to be backtested as it does not take into account the possibility to have stop loss order.

    I considered using the exist rule to simulate the stop loss order on backtesting. But doing so would result in having at least 2 implementations of the same strategy for :

    • live trading which will only detect entry signals
    • backtesting which will detect entry signals as the live trading does but with an hack on exist rule to simulate stop loss and take profit executions (making the use of exit rule for short position impossible)

    What I would have expected would be to have one single strategy and being able to use it in both backtesting and live trading contexts.

    My question is then : how do you manage stop loss (and take profit) within a single strategy ?

    question 
    opened by gelhaimer 2
  • Indicator must consider its own unstable period

    Indicator must consider its own unstable period

    Actually, the user must know which value to set for Strategy#unstablePeriod. However, this is not user friendly, because the user is not always aware of the technical details of the indicators (e.g. SARIndicator needs at least 200 bars before the values can be calculated correctly, other indicators needs at least its barCount, etc.). How should the user know such technical issues beforehand?

    It's better to have this implemented and documented within each Indicator. The implementor of the indicator must provide this information within the source code of the indicator. Thus, I created https://github.com/ta4j/ta4j/pull/918 (which is a work in progress, as I do not know the right unstablePeriod for each indicator). However, we should be obliged to implement and improve the unstablePeriod within the indicator.

    After that, we can consider to implement some ideas from:

    • https://github.com/ta4j/ta4j/issues/101#issuecomment-346143435
    • https://github.com/ta4j/ta4j/issues/101#issue-275653040
    • https://github.com/ta4j/ta4j/issues/526#issue-574805289

    @team172011, I think your suggestions would be the next step:

    It is also necessary to determine the behavior of the Indicator.calculates(index) function regarding this issue. At the moment it is inconsistent. If it is not possible to calculate a value (e.g. because of index < size of timeFrame) some indicators return NaN, others zero while others modify timeFrame (make it smaller). I would suggest to return NaN whenever it is not possible to calculate the correct value

    We must not, under any circumstances, give users false calculated values; calculated indicator values ​​during the "warm-up" of the indicators are inherently wrong and should never be passed to the user, those values must be either NaN or null.

    I think, we cannot delegate the value of indicator.getUnstablePeriod() from a Rule to Strategy.unstablePeriod(as suggested in https://github.com/ta4j/ta4j/issues/147#issuecomment-366767366) - this is not possible as indicators can be wrapped by other indicators and the Rule only has access to the outermost indicator.getUnstablePeriod() which could be less than any innermost indicator.getUnstablePeriod().

    Thus, the only solution would be to return NaN or null for Indicator.calculate() within the Indicator#getUnstablePeriod() to imitate something like Strategy#unstablePeriod.

    enhancement 
    opened by nimo23 0
Releases(0.15)
  • 0.15(Sep 11, 2022)

    Release 0.15 of the Ta4j library.

    This is the second release via GitHub Releases. Ta4j is also available on the maven central repository

    www.ta4j.org

    Changelog for ta4j, roughly following keepachangelog.com from version 0.9 onwards.

    0.15 (released September 11, 2022)

    Breaking

    • NumberOfConsecutiveWinningPositions renamed to NumberOfConsecutivePositions
    • DifferencePercentage renamed to DifferencePercentageIndicator
    • BuyAndHoldCriterion renamed to EnterAndHoldCriterion
    • DXIndicator moved to adx-package
    • PlusDMIndicator moved to adx-package
    • MinusDMIndicator moved to adx-package
    • analysis/criterion-package moved to root
    • cost-package moved to analysis/cost-package
    • AroonXXX indicators moved to aroon package

    Fixed

    • LosingPositionsRatioCriterion correct betterThan
    • VersusBuyAndHoldCriterionTest NaN-Error.
    • Fixed ChaikinOscillatorIndicatorTest
    • DecimalNum#remainder() adds NaN-check
    • Fixed ParabolicSarIndicatorTest fixed openPrice always 0 and highPrice lower than lowPrice
    • UlcerIndexIndicator using the max price of current period instead of the highest value of last n bars
    • DurationBarAggregator fixed aggregation of bars with gaps

    Changed

    • KeltnerChannelMiddleIndicator changed superclass to AbstractIndicator; add GetBarCount() and toString()
    • KeltnerChannelUpperIndicator add constructor to accept pre-constructed ATR; add GetBarCount() and toString()
    • KeltnerChannelLowerIndicator add constructor to accept pre-constructed ATR; add GetBarCount() and toString()
    • BarSeriesManager removed empty args constructor
    • Open|High|Low|Close do not cache price values anymore
    • DifferenceIndicator(i1,i2) replaced by the more flexible CombineIndicator.minus(i1,i2)
    • DoubleNum replace redundant toString() call in DoubleNum.valueOf(Number i) with i.doubleValue()
    • ZeroCostModel now extends from FixedTransactionCostModel

    Removed/Deprecated

    • Num removed Serializable
    • PriceIndicator removed

    Added

    • NumericIndicator new class providing a fluent and lightweight api for indicator creation
    • AroonFacade, BollingerBandFacade, KeltnerChannelFacade new classes providing a facade for indicator groups by using lightweight NumericIndicators
    • AbstractEMAIndicator added getBarCount() to support future enhancements
    • ATRIndicator "uncached" by changing superclass to AbstractIndicator; added constructor to accept TRIndicator and getter for same; added toString(); added getBarCount() to support future enhancements
    • :tada: Enhancement added possibility to use CostModels when backtesting with the BacktestExecutor
    • :tada: Enhancement added Num#zero, Num#one, Num#hundred
    • :tada: Enhancement added possibility to use CostModels when backtesting with the BacktestExecutor
    • :tada: Enhancement added Indicator#stream() method
    • :tada: Enhancement added a new CombineIndicator, which can combine the values of two Num Indicators with a given combine-function
    • Example added a json serialization and deserialization example of BarSeries using google-gson library
    • EnterAndHoldCriterion added constructor with TradeType to begin with buy or sell
    • :tada: Enhancement added Position#getStartingType() method
    • :tada: Enhancement added SqnCriterion
    • :tada: Enhancement added StandardDeviationCriterion
    • :tada: Enhancement added RelativeStandardDeviationCriterion
    • :tada: Enhancement added StandardErrorCriterion
    • :tada: Enhancement added VarianceCriterion
    • :tada: Enhancement added AverageCriterion
    • :tada: Enhancement added javadoc for all rules to make clear which rule makes use of a TradingRecord
    • Enhancement prevent Object[] allocation for varargs log.trace and log.debug calls by wrapping them in if blocks
    • :tada: Enhancement added FixedTransactionCostModel
    • :tada: Enhancement added AnalysisCriterion.PositionFilter to handle both sides within one Criterion.
    Source code(tar.gz)
    Source code(zip)
    ta4j-core-0.15-javadoc.jar(1.50 MB)
    ta4j-core-0.15-sources.jar(376.59 KB)
    ta4j-core-0.15.jar(323.57 KB)
    ta4j-examples-0.15-javadoc.jar(273.93 KB)
    ta4j-examples-0.15-sources.jar(827.45 KB)
    ta4j-examples-0.15.jar(839.06 KB)
  • 0.14(Apr 25, 2021)

    Release 0.14 of the Ta4j library.

    This is the first release via GitHub Releases. Ta4j is also available on the maven central repository

    www.ta4j.org

    CHANGELOG:

    0.14 (released April 25, 2021)

    Breaking

    • Breaking: PrecisionNum renamed to DecimalNum
    • Breaking: AverageProfitableTradesCriterion renamed to WinningTradesRatioCriterion
    • Breaking: AverageProfitCriterion renamed to AverageReturnPerBarCriterion
    • Breaking: BuyAndHoldCriterion renamed to BuyAndHoldReturnCriterion
    • Breaking: RewardRiskRatioCriterion renamed to ReturnOverMaxDrawdownCriterion
    • Breaking: ProfitLossCriterion moved to PnL-Package
    • Breaking: ProfitLossPercentageCriterion moved to PnL-Package
    • Breaking: TotalProfitCriterion renamed to GrossReturnCriterion and moved to PnL-Package.
    • Breaking: TotalProfit2Criterion renamed to GrossProfitCriterion and moved to PnL-Package.
    • Breaking: TotalLossCriterion renamed to NetLossCriterion and moved to PnL-Package.
    • Breaking: package "tradereports" renamed to "reports"
    • Breaking: NumberOfTradesCriterion renamed to NumberOfPositionsCriterion
    • Breaking: NumberOfLosingTradesCriterion renamed to NumberOfLosingPositionsCriterion
    • Breaking: NumberOfWinningTradesCriterion renamed to NumberOfWinningPositionsCriterion
    • Breaking: NumberOfBreakEvenTradesCriterion renamed to NumberOfBreakEvenPositionsCriterion
    • Breaking: WinningTradesRatioCriterion renamed to WinningPositionsRatioCriterion
    • Breaking: TradeStatsReport renamed to PositionStatsReport
    • Breaking: TradeStatsReportGenerator renamed to PositionStatsReportGenerator
    • Breaking: TradeOpenedMinimumBarCountRule renamed to OpenedPositionMinimumBarCountRule
    • Breaking: Trade.class renamed to Position.class
    • Breaking: Order.class renamed to Trade.class
    • Breaking: package "tradereports" renamed to "reports"
    • Breaking: package "trading/rules" renamed to "rules"
    • Breaking: remove Serializable from all indicators
    • Breaking: Bar#trades: changed type from int to long

    Fixed

    • Fixed Trade: problem with profit calculations on short trades.
    • Fixed TotalLossCriterion: problem with profit calculations on short trades.
    • Fixed BarSeriesBuilder: removed the Serializable interface
    • Fixed ParabolicSarIndicator: problem with calculating in special cases
    • Fixed BaseTimeSeries: can now be serialized
    • Fixed ProfitLossPercentageCriterion: use entryPrice#getValue() instead of entryPrice#getPricePerAsset()

    Changed

    • Trade: Changed the way Nums are created.
    • WinningTradesRatioCriterion (previously AverageProfitableTradesCriterion): Changed to calculate trade profits using Trade's getProfit().
    • BuyAndHoldReturnCriterion (previously BuyAndHoldCriterion): Changed to calculate trade profits using Trade's getProfit().
    • ExpectedShortfallCriterion: Removed unnecessary primitive boxing.
    • NumberOfBreakEvenTradesCriterion: Changed to calculate trade profits using Trade's getProfit().
    • NumberOfLosingTradesCriterion: Changed to calculate trade profits using Trade's getProfit().
    • NumberOfWinningTradesCriterion: Changed to calculate trade profits using Trade's getProfit().
    • ProfitLossPercentageCriterion: Changed to calculate trade profits using Trade's entry and exit prices.
    • TotalLossCriterion: Changed to calculate trade profits using Trade's getProfit().
    • TotalReturnCriterion (previously TotalProfitCriterion): Changed to calculate trade profits using Trade's getProfit().
    • WMAIndicator: reduced complexity of WMAIndicator implementation

    Removed/Deprecated

    • MultiplierIndicator: replaced by TransformIndicator.
    • AbsoluteIndicator: replaced by TransformIndicator.

    Added

    • Enhancement Improvements on gitignore
    • Enhancement Added TradeOpenedMinimumBarCountRule - rule to specify minimum bar count for opened trade.
    • Enhancement Added DateTimeIndicator a new Indicator for dates.
    • Enhancement Added DayOfWeekRule for specifying days of the week to trade.
    • Enhancement Added TimeRangeRule for trading within time ranges.
    • Enhancement Added floor() and ceil() to Num.class
    • Enhancement Added getters getLow() and getUp() in CrossedDownIndicatorRule
    • Enhancement Added BarSeriesUtils: common helpers and shortcuts for BarSeries methods.
    • Enhancement Improvements for PreviousValueIndicator: more descriptive toString() method, validation of n-th previous bars in
    • Enhancement Added Percentage Volume Oscillator Indicator, PVOIndicator.
    • Enhancement Added Distance From Moving Average Indicator, DistanceFromMAIndicator.
    • Enhancement Added Know Sure Thing Indicator, KSTIndicator. constructor of PreviousValueIndicator
    • :tada: Enhancement added getGrossProfit() and getGrossProfit(BarSeries) on Trade.
    • :tada: Enhancement added getPricePerAsset(BarSeries) on Order.
    • :tada: Enhancement added convertBarSeries(BarSeries, conversionFunction) to BarSeriesUtils.
    • :tada: Enhancement added UnstableIndicator.
    • :tada: Enhancement added Chainrule.
    • :tada: Enhancement added BarSeriesUtils#sortBars.
    • :tada: Enhancement added BarSeriesUtils#addBars.
    • :tada: Enhancement added Num.negate() to negate a Num value.
    • :tada: Enhancement added GrossLossCriterion.class.
    • :tada: Enhancement added NetProfitCriterion.class.
    • :tada: Enhancement added chooseBest() method with parameter tradeType in AnalysisCriterion.
    • :tada: Enhancement added AverageLossCriterion.class.
    • :tada: Enhancement added AverageProfitCriterion.class.
    • :tada: Enhancement added ProfitLossRatioCriterion.class.
    • :tada: Enhancement added ExpectancyCriterion.class.
    • :tada: Enhancement added ConsecutiveWinningPositionsCriterion.class.
    • :tada: Enhancement added LosingPositionsRatioCriterion.class
    • :tada: Enhancement added Position#hasProfit.
    • :tada: Enhancement added Position#hasLoss.
    • :tada: Enhancement exposed both EMAs in MACD indicator
    Source code(tar.gz)
    Source code(zip)
    CHANGELOG.md(27.67 KB)
Java library for the Stripe API.

Stripe Java client library The official Stripe Java client library. Installation Requirements Java 1.8 or later Gradle users Add this dependency to yo

Stripe 637 Jan 3, 2023
Ta4j is an open source Java library for technical analysis

Ta4j is an open source Java library for technical analysis. It provides the basic components for creation, evaluation and execution of trading strategies.

null 1.7k Dec 31, 2022
Android Resource Manager application to manage and analysis your app resources with many features like image resize, Color, Dimens and code Analysis

AndroidResourceManager Cross-Platform tools to manage your resources as an Android Developer, AndroidResourceManager - ARM provide five main services

Amr Hesham 26 Nov 16, 2022
For English vocabulary analysis and sentence analysis in natural language, model trainin

Sword Come ?? For English vocabulary analysis and sentence analysis in natural language, model training, intelligent response and emotion analysis rea

James Zow 2 Apr 9, 2022
We have created a techblog website where a user can post technical posts and edit and update the post accordingly.

TechBlog Introduction - In this project we have created a technical blog website where we have provided functionalities such as 1) SignUp 2) Login 3)

Riya Vijay Vishwakarma 2 Jan 23, 2022
Teaching repository for the undergraduate course in Operations Research at Technical University Munich.

Tutorial for Operations Research SS22 Konstantin Kuchenmeister Teaching repository for the undergraduate course in Operations Research at Technical Un

Konstantin Kuchenmeister 9 Aug 27, 2022
Inria 1.4k Dec 29, 2022
Java Statistical Analysis Tool, a Java library for Machine Learning

Java Statistical Analysis Tool JSAT is a library for quickly getting started with Machine Learning problems. It is developed in my free time, and made

null 752 Dec 20, 2022
Java library for parsing report files from static code analysis.

Violations Lib This is a Java library for parsing report files like static code analysis. Example of supported reports are available here. A number of

Tomas Bjerre 127 Nov 23, 2022
SpotBugs is FindBugs' successor. A tool for static analysis to look for bugs in Java code.

SpotBugs is the spiritual successor of FindBugs, carrying on from the point where it left off with support of its community. SpotBugs is licensed unde

null 2.9k Jan 4, 2023
Java runtime metadata analysis

Released org.reflections:reflections:0.9.12 - with support for Java 8 Reflections library has over 2.5 million downloads per month from Maven Central,

null 4.4k Dec 29, 2022
Lightweight analysis tool for detecting mutability in Java classes

What is Mutability Detector? Mutability Detector is designed to analyse Java classes and report on whether instances of a given class are immutable. I

Mutability Detector 234 Dec 29, 2022
Code metrics for Java code by means of static analysis

CK CK calculates class-level and method-level code metrics in Java projects by means of static analysis (i.e. no need for compiled code). Currently, i

Maurício Aniche 286 Jan 4, 2023
BCC - Tools for BPF-based Linux IO analysis, networking, monitoring, and more

BPF Compiler Collection (BCC) BCC is a toolkit for creating efficient kernel tracing and manipulation programs, and includes several useful tools and

IO Visor Project 16.3k Dec 30, 2022
Performance analysis tools based on Linux perf_events (aka perf) and ftrace

perf-tools A miscellaneous collection of in-development and unsupported performance analysis tools for Linux ftrace and perf_events (aka the "perf" co

Brendan Gregg 8.8k Dec 28, 2022
SAMOA (Scalable Advanced Massive Online Analysis) is an open-source platform for mining big data streams.

SAMOA: Scalable Advanced Massive Online Analysis. This repository is discontinued. The development of SAMOA has moved over to the Apache Software Foun

Yahoo Archive 424 Dec 28, 2022
ThirdEye is an integrated tool for realtime monitoring of time series and interactive root-cause analysis.

ThirdEye is an integrated tool for realtime monitoring of time series and interactive root-cause analysis. It enables anyone inside an organization to collaborate on effective identification and analysis of deviations in business and system metrics. ThirdEye supports the entire workflow from anomaly detection, over root-cause analysis, to issue resolution and post-mortem reporting.

null 87 Oct 17, 2022
Magician is an asynchronous non-blocking network protocol analysis package, supports TCP, UDP protocol, built-in Http, WebSocket decoder

An asynchronous non-blocking network protocol analysis package Project Description Magician is an asynchronous non-blocking network protocol analysis

贝克街的天才 103 Nov 30, 2022
💥 Crasher - open source dump/crash server for different programming languages (used for crash analysis in various applications)

Crashser Crasher - open source dump/crash server for different programming languages (used for crash analysis in various applications). Supported lang

Balun Vladimir 14 Oct 6, 2022