Hi All
Today I am going to show you how to make a basic automatic cryptocurrency trading bot.
What is a bot
A bot is a program that analyses some incoming data and performs trades according to some algorithm automatically
Level of programming background required: some experience required
- if you don't know what a loop is or what an if-then block is, then this post might be a bit too complex to follow.
Ok, lets get to it then. The first thing to do is to decide a few things.
What language will the bot be in, what exchanges will it trade, etc.
Because Im only making a very simple bot, I am going to use Node.js and I'm going to trade on Kucoin.
So, prerequisites:
- Node installed
- Kucoin account
- Some kind of text editor (I like Atom)
The core of any algorithm we chose will be to get data from the exchange and analyse it in some way.
So the first thing we need to do is get data from the exchange.
Luckily, there is a handy node package to assist us called
CCXT
npm install ccxt
while we are installing things,
npm install minimist
npm install jStat
npm install nodemailer
minimist will be used to handle arguments we want to pass to our node app
jstat will be used for the beta distribution function
nodemailer will be used to send emails
the pseudocode for our bot is like this:
- every so many minutes:
- download(kucoin.data)
- analyse(data):
- signal = EMA(close, 12) //12 period EMA on close price
- line = EMA(close, 26)
- histogram = line - signal
- rsi = 100-100/(1+EMA(gains,14)/EMA(losses,14))
- resistance = 1-pr(next close > close) (i.e. see here)
- divergence =sign(Kendall(line))-sign(Kendall(close)) //here Kendall returns the S statistic
- if(RSI>70 & macd<signal & histogram <0 & resistance >0.85 & divergence ==2) then analysis = SELL
- if(RSI<30 & macd>signal & histogram >0 & resistance <0.15 & divergence ==-2) then analysis = BUY
- if analysis = sell then set sell limit order to the upper body end of the last candle (i.e. the median + 1.5IQR)
- if analysis = buy then set buy limit order to the lower body end of the last candle (i.e. the median - 1.5IQR)
- otherwise do nothing
- if any trade made then send email with advice of trade
There are a few fundamental functions we will need to implement.
- The EMA (exponential moving average)
- a Quantile function
- the resistance function
- the Kendall function
The pseudocode:
EMA(data, period) { m = 2/(period +1) ema[1] = data[1] //starting EMA from the first point in the data for ( x = 2 to x < data.length) { ema[x] = data[x]-ema[x-1])*m+ema[x-1] }
return ema}
Quantile(data, p) {
rx= get the rank of p
sort data ascending
rd= interpolate the position r in the data
return rd
}
Resistance(x,n) {
return 1-beta.inv( 0.05, x, n-x+1 )
}
Kendall(x) {
for each point in x
let s =sum the sign of the difference from xi to xi+1
return s
}
Thanks for reading
Týr