Skip to content

Latest commit

 

History

History
50 lines (44 loc) · 3.21 KB

CHANGELOG.adoc

File metadata and controls

50 lines (44 loc) · 3.21 KB

Changelog

Major changes in 3.0

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 including reset 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 functions run and runAsync.

    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 the broker.sync() call now provides access to the account object.

  • MetricsLogger is replaced by Journal and MetricsJournal. 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. Two main ones are:

    • Event actions are now called items.

    • Instruction is now the interface for Order, Cancellation and Modification

    • Policy is renamed to Trader.

  • 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 and roboquant-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.