Home Creators Posts Import Register Favorites Logout
haven't archived this post yet. have a subscription? use the importer!

Downloads

  • 64b.BeastBotXBLR7.7z

Missing 1 file, as this post has not yet been imported.

Content


Hi there and welcome to this blog post where I test yet another trading algorithm that I found on the Internet.  This time it is a Beast of a strategy because in my strategy scoring methodology it scores as one of the highest.

The strategy

As a frequent follower of my  videos you might already know that I test my own strategies, strategies  that I found on the Internet but also Code that can be found on Github  and contains trading algorithms. I have a method to test and compare all  these strategies to compare them with each other and then find the best  one that fits my own risk tolerance. And ofcourse I want to share these  findings with you so that you also have the chance to attain wealth  trading. Whether it is manually or by trading bot.

For this video I tested the 'BeastBotXBLR7' trading algorithm that I  found on github. You can also find this code by following this link: https://github.com/PeetCrypto/freqtrade-stuff/blob/main/BeastBotXBLR7.py

As always, If you like the code and appreciate the work of the author  of the code or the repo's owner, then support them with a like or some  financial benefit.

Now about the strategy itself.

Again this is, what I call, a black box strategy. Which means that  there are a lot of cogs and wheels that makes this algorithm work and  extensive research is necessary what all these specific buy and sell  signals do. Only this way you can have information on what makes this  algorithm work and have an edge.

The strategy itself is intended to work on the 5 minute timeframe but  I could also test this on higher timeframes. Up to the 1 hour  timeframe. Not higher because of the informative timeframe setting.

The strategy is able top optimize some strategy parameters due to configured optimize conditions in this section.

Further down there is a function that determines customized exit  settings. Each line here has a certain condition under which an exit  signal is given, together with the exit code. These exit conditions are  the result op parameter optimization that I have show a second ago.

Then there is a section with functions that determine the informative  pairs and indicators. These informative sections provide information  from other pairs or timeframes to be used when the algorithm determines  the buy and sell moments of the current pair or timeframe.

For example, the informative pair that is used is BTC as base  currency and one of its quote currencies. And you can consider this as  some sort of a benchmark to which the current pairs performance is  measured to.

The informative timeframe is used to fill up gaps in the dataframe  for the current timeframe. Especially when higher timeframe indicators  are used in the strategy.

Then there is a section of the normal indicators that are used to determine the signals in the current timeframe.

And finally there is the section where the buy signals and sell  signals are determined for the algorithm. As you can see, there are  multiple entry conditions here.

And besides the custom exit signals also some exit conditions defined in the populate_exit_trend function.

So as you can understand, it would be too tedious and too complicated  to explain each and every buy and sell condition here. Not to mention  the lack of documentation in this code that, at least, could explain  what the purpose was in each section.

Nonetheless, you are probably not here listening to what it does, but  how it would perform under my setup conditions. So let's find out. (zet  hier opmerking dat resultaten per machine/persoon anders kunnen  zijn)...

Backtest results

As said, I could only  test this strategy on the one hour and lower timeframes. And as you can  see, the 5 minute timeframe, on which this strategy originally was build  for, has the best results.

The algorithm has a 70 percent win rate and a maximum drawdown of  only 16 percent. The ratio's also score very good, which indicates that  this algo handles upside and downside risk well. 80 percent of the 50  pairs respond good to this strategy too.

What I also find admirable is the winstreak. 64 wins after another  and only a maximum streak of losses of 13 over the backtesting period.  That results in the high winrate.

If you look at the weekly performance, you see that the wincurve  rises very quickly and that the algo only starts with its drawdown some  time after the last bull market peak. But this drawdown is not as much  as what i've seen on some other algorithms. It's pretty stable in my  opinion.

If I compare the performance of this algo, then you see that this  wincurve does not have these high peaks and low drops. It is a steady  riser and keeps your profits in your pockets. Which is not to say of the  Alligatorstrategy performance.

The only drawback is that it does not make the most money in this  hypothetical situation. But it also does not let you bite your nails  short, when you see most of your gains flowing back to the market again.

Comparing the performance ratios of this strategy with the ratios of  the other top 10 trading strategies, you can clearly see that it scores  high on almost all metrics, except for the most noticable one. And that  is it's profit percentage. Which lags behind the other top 10  strategies.

Which brings me to the factor of a traders personality or risk  profile. Do you like large gains and deep chasms or do you like a lower  but more steady account balance that gives you more comfort. Knowing  that your portfolio has not an 'easy come, easy go' type of account  balance.

this algo has a very stable performance which suits my personal  trading profile and thats why it scores good in my algo scoring  methodology.

This is why it scores pretty high in my Strategy League with 347  points. Only tolerating 2 other algorithmic tradind strategys above it.  Which both score also very well, but also had more hypothetical gains in  the backtests.

So you can see, it is a well deserved third spot at the moment in my league.

Now as might have noticed, I did not do a parameter optimization run,  because I think that right out of the box this performance is good  enough. But this does not stop you from downloading, optimizing and  tweaking some of its parameters.

As long as you do not forget to also give some kudo's to the original developers.

And so we have come to the end of yet another strategy and conclusion on how it performs.

I have still loads of strategies on the backlog so I am not stopping yet.

And if you have a suggestion or a source that you would like me to  test, then put it in the comments section below and I'll put it on the  backlog too.

Many thanks for  reading this blog post. And please  don't forget to click the like button to show me your  appreciation for these efforts.

And I'll see you in the next one.

Goodbye!


Comments

Sefa

I get this error when running this strategy: /home/ftuser/.local/lib/python3.11/site-packages/technical/indicators/indicators.py:965: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise in a future error of pandas. Value '0' has dtype incompatible with datetime64[ns, UTC], please explicitly cast to a compatible dtype first. df.fillna(0, inplace=True) Any idea how to resolve this?

Sergey Dzhenganin

To address this issue, you should handle NaN values differently for datetime columns. You can either: Fill NaN values with a specific date-time value, or Skip filling NaN values in datetime columns. Solution 1: Fill NaN with a Specific Date-Time Value: from pandas import to_datetime # Replace '0' with a specific datetime, for example: '1970-01-01' df.loc[:, df.dtypes == 'datetime64[ns]'] = df.loc[:, df.dtypes == 'datetime64[ns]'].fillna(to_datetime('1970-01-01')) # For other columns, continue using 0 df.fillna(0, inplace=True) Solution 2: Skip Filling NaN in Datetime Columns: # Fill NaN with 0 for non-datetime columns non_datetime_columns = df.select_dtypes(exclude=['datetime64[ns]']) df[non_datetime_columns.columns] = non_datetime_columns.fillna(0)

Sergey Dzhenganin

What I personally would like to see is your config.json file. I followed you on YouTube and downloaded several strategies. When I backtested them on 17 different cryptos, surprisingly, I found very low performance. Please advice!