Search in sources :

Example 1 with Trade

use of org.ta4j.core.Trade in project crypto-bot by jnidzwetzki.

the class Chart method addBuySellSignals.

private static void addBuySellSignals(TimeSeries series, Strategy strategy, XYPlot plot) {
    // Running the strategy
    TimeSeriesManager seriesManager = new TimeSeriesManager(series);
    List<Trade> trades = seriesManager.run(strategy).getTrades();
    // Adding markers to plot
    for (Trade trade : trades) {
        // Buy signal
        double buySignalTickTime = new Minute(Date.from(series.getBar(trade.getEntry().getIndex()).getEndTime().toInstant())).getFirstMillisecond();
        Marker buyMarker = new ValueMarker(buySignalTickTime);
        buyMarker.setPaint(Color.GREEN);
        buyMarker.setLabel("B");
        plot.addDomainMarker(buyMarker);
        // Sell signal
        double sellSignalTickTime = new Minute(Date.from(series.getBar(trade.getExit().getIndex()).getEndTime().toInstant())).getFirstMillisecond();
        Marker sellMarker = new ValueMarker(sellSignalTickTime);
        sellMarker.setPaint(Color.RED);
        sellMarker.setLabel("S");
        plot.addDomainMarker(sellMarker);
    }
}
Also used : Trade(org.ta4j.core.Trade) Minute(org.jfree.data.time.Minute) TimeSeriesManager(org.ta4j.core.TimeSeriesManager) ValueMarker(org.jfree.chart.plot.ValueMarker) Marker(org.jfree.chart.plot.Marker) ValueMarker(org.jfree.chart.plot.ValueMarker)

Example 2 with Trade

use of org.ta4j.core.Trade in project ta4j by ta4j.

the class AverageProfitableTradesCriterion method calculate.

@Override
public double calculate(TimeSeries series, TradingRecord tradingRecord) {
    int numberOfProfitable = 0;
    for (Trade trade : tradingRecord.getTrades()) {
        int entryIndex = trade.getEntry().getIndex();
        int exitIndex = trade.getExit().getIndex();
        Decimal result;
        if (trade.getEntry().isBuy()) {
            // buy-then-sell trade
            result = series.getBar(exitIndex).getClosePrice().dividedBy(series.getBar(entryIndex).getClosePrice());
        } else {
            // sell-then-buy trade
            result = series.getBar(entryIndex).getClosePrice().dividedBy(series.getBar(exitIndex).getClosePrice());
        }
        if (result.isGreaterThan(Decimal.ONE)) {
            numberOfProfitable++;
        }
    }
    return ((double) numberOfProfitable) / tradingRecord.getTradeCount();
}
Also used : Trade(org.ta4j.core.Trade) Decimal(org.ta4j.core.Decimal)

Example 3 with Trade

use of org.ta4j.core.Trade in project ta4j by ta4j.

the class StopGainRule method isSatisfied.

@Override
public boolean isSatisfied(int index, TradingRecord tradingRecord) {
    boolean satisfied = false;
    // No trading history or no trade opened, no gain
    if (tradingRecord != null) {
        Trade currentTrade = tradingRecord.getCurrentTrade();
        if (currentTrade.isOpened()) {
            Decimal entryPrice = currentTrade.getEntry().getPrice();
            Decimal currentPrice = closePrice.getValue(index);
            Decimal threshold = entryPrice.multipliedBy(gainRatioThreshold);
            if (currentTrade.getEntry().isBuy()) {
                satisfied = currentPrice.isGreaterThanOrEqual(threshold);
            } else {
                satisfied = currentPrice.isLessThanOrEqual(threshold);
            }
        }
    }
    traceIsSatisfied(index, satisfied);
    return satisfied;
}
Also used : Trade(org.ta4j.core.Trade) Decimal(org.ta4j.core.Decimal)

Example 4 with Trade

use of org.ta4j.core.Trade in project ta4j by ta4j.

the class LinearTransactionCostCriterionTest method fixedCostWithOneTrade.

@Test
public void fixedCostWithOneTrade() {
    MockTimeSeries series = new MockTimeSeries(100, 95, 100, 80, 85, 70);
    Trade trade = new Trade();
    double criterion;
    criterion = getCriterion(1000d, 0d, 0.75d).calculate(series, trade);
    assertEquals(0d, criterion, TATestsUtils.TA_OFFSET);
    trade.operate(1);
    criterion = getCriterion(1000d, 0d, 0.75d).calculate(series, trade);
    assertEquals(0.75d, criterion, TATestsUtils.TA_OFFSET);
    trade.operate(3);
    criterion = getCriterion(1000d, 0d, 0.75d).calculate(series, trade);
    assertEquals(1.5d, criterion, TATestsUtils.TA_OFFSET);
    trade.operate(4);
    criterion = getCriterion(1000d, 0d, 0.75d).calculate(series, trade);
    assertEquals(1.5d, criterion, TATestsUtils.TA_OFFSET);
}
Also used : Trade(org.ta4j.core.Trade) MockTimeSeries(org.ta4j.core.mocks.MockTimeSeries) ExternalCriterionTest(org.ta4j.core.ExternalCriterionTest) Test(org.junit.Test)

Example 5 with Trade

use of org.ta4j.core.Trade in project ta4j by ta4j.

the class NumberOfBarsCriterionTest method calculateWithOneTrade.

@Test
public void calculateWithOneTrade() {
    MockTimeSeries series = new MockTimeSeries(100, 95, 100, 80, 85, 70);
    Trade t = new Trade(Order.buyAt(2, series), Order.sellAt(5, series));
    AnalysisCriterion numberOfBars = new NumberOfBarsCriterion();
    assertEquals(4, numberOfBars.calculate(series, t), TATestsUtils.TA_OFFSET);
}
Also used : Trade(org.ta4j.core.Trade) MockTimeSeries(org.ta4j.core.mocks.MockTimeSeries) AnalysisCriterion(org.ta4j.core.AnalysisCriterion) Test(org.junit.Test)

Aggregations

Trade (org.ta4j.core.Trade)7 Decimal (org.ta4j.core.Decimal)3 Test (org.junit.Test)2 MockTimeSeries (org.ta4j.core.mocks.MockTimeSeries)2 Marker (org.jfree.chart.plot.Marker)1 ValueMarker (org.jfree.chart.plot.ValueMarker)1 Minute (org.jfree.data.time.Minute)1 AnalysisCriterion (org.ta4j.core.AnalysisCriterion)1 ExternalCriterionTest (org.ta4j.core.ExternalCriterionTest)1 TimeSeriesManager (org.ta4j.core.TimeSeriesManager)1