package org.cryptocoinpartners.schema; import javax.inject.Inject; import javax.persistence.Transient; import org.cryptocoinpartners.module.Context; import org.cryptocoinpartners.service.OrderService; import org.cryptocoinpartners.service.PortfolioService; import org.cryptocoinpartners.service.QuoteService; import org.cryptocoinpartners.service.Strategy; import org.slf4j.Logger; /** * A Strategy represents a configurable approach to trading, but not a specific trading algorithm. StrategyPortfolioManager * instantiates a Strategy by loading to a module which contains a Strategy service using a specific configuration set * by the StrategyPortfolioManager. The Strategy may then place Orders against Positions in the StrategyPortfolioManager's Portfolio. * BaseStrategy helps implement Strategies by providing injected fields for a QuoteService and OrderBuilder. * * @author Tim Olson */ public class BaseStrategy implements Strategy { @Override public void setPortfolio(Portfolio portfolio) { // portfolioService // this.portfolio = portfolio; this.portfolio = portfolio; SubscribePortfolio portfolioSubcribeEvent = new SubscribePortfolio(portfolio); portfolio.getContext().publish(portfolioSubcribeEvent); Asset baseAsset = Asset.forSymbol(portfolio.getContext().getConfig().getString("base.symbol", "USD")); portfolio.setBaseAsset(baseAsset); portfolio.merge(); // PersistUtil.insert(portfolio); // order = new OrderBuilder(portfolio, orderService); log = portfolio.getLogger(); } // @Inject protected void setPortfolioService(PortfolioService portfolioService) { this.portfolioService = portfolioService; } protected void setQuotes(QuoteService quotes) { this.quotes = quotes; } protected void setOrderService(OrderService orderService) { this.orderService = orderService; } @Transient protected PortfolioService getPortfolioService() { return this.portfolioService; } @Transient protected OrderService getOrderService() { return this.orderService; } @Transient protected QuoteService getQuotes() { return this.quotes; } @Override @Transient public Portfolio getPortfolio() { return this.portfolio; } /** This tracks the assets you have for trading */ /** This is what you use to place orders: * <pre> * order.create(Listing.BTC_USD,1.00).withLimit(651.538).place(); * </pre> */ protected static OrderBuilder order; /** You may use this service to query the most recent Trades and Books for all Listings and Markets. */ @Inject protected transient QuoteService quotes; @Inject protected transient Portfolio portfolio; @Inject protected transient Context context; @Inject protected transient OrderService orderService; @Inject protected transient PortfolioService portfolioService; @Inject protected transient GeneralOrderFactory generalOrderFactory; @Inject protected transient SpecificOrderFactory specificOrderFactory; @Inject protected transient TransactionFactory transactionFactory; // @Inject protected static Logger log; @Override public void init() { portfolioService.init(); orderService.init(); } }