/** * Init the trading stretegies */ private void createStrategies() { for(final BitfinexCurrencyPair currency : tradedCurrencies) { TradeStrategyFactory strategyFactory = new EMAStrategy03(5, 12, 40, timeSeries.get(currency)); final Strategy strategy = strategyFactory.getStrategy(); strategies.put(currency, strategy); } }
public TradeExecutor(final double portfolioValue, final TradeStrategyFactory tradeStrategyFactory) { this.portfolioValue = portfolioValue; this.initialPortfolioValue = portfolioValue; this.timeSeries = tradeStrategyFactory.getTimeSeries(); this.tradeStrategyFactory = tradeStrategyFactory; }
private void openTrade(final int i) { openBarIndex = i; final double openPrice = timeSeries.getBar(i).getOpenPrice().doubleValue(); openContracts = tradeStrategyFactory.getContracts(portfolioValue, i); final double positionSize = openPrice * openContracts; if(positionSize > portfolioValue) { throw new IllegalArgumentException("Unable to open a trade with position size: " + positionSize + " portfolio size: " + positionSize); } calculateFees(openPrice); }
private void processTrade(final TradeStrategyFactory strategyFactory) { //debugTrades(strategy); final TradeExecutor tradeExecutor = new TradeExecutor(USD_AMOUNT, strategyFactory); tradeExecutor.executeTrades(); System.out.format("%s\t%f\t%f\t%f\t%d\t%d\t%d\t%f\t%f\t%d\t%d\n", strategyFactory.getName(), tradeExecutor.getPortfolioValue(), tradeExecutor.getTotalPL(), tradeExecutor.getFees(), tradeExecutor.getTotalTrades(), tradeExecutor.getWinner(), tradeExecutor.getLooser(), tradeExecutor.getMaxWin(), tradeExecutor.getMaxLoose(), tradeExecutor.getLoserInARow(), tradeExecutor.getExecutedStopLoss()); /* final Chart chart = new Chart(strategy, timeSeries); chart.showChart(); */ }
public void executeTrades() { for (int i = timeSeries.getBeginIndex(); i < timeSeries.getEndIndex(); i++) { final Strategy strategy = tradeStrategyFactory.getStrategy(); if(strategy.shouldEnter(i) && openContracts == 0) { openTrade(i); } else if(strategy.shouldExit(i) && openContracts > 0) { closeTrade(i); } } if(openContracts > 0) { closeTrade(timeSeries.getEndIndex()); } }