Search in sources :

Example 1 with CashFlow

use of org.ta4j.core.analysis.CashFlow in project ta4j by ta4j.

the class MaximumDrawdownCriterion method calculate.

@Override
public double calculate(TimeSeries series, TradingRecord tradingRecord) {
    CashFlow cashFlow = new CashFlow(series, tradingRecord);
    Decimal maximumDrawdown = calculateMaximumDrawdown(series, cashFlow);
    return maximumDrawdown.doubleValue();
}
Also used : CashFlow(org.ta4j.core.analysis.CashFlow) Decimal(org.ta4j.core.Decimal)

Example 2 with CashFlow

use of org.ta4j.core.analysis.CashFlow in project ta4j by ta4j.

the class CashFlowToChart method main.

public static void main(String[] args) {
    // Getting the time series
    TimeSeries series = CsvTradesLoader.loadBitstampSeries();
    // Building the trading strategy
    Strategy strategy = MovingMomentumStrategy.buildStrategy(series);
    // Running the strategy
    TimeSeriesManager seriesManager = new TimeSeriesManager(series);
    TradingRecord tradingRecord = seriesManager.run(strategy);
    // Getting the cash flow of the resulting trades
    CashFlow cashFlow = new CashFlow(series, tradingRecord);
    /*
          Building chart datasets
         */
    TimeSeriesCollection datasetAxis1 = new TimeSeriesCollection();
    datasetAxis1.addSeries(buildChartTimeSeries(series, new ClosePriceIndicator(series), "Bitstamp Bitcoin (BTC)"));
    TimeSeriesCollection datasetAxis2 = new TimeSeriesCollection();
    datasetAxis2.addSeries(buildChartTimeSeries(series, cashFlow, "Cash Flow"));
    /*
          Creating the chart
         */
    JFreeChart chart = ChartFactory.createTimeSeriesChart(// title
    "Bitstamp BTC", // x-axis label
    "Date", // y-axis label
    "Price", // data
    datasetAxis1, // create legend?
    true, // generate tooltips?
    true, // generate URLs?
    false);
    XYPlot plot = (XYPlot) chart.getPlot();
    DateAxis axis = (DateAxis) plot.getDomainAxis();
    axis.setDateFormatOverride(new SimpleDateFormat("MM-dd HH:mm"));
    /*
          Adding the cash flow axis (on the right)
         */
    addCashFlowAxis(plot, datasetAxis2);
    /*
          Displaying the chart
         */
    displayChart(chart);
}
Also used : CashFlow(org.ta4j.core.analysis.CashFlow) DateAxis(org.jfree.chart.axis.DateAxis) XYPlot(org.jfree.chart.plot.XYPlot) TimeSeriesCollection(org.jfree.data.time.TimeSeriesCollection) MovingMomentumStrategy(ta4jexamples.strategies.MovingMomentumStrategy) ClosePriceIndicator(org.ta4j.core.indicators.helpers.ClosePriceIndicator) SimpleDateFormat(java.text.SimpleDateFormat) JFreeChart(org.jfree.chart.JFreeChart)

Example 3 with CashFlow

use of org.ta4j.core.analysis.CashFlow in project ta4j by ta4j.

the class MaximumDrawdownCriterion method calculate.

@Override
public double calculate(TimeSeries series, Trade trade) {
    if (trade != null && trade.getEntry() != null && trade.getExit() != null) {
        CashFlow cashFlow = new CashFlow(series, trade);
        Decimal maximumDrawdown = calculateMaximumDrawdown(series, cashFlow);
        return maximumDrawdown.doubleValue();
    }
    return 0;
}
Also used : CashFlow(org.ta4j.core.analysis.CashFlow) Decimal(org.ta4j.core.Decimal)

Example 4 with CashFlow

use of org.ta4j.core.analysis.CashFlow in project ta4j by ta4j.

the class Quickstart method main.

