Hey man,
A graph is just a visual representation of numbers. So before a graph is visual it is hard data. Value / Time.
First of all, there are muuuuuuuultiple ways of doing this. Scanning every hour linearly (hour 1 then 2 then 3, etc) and saving the index where it drops, then adding to a list of possible bases. Using that method you'd have to see if the next bounce is higher, and if it could possibly be added to the previous one. Scanning sections of the data only, increasing/decreasing your time frame on each run. Which is the one I'll try and explain below.
This is a very high level explanation there will be lots of caveats as @quickfingersluc 's method gets more descriptions and community additions. The one thing I took away from @quickfingersluc is that a base is more solid when qualified by a "nice" bounce (Nice here being your definition, but usually determined by previous bases looking at 2 months data).
So the way I would calculate a base is checking what the average gain is over different time periods. You could do a basic check to see if there's a possibility of a base checking data at hour[1] against data at hour[24] if it has a decent gain you flag that as possible base, you then move the index one to the right checking [2] and [25], you keep doing this and finding possibilities of bases.
After this there are multiple ways you can qualify bases even further I'll list a few below with very very short descriptions.
- Has it touched base? Seeing a base being touched and a bouncing back up is always a good indicator of a solid base (I think, I'm also still new)
- Time spent abover base? How much time passed for the arc to get back down to the base. If it's 3 hours is that really a base or just some volatile movements in the coins value.
- I'm sure there are more but I can't think of it.
At this point you want to check bases that occur in quick succession of each other and combine them using loosely defined rules and run the function over the combined ones again with bigger and smaller timeframes, this will make sure the bounces belong together or if they're separate. If you find a bounce you then use your rules above to qualify the base and so on.
You keep checking all the hourly data and refining your algorithm and at some point you'll get a nice base checker. But as I said there are numerous ways of finding the base (As spoken of by Luc). Since he doesn't have a complete solid way of defining a base we can't have one either. It's up to you how you want to interpret the data. Your software will have the same level of "understanding" of the concept as you have :)
I hope this helps, dm me on the slack channel @danemackier if you want some more info.