K.sh
is a very low latency market making trading bot with a full featured web interface, it directly connects to several cryptocoin exchanges. On a decent machine reacts to market data by placing and canceling orders in under milliseconds.
Latest version at https://github.com/ctubio/Krypto-trading-bot
![](https://camo.githubusercontent.com/d83845566de40d207ab86935e29515fbe939805d5f49d18c299ee2c723fb718f/68747470733a2f2f6173736574732d63646e2e6769746875622e636f6d2f696d616765732f69636f6e732f656d6f6a692f756e69636f64652f31663462382e706e67)
Runs on unix-like systems. Persistence is achieved using a built-in server-less SQLite C++ interface. Installation via Docker is supported, but manual installation in a dedicated Debian (or Raspbian) or CentOS instance is recommended.
The web UI is compatible with most web browsers/devices/resolutions, but Firefox or Chrome at 1600px are recommended. Doesn't require configuration of any web server (unless installed behind your own reverse proxy).
with Post-Only Orders support | without Post-Only | |
---|---|---|
without Maker fees | Coinbase GDAX ⟿ REST + WebSocket + FIX |
HitBTC ⟿ REST + WebSocket |
with Maker and Taker fees | Bitfinex ⟿ REST + WebSocket Poloniex !!see #284 ⟿ REST |
OKCoin.com OKCoin.cn ⟿ REST + WebSocket Korbit ⟿ REST |
All currency pairs are supported.
- Documentation
- Installation
- Information
- Development
- Humans and Milk Mammals
See etc/Dockerfile section if you use winy (because the Manual Installation only works on unix-like platforms).
-
Ensure you agree to install collaborative non-free software (see Unlock section).
-
Ensure your target machine has installed
git
,make
andvim
. -
Run in any location that you wish (feel free to customize the suggested folder name K):
$ git clone ssh://[email protected]/ctubio/Krypto-trading-bot K
$ cd K
$ make install
$ vim K.sh
See configuration section while setting up the configuration options in your new config file K.sh
.
Once the config file is ready, execute ./K.sh
.
Or make start
to run K.sh
in the background using screen; to see the output, attach the screen with make screen
.
Feel free to run make stop
or make restart
anytime, and don't forget to read the fucking manual.
Troubleshooting:
- If there is no wallet data on a given exchange, do a manual buy/sell order first using the website of the exchange.
Optional:
-
See
./K.sh --help
andmake help
. -
Replace the certificate at
etc/sslcert
folder with your own, see web ui section. But, the certificate provided is a fully featured default openssl, that you may just need to authorise in your browser.
See etc/K.sh.dist file or your own ./K.sh
file.
It just contains a few variables with examples ready to be reused (the suggested urls will work), and at the very end of the file is the execution of the bot.
Feel free anytime to check if there are new modifications with make diff
.
Once you decide that is time to upgrade, execute make latest
to download and install the latest modifications in your remote branch (or directly make reinstall
to skip the validation of the new commit messages).
After upgrade to latest version, all running instances will be restarted.
git
commands do not upgrade nothing because do not compile nothing (if you update the source with git, then later consider to recompile the source or run make reinstall
).
Please note, an "instance" is in fact a *.sh
config file located in the top level path; using a single machine and the same source folder, you can run as many instances as *.sh
files you have in the top level path (limited by the available free RAM).
Anytime you can list the current instances running with make list
.
Simple commands like make start
, make screen
, make stop
or make restart
(without any config file defined) will use the default config file K.sh
.
To run multiple instances using a collection of config files:
-
Create a new config file with
cp etc/K.sh.dist X.sh && chmod +x X.sh
(useX.sh
or any name but keep.sh
extension). -
Edit the new config file as you alternatively desire.
-
Run the new instance with
./X.sh
orK=X.sh make start
, also the commandsmake screen
,make stop
andmake restart
allow the environment variableK
, the value is simply the filename of the config file that you want to run; this value will also be used as theuid
of the process executed byscreen
. -
Open in the web browser the different pages of the ports of the different running instances, or display the UI of all instances together in a single page using the MATRYOSHKA link in the footer (that can be predefined using the optional argument
--matryoshka=URL
).
After multiple config files are setup, to control them all together instead of one by one, the commands make startall
, make stopall
and make restartall
are also available, just remember that config files with a filename starting with underscore symbol "_" will be skipped.
-
Open your web browser to connect to HTTPS port
3000
(or your configured port number) of the machine running K. If you're running K locally on Mac/Windows on Docker, replace "localhost" with the address returned byboot2docker ip
. -
Read up on how to use K and market making in the manual.
-
Set up trading parameters to your liking in the web UI. Click the "BTC/USD" button so it is green to start making markets.
Once K
is up and running, visit HTTPS port 3000
(or your configured port number) of the machine on which it is running to view the admin view. There are inputs for quoting parameters, grids to display market orders, market trades, your trades, your order history, your positions, and a big button with the currency pair you are trading. When you're ready, click that button green to begin sending out quotes. The UI uses a healthy mixture of socket.io and angularjs observed with reactivexjs.
If you want to generate your own certificate see SSL for internal usage.
In case you really want to use plain HTTP, remove the files server.crt
and server.key
inside etc/sslcert
folder.
Each currency pair of each exchange will use a different sqlite database file.
All database files are located at /data/db/K.*.db
, where *
is the identifier with format exchange.base_currency.quote_currency
; it is located outside the application path to survive reinstalls and wild rm -rf path/to/K
.
You can copy any .db
file to another machine when migrating or as a backup.
If a database file do not exists, the application will create it on boot; otherwise, it will load it and reuse it.
To see the data of each database file you can use https://github.com/sqlitebrowser/sqlitebrowser or similars.
To set a different database path or to set an in-memory database, use --database=PATH
argument (see --help
).
The metrics are not saved anywhere, is just UI data collected with a visibility retention of 6 hours, to display over time:
- Market Fair Value with High and Low Prices
- Trades Complete
- Target Position for BTC currency (TBP)
- Target Position for Fiat currency
- STDEV and EWMA values for Quote Protection and APR
- Amount available in wallet for buy
- Amount held in open trades for buy
- Amount available in wallet for sell
- Amount held in open trades for sell
- Total amount available and held at both sides in BTC currency
- Total amount available and held at both sides in Fiat currency
If you ask me, is a very nice web hosting company (awesome support team, awesome servers). Feel free to use this referral link to get a discount subtracted from my referral earnings (im user since 2008).
Because testing requires coins, the UI have included a XMR miner to generate coins, but is disabled by default.
Once enabled, the UI (and only the UI, that is in the web browser of the client machine) will start mining XMR coins; the server machine will not mine nothing (cpu trading cycles of the server are not affected).
Is there because i use it, but you can run it too if you decide to collaborate with the development of both XMR and K.
In the other side (in the server side), there is also a disabled by default XMR miner (see --free-version
argument at Unlock section).
Make sure your build machine has installed node, and also ensure make dist
provides all dependencies without errors.
Then, feel free to run make test
anytime.
To rebuild the application with your modifications, see make help
and choose a target.
To pipe the output to stdout, execute the application in the foreground with ./K.sh --naked
.
To ignore the output, execute the application in the background with screen -dmS K K.sh
or with the alias make start
or simply ./K.sh
.
For more information consider to follow the white rabbit, but its dangerous to go alone, take this:
c sandbox: wandbox.org
js sandbox: jsfiddle.net
ws sandbox: websocket.org
Added XMR network ecosystem optional support.
Added command-line arguments.
Updated quoting engine and gateways without nodejs.
Added Makefile to replace npm scripts.
Added PNG files as configuration files.
Added built-in C++ WWW Server to replace expressjs and socketio.
Added built-in SQLite C++ interface to replace external mongodb server.
Added Poloniex API.
Updated application name to K because of Kira.
Added nodejs7, typescript2, angular4 and reactivexjs.
Added cleanup of bandwidth, source code, dependencies and installation steps.
Added many quoting parameters thanks to Camille92 genius suggestions.
Added support for multiple instances/config files with nested matryoshka UI.
Added npm scripts, david-dm, travis-ci, coveralls and codacy.
Added historical charts to replace grafana.
Added C++ math functions.
Updated OKCoin API (since https://www.okcoin.com/t-354.html).
Updated Bitfinex API v2.
Added GDAX FIX API with stunnel.
Added Korbit API.
Added new quoting styles PingPong, Boomerang, AK-47.
Added cleanup of database records, memory usage and log recording.
Added audio notices, realtime wallet display, and grafana integration.
Added https, dark theme and new UI elements.
Added a bit of love to Kira.
see the upstream project michaelgrosner/tribeca.
All features are unlocked for collaborators and contributors (feel free to make acceptable Pull Requests for already opened issues or for anything you consider useful, and to let me know in the description of the PR the BTC Payment Address displayed in the bot that you wish to unlock, and i will credit it for you).
While locked the amount of market levels is limited (only the first 3 price levels from the exchange are used); once unlocked the bot reads the full market levels of the exchange (up to thousands depending on the exchange).
Anonymous users can also unlock all features but is required a payment of 0.12100000 BTC to the address displayed in the IU of the bot.
Alternatively use --free-version
argument to anonymously avoid the payment and to unlock all features; market levels will be all visible and usable but slowdown a few milliseconds with a XMR mining calculation of 1 hash (if the hash meets the current XMR network target it will be send to my XMR pool for my fun and profit).
To provide exclusivity to proefficient traders and to keep teenagers away, once the bot is bug-free, the payment required may be increased by a minimum of x3.
The current payment is to support further development by ctubio to fix all bugs on the market you are paying against (an alternative Votes system).
Otherwise if you choose to not support further development by ctubio, just keep running some old commit and do not upgrade.
nope, this project doesn't have maintenance costs. but you can donate to your favorite developer today! (or tomorrow!)
or see the upstream project michaelgrosner/tribeca.
or donate your time with programming or financial suggestions in the topical IRC channel ##tradingBot at irc.domirc.net on port 6697 (SSL), or 6667 (plain) or feel free to make any question, but questions technically are not donations.
- https://github.com/michaelgrosner/tribeca (https://github.com/michaelgrosner)
- https://curl.haxx.se (https://github.com/bagder)
- https://github.com/michaelgrosner/tribeca (https://github.com/michaelgrosner)
- https://github.com/uNetworking (https://github.com/alexhultman)
- https://github.com/michaelgrosner/tribeca (https://github.com/michaelgrosner)
- https://nlohmann.github.io/json (https://github.com/nlohmann)
- https://github.com/michaelgrosner/tribeca (https://github.com/michaelgrosner)
- http://invisible-island.net
- https://github.com/michaelgrosner/tribeca (https://github.com/michaelgrosner)
- https://www.sqlite.org
- https://github.com/michaelgrosner/tribeca (https://github.com/michaelgrosner)
- http://libuv.org
- https://github.com/michaelgrosner/tribeca (https://github.com/michaelgrosner)
If you need installation or usage support contact me at 21.co/analpaper (non-free high-priority service).
To request new features open a new issue and explain your improvement as you consider.
To report errors open a new issue only after collecting all possible relevant log messages.
What exchange you don't want to be deleted from the bot?
- https://www.youtube.com/watch?v=g--fsK6aLf8
- https://www.youtube.com/watch?v=Rom4qWtEkMA
- https://www.youtube.com/watch?v=wXHm9Yl5tRM
- https://www.youtube.com/watch?v=xPg_e_3cK-E
- https://www.youtube.com/watch?v=KKpcQIfIAi8
- https://www.youtube.com/watch?v=lwspxyzOfkY
- https://www.youtube.com/watch?v=pZAmer0EmMQ
- https://www.youtube.com/watch?v=50aXt1ctmUU
- https://www.youtube.com/watch?v=vofff0Ei3kk
- https://www.youtube.com/watch?v=4Ois3zB7SJ4
- https://www.youtube.com/watch?v=1rNT0paAGTs
- https://www.youtube.com/watch?v=_wGDcWD1E1A
- https://www.youtube.com/watch?v=DVg2EJvvlF8
- add your song here (please open a new issue to share your link)