public static void main(String[] args) {
    // Getting a time series (from any provider: CSV, web service, etc.)
    TimeSeries series = CsvTradesLoader.loadBitstampSeries();
    // Getting the close price of the bars
    Decimal firstClosePrice = series.getBar(0).getClosePrice();
    System.out.println("First close price: " + firstClosePrice.doubleValue());
    // Or within an indicator:
    ClosePriceIndicator closePrice = new ClosePriceIndicator(series);
    // Here is the same close price:
    // equal to firstClosePrice
    System.out.println(firstClosePrice.isEqual(closePrice.getValue(0)));
    // Getting the simple moving average (SMA) of the close price over the last 5 bars
    SMAIndicator shortSma = new SMAIndicator(closePrice, 5);
    // Here is the 5-bars-SMA value at the 42nd index
    System.out.println("5-bars-SMA value at the 42nd index: " + shortSma.getValue(42).doubleValue());
    // Getting a longer SMA (e.g. over the 30 last bars)
    SMAIndicator longSma = new SMAIndicator(closePrice, 30);
    // Ok, now let's building our trading rules!
    // Buying rules
    // We want to buy:
    // - if the 5-bars SMA crosses over 30-bars SMA
    // - or if the price goes below a defined price (e.g $800.00)
    Rule buyingRule = new CrossedUpIndicatorRule(shortSma, longSma).or(new CrossedDownIndicatorRule(closePrice, Decimal.valueOf("800")));
    // Selling rules
    // We want to sell:
    // - if the 5-bars SMA crosses under 30-bars SMA
    // - or if if the price looses more than 3%
    // - or if the price earns more than 2%
    Rule sellingRule = new CrossedDownIndicatorRule(shortSma, longSma).or(new StopLossRule(closePrice, Decimal.valueOf("3"))).or(new StopGainRule(closePrice, Decimal.valueOf("2")));
    // Running our juicy trading strategy...
    TimeSeriesManager seriesManager = new TimeSeriesManager(series);
    TradingRecord tradingRecord = seriesManager.run(new BaseStrategy(buyingRule, sellingRule));
    System.out.println("Number of trades for our strategy: " + tradingRecord.getTradeCount());
    // Analysis
    // Getting the cash flow of the resulting trades
    CashFlow cashFlow = new CashFlow(series, tradingRecord);
    // Getting the profitable trades ratio
    AnalysisCriterion profitTradesRatio = new AverageProfitableTradesCriterion();
    System.out.println("Profitable trades ratio: " + profitTradesRatio.calculate(series, tradingRecord));
    // Getting the reward-risk ratio
    AnalysisCriterion rewardRiskRatio = new RewardRiskRatioCriterion();
    System.out.println("Reward-risk ratio: " + rewardRiskRatio.calculate(series, tradingRecord));
    // Total profit of our strategy
    // vs total profit of a buy-and-hold strategy
    AnalysisCriterion vsBuyAndHold = new VersusBuyAndHoldCriterion(new TotalProfitCriterion());
    System.out.println("Our profit vs buy-and-hold profit: " + vsBuyAndHold.calculate(series, tradingRecord));
// Your turn!
}
Also used : SMAIndicator(org.ta4j.core.indicators.SMAIndicator) CashFlow(org.ta4j.core.analysis.CashFlow) CrossedUpIndicatorRule(org.ta4j.core.trading.rules.CrossedUpIndicatorRule) TotalProfitCriterion(org.ta4j.core.analysis.criteria.TotalProfitCriterion) StopLossRule(org.ta4j.core.trading.rules.StopLossRule) StopGainRule(org.ta4j.core.trading.rules.StopGainRule) ClosePriceIndicator(org.ta4j.core.indicators.helpers.ClosePriceIndicator) RewardRiskRatioCriterion(org.ta4j.core.analysis.criteria.RewardRiskRatioCriterion) VersusBuyAndHoldCriterion(org.ta4j.core.analysis.criteria.VersusBuyAndHoldCriterion) CrossedDownIndicatorRule(org.ta4j.core.trading.rules.CrossedDownIndicatorRule) StopLossRule(org.ta4j.core.trading.rules.StopLossRule) StopGainRule(org.ta4j.core.trading.rules.StopGainRule) CrossedDownIndicatorRule(org.ta4j.core.trading.rules.CrossedDownIndicatorRule) CrossedUpIndicatorRule(org.ta4j.core.trading.rules.CrossedUpIndicatorRule) AverageProfitableTradesCriterion(org.ta4j.core.analysis.criteria.AverageProfitableTradesCriterion)

Aggregations

CashFlow (org.ta4j.core.analysis.CashFlow)4 Decimal (org.ta4j.core.Decimal)2 ClosePriceIndicator (org.ta4j.core.indicators.helpers.ClosePriceIndicator)2 SimpleDateFormat (java.text.SimpleDateFormat)1 JFreeChart (org.jfree.chart.JFreeChart)1 DateAxis (org.jfree.chart.axis.DateAxis)1 XYPlot (org.jfree.chart.plot.XYPlot)1 TimeSeriesCollection (org.jfree.data.time.TimeSeriesCollection)1 AverageProfitableTradesCriterion (org.ta4j.core.analysis.criteria.AverageProfitableTradesCriterion)1 RewardRiskRatioCriterion (org.ta4j.core.analysis.criteria.RewardRiskRatioCriterion)1 TotalProfitCriterion (org.ta4j.core.analysis.criteria.TotalProfitCriterion)1 VersusBuyAndHoldCriterion (org.ta4j.core.analysis.criteria.VersusBuyAndHoldCriterion)1 SMAIndicator (org.ta4j.core.indicators.SMAIndicator)1 CrossedDownIndicatorRule (org.ta4j.core.trading.rules.CrossedDownIndicatorRule)1 CrossedUpIndicatorRule (org.ta4j.core.trading.rules.CrossedUpIndicatorRule)1 StopGainRule (org.ta4j.core.trading.rules.StopGainRule)1 StopLossRule (org.ta4j.core.trading.rules.StopLossRule)1 MovingMomentumStrategy (ta4jexamples.strategies.MovingMomentumStrategy)1