sthewissen / Mynt

An Azure Functions-based crypto currency trading bot; featuring 10 exchanges, 25 indicators, custom strategy support, backtester and more

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Improve trading performance

sthewissen opened this issue · comments

Currently the trading process has a serial nature to it. It retrieves all the markets, checks them all for possible trades and then creates all the found trades until no traders are available anymore. This means that a trade may be placed minutes after it was found which is not optimal. The process takes some time and could be optimised further:

  • Stop checking for more trades when the amount of possible trades is exceeded
  • Immediately place a trade as soon as TA has found it
  • Run the TA in parallel instead of one after another?

Sound good. Also parallel processing is IMHO a important change because with sequential processing a buy is possibly to late.

Checking for new trades even if all traders are at work could possibly still be a useful option. If a trader sell it already have a buy option and could check if the TA is still valid

I could use input on a lot of things probably when it comes to this.

  1. First off I believe @cryptoandrej had the idea to combine the PaperTradeManager and the LiveTradeManager into one. Switching between the two would then be as simple as a boolean toggle in the constructor. I support that idea.

  2. The Initialize() method seems a bit redundant in many cases. Currently it runs before each buy loop and queries the database to see if it needs to create or change how the current trader instances are set up. This seems like a lot of overhead once the bot is up-and-running. Especially when trading lower timeframes a useless DB call every 1 or 5 mins seems like a total waste of resources. Could we simplify this Trader setup process?

I'm working on this in the trademanager-performance branch if anyone wants to pitch in :) If you have additional ideas on how to go about improving how the trademanager works at the moment, feel free to post here :)

Hey guys I think we have a thread issue with the initialize(); sometimes when the cron is to fast it hits that twice. So if DB context is already in use we have the problem from asynchronous DB context. We have some ways to get rid of that.

  1. Maybe a pseudo object which contains the DB context and we save it in the end so there would be no lock in database.

  2. Semaphore lock in sell or buy. Therefore only one task can go in the semaphore it is like a queue.

Parallel loops would be must have if we want more frequent trading bots.

But all in all I like the idea to get rid of duplicate code from traders...