Version 3: Gunbot Strategy The Aggressive Machine Gun
Version 3: The Aggressive Machine Gun
Hello everybody! Back again with the third configuration and some answers to popular questions I’ve been receiving on Telegram. I want to give shout-outs as well as say thanks to everybody who’s been contacting me! It’s been brilliant getting to talk to people from all around the world. You’ve given me lots of new ideas, different tweaks you’ve tried on your own, and all around made my life more cheerful with your kind words.
I’ve been using this software for years and still learn stuff all the time. It had slightly fallen off my radar how much it can be to first-timers. After speaking with so many of you, I’ve started to remember that this can be a very daunting task to setup and understand for newcomers. The best advice I can give is to make sure you start small and learn comfortably, knowing your life isn’t on the line. Don’t go dropping all your savings in the first week you’re playing with the bot. I know it’s exciting, and you want to start making profits, but the key is to make money, not lose it from a basic misunderstanding.
Like in the last posts, we’re going to start with the new configuration settings and AutoConfig file. Then we’ll get into deeper explanations of what’s changed and why. Today’s post is exciting because we’re going to start using multiple copies of the bot open simultaneously. Get something to drink, get comfortable, & get ready for more Gunbot goodness!
Gunbot The Aggressive Machine Gun
Version III Configuration Settings: (bold settings are new to this version)
-
- Buy Method: gain
- Buy Level: -10
- Sell Method: gain
- Gain: 0.25
- Trading Limit: 100
- Min Volume To Buy: 11
- Min Volume To Sell: 11
- Funds Reserve: 1
- Period: 1
- Medium EMA: 60
- Fast EMA: 30
- Double Up Enabled: on
- DU Cap: 0.1
- DU Cap Count: 12
- DU Method: 0.5
- DU Buydown: 0.5
- TrailMe Buy: on
- TrailMe Buy Range: 0.05
- TrailMe Sell: on
- TrailMe Sell Range: 0.05
- TrailMe DU: on
- Market Buy: on
- Market Sell: on
- Market DU: on
- Trades Timeout: 0
- Exchange Delay: 0
Version III AutoConfig File:
{
"CheckIfBull": {
"pairs": {
"exclude": "",
"include": "-",
"exchange": "gdax"
},
"filters": {
"BullCheck1": {
"type": "exact",
"ducount": 0
}
},
"overrides": {
"TRAIL_ME_SELL_RANGE": 0.1
},
"clearOverrides": false,
"schedule": "*/3 * * * * *",
"type": "manageOverrides",
"debug": false,
"enabled": true
},
"CheckIfNormal": {
"pairs": {
"exclude": "",
"include": "-",
"exchange": "gdax"
},
"filters": {
"BullCheck2": {
"type": "biggerThan",
"ducount": 0
}
},
"overrides": {
"TRAIL_ME_SELL_RANGE": 0.05
},
"clearOverrides": false,
"schedule": "*/3 * * * * *",
"type": "manageOverrides",
"debug": false,
"enabled": true
},
"DURange-Fast": {
"pairs": {
"exclude": "",
"include": "-",
"exchange": "gdax"
},
"filters": {
"ducount1": {
"type": "smallerThan",
"ducount": 2
}
},
"overrides": {
"DOUBLE_UP_CAP": 1,
"TRAIL_ME_BUY_RANGE": 0.05,
"DU_METHOD": 0.25,
"DU_BUYDOWN": 0.25
},
"clearOverrides": false,
"schedule": "*/3 * * * * *",
"type": "manageOverrides",
"debug": false,
"enabled": true
},
"DURange-Normal": {
"pairs": {
"exclude": "",
"include": "-",
"exchange": "gdax"
},
"filters": {
"ducount2": {
"type": "biggerThan",
"ducount": 1
},
"ducount3": {
"type": "smallerThan",
"ducount": 7
}
},
"overrides": {
"DOUBLE_UP_CAP": 0.1,
"TRAIL_ME_BUY_RANGE": 0.05,
"DU_METHOD": 0.5,
"DU_BUYDOWN": 0.5
},
"clearOverrides": false,
"schedule": "*/3 * * * * *",
"type": "manageOverrides",
"debug": false,
"enabled": true
},
"DURange-Slow": {
"pairs": {
"exclude": "",
"include": "-",
"exchange": "gdax"
},
"filters": {
"ducount4": {
"type": "biggerThan",
"ducount": 6
}
},
"overrides": {
"DOUBLE_UP_CAP": 0.1,
"TRAIL_ME_BUY_RANGE": 0.1,
"DU_METHOD": 1,
"DU_BUYDOWN": 1
},
"clearOverrides": false,
"schedule": "*/3 * * * * *",
"type": "manageOverrides",
"debug": false,
"enabled": true
}
}
Tightening the Entry Phase:
As you can see in the new settings, I’ve brought the entry purchases back to a happy medium between the first two versions. I started looking at my graphs throughout the week and noticed that more often than not, I’d only have up to two rounds of DCA before the pair profited and reset. It was close, but if you counted the times between one buy one sells and then single or double rounds of DCA, it was greater than the total that went all the way to round three. This meant I was leaving money on the table with the smaller entry purchases, something I debated in the last post.
Now it buys in at $100 but only has two rounds of 1:1 DCAs. This gets us back to the same amount of $400 before the AutoConfig kicks in and, just like last time, starts making much smaller 1:0.1 purchases as the market travels downwards. I see better profits this way, but you lose a considerable amount of position when the markets continue to travel downwards, and it doesn’t make that third 1:1 anymore. I’d say this is up to you personally, depending on how conservative you are. Greedy to the max? Run with what I’ve done here in the new version. Want to be safer? Run with how I did it in the previous version.
Cutting DCAs by 33% To Open More Pairs:
Crypto markets are insane -10% one day can be +10% the next. Often, I’ve wondered how far down I should chase a market before it’s just going to end up in holdings anyway. Sure, getting the best possible position for reentry is favorable, but I’m also not made of endless funds. I have a limited amount I can trade on, and there has to be a balance between keeping funds working in other markets vs. securing the best position on falling markets. I decided to test in this version to eliminate the “Lost In Space” section of the AutoConfig completely. That means instead of making 18 total rounds of DCAs, and it now does 12. Two very sharp 1:1 rounds in the Fast category of the AutoConfig, then five in both the Normal and Slow sections.
This means we now end with pairs holding roughly $1000 at max DCA depth instead of $1700. We’re going to take that extra money and put it into opening more markets. The idea behind this is that while some are failing, hopefully, we have a better chance of continuing to ride the wave. It also increases our ability to hit bull runs as we’ve got more ground covered. Now I’ve made over a grand in profits since my last post, so I now have 6k on the bot to work with instead of 5k. Working because I can generally “do the dance” discussed in the previous posts and have twice the markets open, I can actually afford this means I can run twelve now. Once again, if things go to hell and we see a complete market downfall, I’m going to be super boned.
I want to point out that in the last ten rounds of DCA, we’re still getting an entire 1:1.5 ratio in purchasing. Just because we cut out the last six rounds doesn’t mean it’s not averaging down a considerable amount. We’re going from $400 exiting the Fast section of the AutoConfig to $1000 by the end of the process. That’s 150% of bettering our position for reentry. Meanwhile, from $1000 to $1700, the rounds we cut out were only 70%. This is why I feel the funds are better served to continue to make trades elsewhere, as you’ll see in the results for this configs test cycle.
Increasing TrailMe Sell Range for One Buy One Sell Situations:
As you can see in my last post, there has been great debate over the TrailMe Sell setting of 0.1 vs. 0.05. This has continued, and nobody seems to have a clear answer given the situation is so variable. Just watching the graphs over the last week, I’m still favoring my original position, with 0.05 being the best for min/maxing profits while machine-gunning sub percentage trades. Though when the market is just shooting upwards, and it’s only making one buy, one sells over and over the 0.05 is clearly triggering sell-offs too early.
This is causing it to have to buy back in, and we’re losing profits because it has to stop and start. This leaves a middle ground between the two purchases that are lost gains and forces us to pay another cycle of trade fees. This sucks. The easiest, most straightforward solution I could come up with for this is introducing a new section to the AutoConfig where it simply checks if we’ve made any DCA purchases. If not, change the TrailMe Sell Range to 0.1, meaning it can go through one-by-one sell cycles over and over with the better setting. When we start making DCA purchases, it changes it back to 0.05 as there has now been a fall in the market, and we’re probably going back into sub percent machine guns again.
This isn’t complicated, and it does a great job. You can even use this same system to swap between, say, 0.25 on bulls and 0.1 on normal markets if you absolutely hate the 0.05 setting. Edit the AutoConfig, and you’re off to the races.
Changing Trade Timeouts Back to Zero:
You can see in the last post discussion over Trade Timeouts. Not wanting to accidentally create duplicate purchase orders thanks to lag along the way both to and from your exchange. I introduced a mindboggling long wait time of 10 seconds to make sure no matter what, and this would never happen. Though over a week of reviewing this later, I do not have it. I tried several AutoConfig scripts to fix this for each situation in which it mattered.
For example, I experimented with “ourBaginBase” checks to see if we’re holding then changing the Trade Timeout based on that. Sadly, like some of my attempts at changing DU Cap Counts, the changes would not affect until the bot was fully stopped and started again. I could see the script getting ran in the console, pairs were being filtered, but when you checked the logs, it wouldn’t ever actually make the changes live. I honestly don’t know if that’s just a bug in the current version of the software or if my basic scripts weren’t cutting the mustard.
Regardless, after review and thinking about how the bot processes pairs, I’ve returned it to a setting of 0 for now. This setting is most important in real-world practice when we’re in a bull run scenario making one buy one sells all the way up the charts or when there are massive sudden dips out of nowhere, and you want to buy all the way down even if they’re only seconds from each other. You need to maintain that lightning ability in both of these cases, and it just can’t get done with an absurdly long wait time like the previous settings of ten seconds.
I’ve had a couple of misfired orders thanks to latency over the span of the last week. There have been thousands of trades happening, so this has been deemed acceptable in the grand scheme of things. I’d rather maintain the speed and deal with the infrequent accidentally double purchase than slow things down so much.
Though I’m on fiber and have a sub 25ms run to my exchange, depending on your connection reliability & speed, you may consider keeping the long delay from the previous version. Just watch your bot each day whenever you can and look for the double/triple purchases. If you see them on your charts, then go into your dashboard & logs to see if it was just different rates your exchange was issuing you on market orders or if you were actually submitting multiple orders.
Increasing Precision with Multiple Instances:
This goes hand in hand with the above topic but getting deeper under the hood, and the bot processes your trading pairs in a rolling cycle. The more pairs you have, the longer it takes to get back to the first one. The delay in your exchange settings further controls this. Even at the fastest setting of 0, it’s still going to take time to get through each pair. For example, let’s say you have twelve pairs trading, and it was taking an average of one second to process each pair. That would mean it would take twelve seconds total to make a full rotation. About the above topic, this is why even with a Trade Timeout of 0, you’re still not getting instantaneous results. There’s a defacto gap as it polls other pairs.
To make the bot as fast as possible and increase order precision, we need to request as many pairs per second as we can. This is done by opening up more than one instance of the bot with your pairs equally divided. This will be naturally limited by two things, your hardware resources and/or your exchanges API limits. In my case, I’m still testing on Coinbase Pro, which, when you look at their documentation, has a limit for Private Endpoints of “5 requests per second, up to 10 requests per second in bursts.” So, we take the twelve pairs we’re running for this test and divide them equally by three, ending up with four clients we need. Given the request slightly faster than one per second with a delay setting of 0, that means we’ll be just at or under the limit of five requests per second the exchange has.
This is covered on the Gunbot Wiki under the “running multiple instances” section. Though it’s straightforward. Basically, we copy our Gunbot folder. Then change the config files only to have the pairs we want running in each new instance. It would help if you then changed the port for both the GUI and WS section in the config plus the client port in the WS section. This is to keep them from interacting with each other and allow you access to the different instances. If you want to do some house cleaning and get rid of your old pair logs that will no longer be running in any given copy, you can do that too. Now we have four copies of Gunbot running, requesting over four pairs a second from my exchange. My delay via pair cycling has been effectively reduced by 75%, which greatly helps increase order precision when hunting those epic dips or catching just the right time to sell-off.
This has jacked my trade server’s resource usage up considerably, though. Previously, it was almost idle, occasionally hopping to 5% during busy times. I’m now seeing constant processor use with peaks to 20%. Disk time is up as it’s writing four times the logs, memory is up, etc. While I’ve got plenty of headroom on the server, this might be something to watch for if you’re running Gunbot on limited hardware. Another side effect of speeding things up so much is I had to change the AutoConfig to update every three seconds to stand a chance at catching the changes it needs to make before additional orders are placed. @_@
When You Start Your Bot Makes a Difference:
I wanted to take a moment and talk about when you first start your bot up. I’ve spoken to people with many results from being told it’s amazing to wow look at all those DCA rounds pop off. This is natural to the markets and requires a tad bit of forethought. If you just got your accounts set up and scripts in place, then turn it on the right at the end of a huge bull run, then it’s going to start trying to acquire bags and position itself on a massive downhill slide. This is going to be rough as the first entry purchase is set to happen pretty quickly. The configuration is meant to stay active all the time, almost always holding.
There is nothing that this or most other configurations can do if the markets drop 15% in a day after you’ve bought in. The only way to tackle bags is to set a stop loss where you’re going to take a loss to reset your position or dollar cost average on the way down, so you have a better position on the way up. There’s always reversal trading as well, but it’s not something this configuration is set up to do at all.
This is one of the great headaches of day trading; what to do once you’re holding and the market goes south. Everybody has a theory or method to their madness, how much loss they can handle, etc. I’ll personally manually reset a pair if it’s been dead for many days into a week. I mainly read some news about a coin that I think will keep it out of position for an extended period of time. Though overall, I don’t like doing this as it’s just throwing away money. I’ll generally keep calm and wait for a bag out. Holding sucks, but this is crypto; what’s down one moment will be booming the next.
There’s also no way I or anyone out there can predict how your specific pairs will behave. Maybe you’re trading a coin I’ve never even heard of, and it’s only available on some remote exchange. +50% in a day, -50% in a day, these are all possibilities. Here, the machine gun is set up to run heavily trafficked popular coins that it can play the sub percent market on constantly. There is a lot of other configurations if that’s not what you’re looking for. Just give it some thought. I want the best for everybody, I want the most profits for everybody, but this is specifically set up for a use case that I’m trying my best to detail in these posts.
24 Hour Test Run Results: (once again, please note: this is too short of a test to be of any real value)
Same as last time, I shut down everything, sold off all my coins, downloaded the newest nightly version of the bot (v21.3.4), set up the config then let it rip for a day. This trial run of the new config was pretty damn good, easily qualifying as one of my better days. Ultimately it came down to having those extra pairs running as only a few markets made all the cheddar while the other ones sat around almost idle. A couple of people requested actual screenshots from my console rotation which I’m more than happy to provide. NOTE: You can click the image for the full-sized screenshot to make for easier reading.
Total: +$274.74560414 – AVG: $1.126006574344262 – Total Trades: 1014 – Total Closes: 244
Wow, look at ALGO and GRT, just killing it. Meanwhile, yet another trial period where BTC did absolutely nothing. It didn’t even close a single trade in 24 hours. LOL. Volatility is our friend! Good machine-gunning over this run, too, 1014 trades with 244 closes! Now that’s what I’m talking about. Funny between our last version’s trial run and this one, our average only increased by four cents.
The downsides include prolonged days on most of the other pairs, including losing -$2.33 on AAVE, which is counterproductive, to say the least. I’m not sure why this happens, and I think it’s from Coinbase’s +/- 10% price guarantee on market orders. It could’ve slipped into the negatives on really tight, meager sub percent sales, or maybe it was a calculation error on Gunbot’s part. I’m really not sure what to make of that and will have to dig deeper to find out what happened there. Overall a very successful day, considering it was still trading on top of 0.2% fees!
Conclusion:
Alright, you made it through the third wall of text post! Respect. Hopefully, you’re making good returns every day and watching hundreds of trades fly by in true machine-gun fashion. That +$274 trial run, though, loving it. Getting on another exchange and lowering those trade fees would’ve made it an even better day.
Although the tests weren’t run there, I’d like to take a second to bring up our own local spot: the Gunthy Exchange! Offering both Spot & Futures at the lowest fees in the industry. Looking to set up your bot someplace better? Want to keep all those profits while making the machine gun as agile as it can be? Come on over and join us! We welcome everybody!
So anyway, now you should be getting pretty familiar with the machine gun concept. It works, how to modify it, how to bring in decent profits every day using Gunbot. Mix and matching parts of each version of the configuration should be becoming easier than ever. Hopefully, this has taken some of the mystery out of writing your own custom AutoConfigs as well.
In the next post, we’re going to step into the world of magic and start transforming Pim’s (@boekenbox) viral spotGrid Advanced strategy into the machine gun so we can have a dynamic and continuous version! We’ll probably end up exploring his Controller package as well, so stay tuned!
Cheers, everybody, thanks for reading!
Previous: Version II – The Cautious Community Machine Gun
Disclaimer:
This series is not financial nor investment advice. These are ideas and opinions for information purposes only. Seek a certified financial professional for investment advice. If you’re going to get into this for a career or even as a major part of your financial capabilities, then take caution, do not play with more than you can risk. Market’s crash, the losses always come faster than the gains, a dollar earned will be a hard, painful journey, but a fortune lost will come in the blink of an eye. If you want to keep waking up comfortably in your bed, then never play with your rent/mortgage/survival money.