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);
}
}
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();
}
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;
}
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);
}
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);
}
Aggregations