devalpha-io / devalpha-node

A stream-based approach to algorithmic trading and backtesting in Node.js
https://devalpha.io
GNU General Public License v3.0
246 stars 40 forks source link

Feature: Allow external async calls into strategy #15

Open symis84 opened 5 years ago

symis84 commented 5 years ago

This Pull Request allows developers to use external async calls into "strategy". This feature is useful every time you need to get external async informations (external signals) when "strategy" has been called. After you get your async informations you can trigger "next(action)" from strategy

coveralls commented 5 years ago

Pull Request Test Coverage Report for Build 92


Changes Missing Coverage Covered Lines Changed/Added Lines %
lib/index.ts 2 3 66.67%
<!-- Total: 2 3 66.67% -->
Totals Coverage Status
Change from base Build 91: -0.003%
Covered Lines: 448
Relevant Lines: 457

💛 - Coveralls
fhqvst commented 5 years ago

This is definitely something I'd like to have (although I would probably prefer using async/await rather than callbacks).

However, my experience is that there are quite a few hidden little details which makes it harder to implement than it might seem at first. One must consider where events should be buffered, whether or not all consumers can be asynchronous, if ORDER_PLACED and ORDER_FILLED are guaranteed to be run before the next data feed event is parsed when backtesting, and so on.

Furthermore, DevAlpha's heavy dependence on Highland also adds to the complexity. Have a look at the createStreamSorted function for example.

But as I said – I'd very much like to have support for this. I'm probably fine with any solution as long as we have thorough tests for the cases mentioned above.