306 lines
9.6 KiB
Markdown
306 lines
9.6 KiB
Markdown
# Warning / Disclaimer
|
|
The software provided here does not guarantee any profits or function as well as sufficient security. Use at your own risk!!!
|
|
This is a private project, which is based on amateur knowledge. Trading cryptocurrencies involves an enormous amount of risks and is considered highly speculative.
|
|
It is strongly recommended to deal intensively with the subject and this bot before using it. Also, when using the possibility should be considered that due to an unfavorable market development, technical errors, bugs or other reasons, the entire invested capital can be lost. This software should therefore only be used if it is justifiable to lose the entire invested capital!
|
|
|
|
# Objective
|
|
The dabo-bot is intended to help make and execute timely buy and sell decisions automatically in the fast-paced crypto environment. It is to be invested in the case of larger increases in value and investments are to be sold again when the prices fall, so that price gains are taken and losses are minimized.
|
|
|
|
# Naming
|
|
The name Dabo comes from the Star Trek universe.
|
|
Dabo was a roulette-style game of chance developed by the Ferengi.
|
|
More information here:
|
|
https://memory-alpha.fandom.com/wiki/Dabo
|
|
I thought this fits quite well to the cryptotrading world and that's why I chose this name ;-)
|
|
|
|
# Features
|
|
## General:
|
|
- Compatible with the following crypto exchanges: Binance, OneTrading.com (ex BitpandaPro)
|
|
- Consideration of trading fees
|
|
- Automatic selection of cryptocurrencies to invest in
|
|
- Filtering of cryptocurrencies by market capitalization (data via coingecko API) e.g. only trade the 50 largest by market capitalization if available on the exchange
|
|
- Notifications via Signal Messenger to groups
|
|
- Individually selectable percentage of available capital per trade
|
|
- automatic definition of time intervals (e.g. every minute / every five minutes) based on the change of the rates
|
|
- Monitoring of overall market performance via own market performance index based for example on the MSCI World, leading currencies like BTC and ETH and their forecasts.
|
|
- Emergency stop if balance falls below defined value
|
|
- Recording of available price values incl. RSI and MACD indicators of available cryptocurrencies
|
|
- Analysis tool for collected historical values to try out buy or sell conditions based on them
|
|
- ReadOnly web interface for overview
|
|
- Runnable in a non-root docker containe
|
|
- multiple different buy and sell strategies possible at the same time
|
|
|
|
## Buy conditions
|
|
- definable RSI Indicator signals min/max (RSI5, 14 and 21)
|
|
- definable MACD signals min/max
|
|
- definable minimum growth in a definable time period
|
|
|
|
## Sell conditions
|
|
- sell at defined loss limit
|
|
- hold if the result would be negative
|
|
- sell after certain time even if loss exists
|
|
- definable RSI Indicator signals min/max
|
|
- definable MACD signals min/max
|
|
|
|
# How to use/install
|
|
Linux knowledge required!
|
|
|
|
Needed a running Docker install. Traefik suggested, see
|
|
|
|
https://gitea.ds9.dedyn.io/olli/debian.ansible.docker
|
|
|
|
https://gitea.ds9.dedyn.io/olli/debian.ansible.traefik.server
|
|
|
|
|
|
## Download
|
|
```
|
|
git clone https://gitea.ds9.dedyn.io/olli/dabo.git
|
|
cd dabo
|
|
```
|
|
|
|
## Build container
|
|
```
|
|
docker -l warn compose --ansi never build --progress=plain --pull --no-cache --force-rm
|
|
```
|
|
|
|
## Configure
|
|
Edit docker-compose.yml or create docker-compose.override.yml to fit yout needs e.g. domain and network settings or basic auth, e.g. for traefik and letsencrypt:
|
|
```
|
|
echo '
|
|
services:
|
|
|
|
dabo-bot:
|
|
networks:
|
|
- YOURNETWORK
|
|
|
|
dabo-web:
|
|
labels:
|
|
- traefik.enable=true
|
|
# DOMAIN
|
|
- traefik.http.routers.dabo-YOURINSTANCENAME.rule=Host(`YOURDOMAIN`)
|
|
- traefik.http.routers.dabo-YOURINSTANCENAME.entrypoints=https
|
|
- traefik.http.routers.dabo-YOURINSTANCENAME.tls=true
|
|
# Proxy to service-port
|
|
- traefik.http.services.dabo-YOURINSTANCENAME.loadbalancer.server.port=80
|
|
- traefik.http.routers.dabo-YOURINSTANCENAME.service=dabo-YOURINSTANCENAME
|
|
# cert via letsencrypt
|
|
- traefik.http.routers.dabo-YOURINSTANCENAME.tls.certresolver=letsencrypt
|
|
# activate secHeaders@file & basic auth
|
|
- traefik.http.routers.dabo-YOURINSTANCENAME.middlewares=secHeaders@file,dabo-YOURINSTANCENAME-basicauth
|
|
# Generate crypted password string with: echo $(htpasswd -nB YOURUSER) | sed -e s/\\$/\\$\\$/g
|
|
- traefik.http.middlewares.dabo-YOURINSTANCENAME-basicauth.basicauth.users=YOURUSER:YOUR-GENERATED-CRYPTED-PASSWORD-STRING
|
|
# Traefik network
|
|
- traefik.docker.network=traefik
|
|
networks:
|
|
- traefik
|
|
|
|
networks:
|
|
YOURNETWORK:
|
|
driver: bridge
|
|
driver_opts:
|
|
com.docker.network.bridge.name: YOURBRIDGE
|
|
traefik:
|
|
external: true
|
|
|
|
' >docker-compose.override.yml
|
|
```
|
|
|
|
|
|
Optional: If you use signal-cli (https://gitea.ds9.dedyn.io/olli/debian.ansible.signal-cli.client) and want do receive Signal-Messages from the bot you can create an SSH-Key to allow sending Signal-Messages e.g.:
|
|
```
|
|
mkdir -p home/.ssh
|
|
ssh-keygen -f home/.ssh/id_ed25519 -N "" -t ed25519
|
|
chmod 700 home/.ssh
|
|
cat home/.ssh/id_ed25519.pub
|
|
```
|
|
and add Key on your signal-cli-Server to the authorized_keys of the signal-User
|
|
|
|
|
|
Create Secrets file for your API Key(s)
|
|
```
|
|
# for OneTrading.com (ex BitpandaPro)
|
|
echo 'local API_TOKEN=YOUR_VERY_LOOOOOOONNNNGGGG_API_TOKEN_FROM_BITPANDA' >dabo/.bitpanda-secrets
|
|
chmod 400 dabo/.bitpanda-secrets
|
|
|
|
# or for Binance
|
|
echo 'local API_SECRET="YOUR_LONG_API_SECRET_FROM_BINANCE"
|
|
local API_KEY="YOUR_LONG_API_KEY_FROM_BINANCE" '>dabo/.binance-secrets
|
|
chmod 400 dabo/.binance-secrets
|
|
```
|
|
|
|
Create Config
|
|
Especially set URL, STOCK_EXCHANGE, FEE, CURRENCY,... to fit your needs.
|
|
```
|
|
vim dabo-bot.conf
|
|
```
|
|
Defaults in dabo/dabo-bot.conf
|
|
|
|
|
|
## Prepare/Create a stretegy
|
|
|
|
IMPORTANT!!!
|
|
|
|
THE DEFAULT STRATEGY MAY NOT FIT YOUR NEEDS OR WORK PROPERLY. SO YOU CAN LOOSE ALL YOUR MONEY!!! USE ON YOUR OWN RISK!!!
|
|
|
|
TEST YOUR OWN STRATEGY COMPREHENSIVELY AND OVER A LOGNER PERIOD OF TIME WITH analyze.sh!!! USE ON YOUR OWN RISK!!!
|
|
|
|
Strategie files can be put in the "strategies"-directory the defaults
|
|
|
|
There is an example for a buy and a sell strategy file (deactivated by "return 0" in the forst line):
|
|
```
|
|
ls strategies/buy.example.conf
|
|
ls strategies/sell.example.conf
|
|
```
|
|
Aditional strategies can be created with Name
|
|
```
|
|
strategies/buy.<name>.conf
|
|
strategies/sell.<name>.conf
|
|
```
|
|
e.g named "mannover-sulu-1" for buy strategy and "command-kirk-3" for sell strategy
|
|
```
|
|
strategies/buy.mannover-sulu-1.conf
|
|
strategies/sell.command-kirk-3.conf
|
|
```
|
|
|
|
## Set Rights
|
|
Set Rights (UID 10000 for non-root-User in running container):
|
|
```
|
|
chown -R 10000:10000 dabo data home strategies dabo-bot.conf
|
|
```
|
|
|
|
|
|
## Operational commands
|
|
Run/Restart:
|
|
```
|
|
docker compose down # if an old instance is running
|
|
docker compose up -d
|
|
```
|
|
|
|
Check
|
|
```
|
|
docker compose ps
|
|
```
|
|
|
|
Logs/Output:
|
|
```
|
|
docker compose logs -f
|
|
```
|
|
|
|
Update:
|
|
```
|
|
# Optinal: Remove local data
|
|
git reset --hard HEAD^ # Remove local commits
|
|
git clean -fd # Remove local uncommited files
|
|
|
|
# Update and restart
|
|
git pull https://gitea.ds9.dedyn.io/olli/dabo.git main -f
|
|
docker compose down
|
|
docker compose up -d
|
|
|
|
```
|
|
|
|
|
|
dabo-bot.sh is the bot that trades and collects the quotes and analyze.sh is the tool with which you can try out strategies with the historical data.
|
|
The configuration files are called dabo-bot.conf and analyze.conf. analyze.sh also uses bot.conf but its variables are overwritten by analyze.conf if duplicated.
|
|
|
|
A Binance or OneTrading.com (ex BitpandaPro) account must exist and the API must be enabled.
|
|
The access data is stored in the file .binance-secrets in the project directory in the variables API_SECRET and API_KEY.
|
|
The access rights to this file should be set to the minimum necessary for security reasons.
|
|
|
|
# Strategies
|
|
|
|
You can put your own code into the strateghies it will be sourced by the bot.
|
|
|
|
You can use available variables to set and read things.
|
|
|
|
## Variables to set
|
|
|
|
You can simply use the following varaibles to define things:
|
|
|
|
```
|
|
local GOOD_MARKET_PERFORMANCE_INDEX
|
|
|
|
local BUY_RSI5_SIGNAL_UNTIL
|
|
local BUY_RSI14_SIGNAL_UNTIL
|
|
local BUY_RSI21_SIGNAL_UNTIL
|
|
local BUY_RSI60_SIGNAL_UNTIL
|
|
local BUY_RSI120_SIGNAL_UNTIL
|
|
local BUY_RSI240_SIGNAL_UNTIL
|
|
local BUY_RSI420_SIGNAL_UNTIL
|
|
local BUY_RSI720_SIGNAL_UNTIL
|
|
|
|
local BUY_RSI5_SIGNAL_FROM
|
|
local BUY_RSI14_SIGNAL_FROM
|
|
local BUY_RSI21_SIGNAL_FROM
|
|
local BUY_RSI60_SIGNAL_FROM
|
|
local BUY_RSI120_SIGNAL_FROM
|
|
local BUY_RSI240_SIGNAL_FROM
|
|
local BUY_RSI420_SIGNAL_FROM
|
|
local BUY_RSI720_SIGNAL_FROM
|
|
|
|
local BUY_MACD_RELATION_FROM
|
|
local BUY_MACD_RELATION_TO
|
|
|
|
local BUY_MIN_PRICE_CHANGE_LAST_1_DAY
|
|
local BUY_MIN_PRICE_CHANGE_LAST_7_DAY
|
|
local BUY_MIN_PRICE_CHANGE_LAST_14_DAY
|
|
local BUY_MIN_PRICE_CHANGE_LAST_30_DAY
|
|
|
|
local BUY_MINGROWTH_PERIOD
|
|
local BUY_MINGROWTH
|
|
```
|
|
|
|
## Variables with current values from the CSV files
|
|
```
|
|
# date from current timeframe
|
|
${f_date}
|
|
|
|
# current price
|
|
${f_price}
|
|
# price change percentage from timeframe before
|
|
${f_price_change}
|
|
|
|
# EMA
|
|
${f_ema12}
|
|
${f_ema26}
|
|
|
|
# MACD with EMA 12/16/9
|
|
${f_macd_histogram}
|
|
${f_macd_signal_relation}
|
|
${f_macd_histogram_relation}
|
|
${f_macd_histogram_signal}
|
|
|
|
# RSI from last ?? timeframes
|
|
${f_rsi5}
|
|
${f_rsi14}
|
|
${f_rsi21}
|
|
${f_rsi720}
|
|
${f_rsi60}
|
|
${f_rsi120}
|
|
${f_rsi240}
|
|
${f_rsi420}
|
|
|
|
# Price change from coungecko
|
|
${f_price_change_1_day}
|
|
${f_price_change_7_day}
|
|
${f_price_change_14_day}
|
|
${f_price_change_30_day}
|
|
${f_price_change_1_year}
|
|
|
|
# Market Capitalization change from coingecko.com
|
|
${f_marketcap_change_1_day}
|
|
|
|
# Current Fibonacci value from last ?? timeframes
|
|
${f_fibo60}
|
|
${f_fibo168}
|
|
${f_fibo672}
|
|
${f_fibo8064}
|
|
```
|
|
|
|
# Future ideas/featrues
|
|
- Crypto preferences (While/Blacklist for certain currencies)
|
|
- Overview trades/profits/losses for tax declaration
|
|
- Support for decentralized exchanges like uniswap to gain more "security"
|
|
- Archive/compress old or large CSV-History-files
|
|
|