Alright. Initially, when people asked how the algorithm works internally, I refused to specify it any further. Now that nobody cares anymore, here's the basic idea ^_^
Note: I'm not going to fill in the exact numerical parameters of the the technical/indicator signals. No need to encourage frontrunning. But in principle, with the details I'm about to give, you could find your own (and probably very similar) parameters by training the individual parts over the market data that is the same for everyone.
The
trade signals of this algorithm are a complex condition based on three
technical signals.
Signal #1, the "main" signal, is a medium term momentum signal. Think "daily EMA20+10 crossover", but the average I use is instead a Hull type average (and the parameters are obviously not 20/10).
Important to note here: signal #1 is symmetric wrt 'buy' and 'sell'.
If used alone, signal #1 is profitable over the global bitcoin history (GX, BS, BF), and roughly uniformly profitable as well. However, it yields slightly too many trades, and tends to sell too early during major rallies. So, it is not the desired signal yet that only sells when it really has to.
Signal #2 is a short-term momentum signal. It acts as a filter applied to #1. Think of it as an "optimal entry/exit" filter. It cannot initiate additional trades by itself, it can only delay a trade based on signal #1. It is basically capturing the idea: if the medium term is up, but the short term is drastically down, better wait a bit before you buy (similar for delaying a sell trade). Signal #2 is buy/sell symmetric as well, and I don't really think it is problematic (also, leaving it out doesn't change the results from a pure signal #1 strategy much).
Signal #3 is the tricky one. You could call it the "bubble filter". Just like #2, it doesn't do anything other than (possibly) delay signals coming from #1, i.e. it doesn't add to the total number of trade signals but only *reduces* them under certain conditions.
It defines certain market conditions (think: long term momentum) to be so strongly bullish that a mid-term momentum signal from #1 that says 'sell' should be ignored for the moment, until either the mid term is up again, or the market condition becomes less bullish, in which case the 'sell' goes through.
And here's the tricky bit. Signal #3 is
not buy/sell symmetric. It only delays 'sell' trades, but not 'buy' trades, in case the long term momentum is flipped around
I know. That buy/sell asymmetry is a big violation of all that is holy in algorithmic trading. Reeks of overfitting.
Still, given the history of the Bitcoin market so far, I can see some justification for it. It works well for 2011, 2012, 2013. In 2014, it still works well enough for the first half, but from then on, it's not really justified anymore.
I guess it all depends now if Bitcoin will ever go through a significant bull market again, and when. Let's say it does ("Bitcoin is dead" users need not reply
). That still doesn't mean that the exact parameters of the "bubble filter" are optimal, but it's probably not going to be the millstone around the algorithms neck that it is right now, delaying sell signals when it really shouldn't.
In a way, I'm making a human choice for my algorithmic method here: the assumption, that in the long run, it is better to err on the side of buying than on the side of selling - a choice that is justified by the global history of the market, but not by the more local one.
Comments welcome.
Can I take a look at the code ? maybe if you upload it on Github you will get some contribution which will help make it work better algorithm ?