Awhile ago, I was hired to create a crytocurrency automatic trader, using Bittrex's API. It was the first time I've heavily used an HTTP API from Java. It mostly works, but unfortunately still has some issues. I've decided to re-write to make it more stable, especially due to the fact that Bittrex has a vague rate limit. I also wanted a better way to calculate things like a market's volatility, using a different method to operate on existing data.
Since I was recreating it from scratch, I also decided to create it in two different layers. This was mainly because I wanted to use the base trading core for both personal and portfolio uses, as well as making it open source. Otherwise, I wouldn't be able to release any of the source (as it's a client project).
The core wouldn't do anything on it's own, except track data. It would provide calculation functions for getting any kind of data you want in any form. The second layer, which would be for the client specifically, would check the data against it's own criteria and make the purchases/sells through the core.