Of course, when starting a new project it could be a good idea to put some requirements down to assure your efforts are going to be more or less in the direction of where you would like to end up after your journey. Books have been written about this, as well as ISO standards. I will keep things very basic so you, the reader will not get bored and go looking for funny cat videos on youtube.
Most of the functional requirements have already been named in the previous post. I think these are fairly complete and will just copy them here:
- A website
- For entering values
- And maybe later creating some reporting dashboards
- A database
- For storing the entered values
- And maybe later some results
- And maybe later doing something with authentication and user profiles
- Gekko trading bot
- To simulate automatic trading
- A Gekko strategy that uses the data the website stored in the database: this strategy makes an evaluation and tells Gekko to buy or sell. I need to write this part so Gekko can interface with my web api.
- Web API
- So Gekko has access to the data
Of course, as we go there will be new requirements, and existing requirements will become clearer and more refined..
These are sometimes more important to get right in the architectural phase of the project because choices made here could be very hard to change after the project has been built. Nonfunctional architecture decisions could be things like:
- What platform are you going to use?
- Windows, Linux, Containers, Logic Apps, etc..
- What type of data store
- Relational, nonrelational, both?
I would like my application to be able to run on Windows and Linux VMs and containers. This means I will be starting with a .NET Core Web application template because I think this will provide me with that requirement.
Painting a picture
What I always like to do next is to draw a few pictures and maybe a workflow diagram. This does not need to be anything fancy, but it will help to identify the different elements of the solution and which part is responsible for what actions. This also helps because while you are drawing, new questions will come up which allows you to refine your requirements and understanding even more.
The most interesting question I think, is what format I will use for storing the conditions. I have 2 options: store and return values, or use the CoinDataService to calculate the advice for Gekko. This would be the easiest, but in my opinion this service is only for returning data, so that is what I will store:
- A condition, like “greater than” or “smaller than”
- An advice: “long” or “short”
- A value to be checked against the condition. Typically the price of a coin at which the condition should fire and the advice should be given.
I think this is a pretty good starting point for me: I think it will take me a few hours to build the website and web service parts. After that there will be new challenges…
That’s it for now. I had fun writing and learned a lot about WordPress but now it’s really time to go to sleep..