Roboquant version 3.0 has many changes, several of them are breaking changes. The key reason was to clean-up and simplify areas that were a hard to maintain and/or extend. This makes it easier for people to contiue to try new trading ideas and hack their way roboquant if required. Also removed some modules that didn’t get the attention they deserved in the last few years.
A non-extensive list of the major changes:
-
Signals themselves are simplified and now use a double value for the rating rather than an enum. This is better suited for more advanced ML type of algos.
-
Removed the
Lifecycle
interface includingreset
for the components (Strategy
,Trader
,Broker
). -
Order handling is simplified. For example, order-ids are handout by the broker (during the place order method). So they are no longer assigned when creating the order. This is more inline how most brokers work.
-
Removed the
Roboquant
class. You can now directly use the standalone functionsrun
andrunAsync
.val strategy = EMAStrategy() val feed = CSVFeed("data/US") // old approach // val roboquant = Roboquant(strategy) // roboquant.run(feed) // new approach val account = run(feed, strategy)
-
SimBroker order execution is simplified. Every order type has its own executor that is responsible for every aspect of the execution. A bit less configurable, but much easier to roll your own implementation.
-
Improved the
Broker
interface. Only thebroker.sync()
call now provides access to theaccount
object. -
MetricsLogger
is replaced byJournal
andMetricsJournal
. Journal has access to more data (also new orders and signals).fun track(event: Event, account: Account, signals: List<Signal>, orders: List<Order>) { TODO() }
-
Hearth-beat generation for live feeds now done at consumer level via a time-out. This avoids a lot of possible errors and complications when nesting live feeds.
-
Better naming convention for many classes/attributes. The main ones are:
-
Event
actions
are now calleditems
. -
Instruction
is now the interface forOrder
,Cancellation
andModification
-
Policy
is renamed toTrader
.
-
-
For the time being removed the machine learning module. Rethinking what frameworks to use for future ML algo trading.
-
Different asset types (f.e FOREX, STOCKS, FUTURES), are now their own class.
-
Removed the
roboquant-binance
module. It was using an old unsupported Binance API. And since Binance no longer operates in my country, it is difficult to move to the newer API without be able to test it. -
Removed the
roboquant-polygon
androboquant-server
modules, wasn’t using them anymore (easy to bring back) -
Use the new Alpaca library that is based on published OpenAPI specification.
-
Simplified AvroFeed (have to see if this is not too simple). Had to drop the
feed.assets
method to make this possible. -
Updated most of the dependencies. Only not yet moved to Kotlin 2.0 since Jupyter Notebooks are not yet supported.
-
Removed the
Summary
functionality. This required relative a lot of code and maintenance and now replaced by a simpler toString() implementation.