update: readme for dnum. fix: script for curl downloading

This commit is contained in:
zenix 2022-03-18 10:28:55 +09:00
parent bc0429c0fd
commit e5c3dffb59
11 changed files with 470 additions and 14 deletions

View File

@ -35,6 +35,7 @@ A trading bot framework written in Go. The name bbgo comes from the BB8 bot in t
- Docker image ready. - Docker image ready.
- Kubernetes support. - Kubernetes support.
- Helm chart ready. - Helm chart ready.
- High precision float point (up to 16 digits, run with `-tags dnum`).
## Screenshots ## Screenshots
@ -62,14 +63,13 @@ Get your exchange API key and secret after you register the accounts (you can ch
- OKEx: <https://www.okex.com/join/2412712?src=from:ios-share> - OKEx: <https://www.okex.com/join/2412712?src=from:ios-share>
- Kucoin: <https://www.kucoin.com/ucenter/signup?rcode=r3KX2D4> - Kucoin: <https://www.kucoin.com/ucenter/signup?rcode=r3KX2D4>
Since the exchange implementation and support are done by a small team, if you like the work they've done for you, It This project is maintained and supported by a small group of team. If you would like to support this project, please register on the exchanges using the provided links with referral codes above.
would be great if you can use their referral code as your support to them. :-D
## Installation ## Installation
### Install from binary ### Install from binary
The following script will help you set up a config file, dotenv file: The following script will help you set up a config file and a dotenv file:
```sh ```sh
# grid trading strategy for binance exchange # grid trading strategy for binance exchange
@ -77,8 +77,24 @@ bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/setup-gri
# grid trading strategy for max exchange # grid trading strategy for max exchange
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/setup-grid.sh) max bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/setup-grid.sh) max
# bollinger grid trading strategy for binance exchange
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/setup-bollgrid.sh) binance
# bollinger grid trading strategy for max exchange
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/setup-bollgrid.sh) max
``` ```
If you already have configuration somewhere, a download-only script might be suitable for you:
```sh
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/download.sh)
```
Or refer to the [Release Page](https://github.com/c9s/bbgo/releases) and download manually.
Since v2, we've added new float point implementation from dnum to support decimals with higher precision.
To download & setup, please refer to [Dnum Installation](doc/topics/dnum-binary.md)
### One-click Linode StackScript: ### One-click Linode StackScript:
- BBGO Grid Trading on Binance <https://cloud.linode.com/stackscripts/950715> - BBGO Grid Trading on Binance <https://cloud.linode.com/stackscripts/950715>

View File

@ -6,6 +6,7 @@
* [Build From Source](build-from-source.md) - How to build bbgo * [Build From Source](build-from-source.md) - How to build bbgo
* [Back-testing](topics/back-testing.md) - How to back-test strategies * [Back-testing](topics/back-testing.md) - How to back-test strategies
* [TWAP](topics/twap.md) - TWAP order execution to buy/sell large quantity of order * [TWAP](topics/twap.md) - TWAP order execution to buy/sell large quantity of order
* [Dnum Installation](topics/dnum-binary.md) - installation of high-precision version of bbgo
### Configuration ### Configuration
* [Setting up Slack Notification](configuration/slack.md) * [Setting up Slack Notification](configuration/slack.md)

26
doc/topics/dnum-binary.md Normal file
View File

@ -0,0 +1,26 @@
## Dnum: High Precision Numeric Implementation
----------------------------------------------
The `dnum` version of `fixedpoint` supports up to 16 digits of decimal precision. It's two times slower than the legacy version, which only supports up to 8 digits of decimal precision. We recommend that strategy developers do algorithmic calculations in `float64`, then convert them back to `fixedpoint` to interact with exchanges to keep the balance between speed and the accuracy of accounting result.
To Install dnum version of bbgo, we've create several scripts for quick setup:
```sh
# grid trading strategy for binance exchange
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/setup-grid-dnum.sh) binance
# grid trading strategy for max exchange
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/setup-grid-dnum.sh) max
# bollinger grid trading strategy for binance exchange
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/setup-bollgrid-dnum.sh) binance
# bollinger grid trading strategy for max exchange
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/setup-bollgrid-dnum.sh) max
```
If you already have the configuration somewhere, you may want to use the download-only script:
```sh
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/download-dnum.sh)
```
The precompiled dnum binaries are also available in the [Release Page](https://github.com/c9s/bbgo/releases).

40
scripts/download-dnum.sh Normal file
View File

@ -0,0 +1,40 @@
#!/bin/bash
set -e
version=$(curl -fs https://api.github.com/repos/c9s/bbgo/releases/latest | awk -F '"' '/tag_name/{print $4}')
osf=$(uname | tr '[:upper:]' '[:lower:]')
arch=""
case $(uname -m) in
x86_64 | ia64) arch="amd64";;
arm64 | aarch64 | arm) arch="arm64";;
*)
echo "unsupported architecture: $(uname -m)"
exit 1;;
esac
dist_file=bbgo-dnum-$version-$osf-$arch.tar.gz
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
function warn()
{
echo -e "${YELLOW}$@${NC}"
}
function error()
{
echo -e "${RED}$@${NC}"
}
function info()
{
echo -e "${GREEN}$@${NC}"
}
info "downloading..."
curl -O -L https://github.com/c9s/bbgo/releases/download/$version/$dist_file
tar xzf $dist_file
mv bbgo-dnum-$osf-$arch bbgo
chmod +x bbgo
info "downloaded successfully"

View File

@ -1,8 +1,16 @@
#!/bin/bash #!/bin/bash
set -e set -e
version=$(curl -fs https://api.github.com/repos/c9s/bbgo/releases/latest | awk -F '"' '/tag_name/{print $4}')
arch=""
case $(uname -m) in
x86_64 | ia64) arch="amd64";;
arm64 | aarch64 | arm) arch="arm64";;
*)
echo "unsupported architecture: $(uname -m)"
exit 1;;
esac
osf=$(uname | tr '[:upper:]' '[:lower:]') osf=$(uname | tr '[:upper:]' '[:lower:]')
version=v1.15.2 dist_file=bbgo-$version-$osf-$arch.tar.gz
dist_file=bbgo-$version-$osf-amd64.tar.gz
RED='\033[0;31m' RED='\033[0;31m'
GREEN='\033[0;32m' GREEN='\033[0;32m'
@ -27,6 +35,6 @@ function info()
info "downloading..." info "downloading..."
curl -O -L https://github.com/c9s/bbgo/releases/download/$version/$dist_file curl -O -L https://github.com/c9s/bbgo/releases/download/$version/$dist_file
tar xzf $dist_file tar xzf $dist_file
mv bbgo-$osf bbgo mv bbgo-$osf-$arch bbgo
chmod +x bbgo chmod +x bbgo
info "downloaded successfully" info "downloaded successfully"

View File

@ -0,0 +1,109 @@
#!/bin/bash
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
function warn()
{
echo -e "${YELLOW}$@${NC}"
}
function error()
{
echo -e "${RED}$@${NC}"
}
function info()
{
echo -e "${GREEN}$@${NC}"
}
version=$(curl -fs https://api.github.com/repos/c9s/bbgo/releases/latest | awk -F '"' '/tag_name/{print $4}')
osf=$(uname | tr '[:upper:]' '[:lower:]')
arch=""
case $(uname -m) in
x86_64 | ia64) arch="amd64";;
arm64 | aarch64 | arm) arch="arm64";;
*)
echo "unsupported architecture: $(uname -m)"
exit 1;;
esac
dist_file=bbgo-dnum-$version-$osf-$arch.tar.gz
info "downloading..."
curl -O -L https://github.com/c9s/bbgo/releases/download/$version/$dist_file
tar xzf $dist_file
mv bbgo-dnum-$osf-$arch bbgo
chmod +x bbgo
info "downloaded successfully"
function gen_dotenv()
{
read -p "Enter your MAX API key: " api_key
read -p "Enter your MAX API secret: " api_secret
echo "Generating your .env.local file..."
cat <<END > .env.local
MAX_API_KEY=$api_key
MAX_API_SECRET=$api_secret
END
}
if [[ -e ".env.local" ]] ; then
echo "Found existing .env.local, you will overwrite the existing .env.local file!"
read -p "Are you sure? (Y/n) " a
if [[ $a != "n" ]] ; then
gen_dotenv
fi
else
gen_dotenv
fi
if [[ -e "bbgo.yaml" ]] ; then
echo "Found existing bbgo.yaml, you will overwrite the existing bbgo.yaml file!"
read -p "Are you sure? (Y/n) " a
if [[ $a == "n" ]] ; then
exit
fi
fi
cat <<END > bbgo.yaml
---
exchangeStrategies:
- on: max
bollgrid:
symbol: BTCUSDT
interval: 1h
gridNumber: 20
quantity: 0.001
profitSpread: 100.0
END
info "config file is generated successfully"
echo "================================================================"
echo "now you can edit your strategy config file bbgo.yaml to run bbgo"
if [[ $osf == "darwin" ]] ; then
echo "we found you're using MacOS, you can type:"
echo ""
echo " open -a TextEdit bbgo.yaml"
echo ""
else
echo "you look like a pro user, you can edit the config by:"
echo ""
echo " vim bbgo.yaml"
echo ""
fi
echo "To run bbgo just type: "
echo ""
echo " ./bbgo run"
echo ""
echo "To stop bbgo, just hit CTRL-C"
if [[ $osf == "darwin" ]] ; then
open -a TextEdit bbgo.yaml
fi

View File

@ -20,10 +20,16 @@ function info()
{ {
echo -e "${GREEN}$@${NC}" echo -e "${GREEN}$@${NC}"
} }
version=$(curl -fs https://api.github.com/repos/c9s/bbgo/releases/latest | awk -F '"' '/tag_name/{print $4}')
osf=$(uname | tr '[:upper:]' '[:lower:]') osf=$(uname | tr '[:upper:]' '[:lower:]')
arch=amd64 arch=""
version=v1.21.4 case $(uname -m) in
x86_64 | ia64) arch="amd64";;
arm64 | aarch64 | arm) arch="arm64";;
*)
echo "unsupported architecture: $(uname -m)"
exit 1;;
esac
dist_file=bbgo-$version-$osf-$arch.tar.gz dist_file=bbgo-$version-$osf-$arch.tar.gz
info "downloading..." info "downloading..."

114
scripts/setup-dnum.sh Normal file
View File

@ -0,0 +1,114 @@
#!/bin/bash
set -e
version=$(curl -fs https://api.github.com/repos/c9s/bbgo/releases/latest | awk -F '"' '/tag_name/{print $4}')
osf=$(uname | tr '[:upper:]' '[:lower:]')
arch=""
case $(uname -m) in
x86_64 | ia64) arch="amd64";;
arm64 | aarch64 | arm) arch="arm64";;
*)
echo "unsupported architecture: $(uname -m)"
exit 1;;
esac
dist_file=bbgo-dnum-$version-$osf-$arch.tar.gz
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
function warn()
{
echo -e "${YELLOW}$@${NC}"
}
function error()
{
echo -e "${RED}$@${NC}"
}
function info()
{
echo -e "${GREEN}$@${NC}"
}
info "downloading..."
curl -O -L https://github.com/c9s/bbgo/releases/download/$version/$dist_file
tar xzf $dist_file
mv bbgo-dnum-$osf-$arch bbgo
chmod +x bbgo
info "downloaded successfully"
if [[ -e "bbgo.yaml" ]] ; then
echo "Found existing bbgo.yaml, you will overwrite the existing bbgo.yaml file!"
read -p "Are you sure? (Y/n) " a
if [[ $a == "n" ]] ; then
exit
fi
fi
cat <<END > bbgo.yaml
---
riskControls:
sessionBased:
max:
orderExecutor:
bySymbol:
BTCUSDT:
# basic risk control order executor
basic:
minQuoteBalance: 100.0
maxBaseAssetBalance: 3.0
minBaseAssetBalance: 0.0
maxOrderAmount: 1000.0
exchangeStrategies:
- on: max
grid:
symbol: BTCUSDT
quantity: 0.002
gridNumber: 100
profitSpread: 50.0
upperPrice: 14000.0
lowerPrice: 11000.0
END
echo "Config file is generated"
if [[ -e ".env.local" ]] ; then
echo "Found existing .env.local, you will overwrite the existing .env.local file!"
read -p "Are you sure? (Y/n) " a
if [[ $a == "n" ]] ; then
exit
fi
fi
read -p "Enter your MAX API key: " api_key
read -p "Enter your MAX API secret: " api_secret
echo "Generating your .env.local file..."
cat <<END > .env.local
export MAX_API_KEY=$api_key
export MAX_API_SECRET=$api_secret
END
echo "Now you can edit your strategy config file bbgo.yaml to run bbgo"
if [[ $osf == "darwin" ]] ; then
echo "We found you're using MacOS, you can type:"
echo ""
echo " open -a TextEdit bbgo.yaml"
echo ""
fi
echo "To run bbgo just type: "
echo ""
echo " source .env.local && ./bbgo run --config bbgo.yaml"
echo ""
echo "To stop bbgo, just hit CTRL-C"
if [[ $osf == "darwin" ]] ; then
open -a TextEdit bbgo.yaml
fi

121
scripts/setup-grid-dnum.sh Normal file
View File

@ -0,0 +1,121 @@
#!/bin/bash
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
function warn()
{
echo -e "${YELLOW}$@${NC}"
}
function error()
{
echo -e "${RED}$@${NC}"
}
function info()
{
echo -e "${GREEN}$@${NC}"
}
version=$(curl -fs https://api.github.com/repos/c9s/bbgo/releases/latest | awk -F '"' '/tag_name/{print $4}')
osf=$(uname | tr '[:upper:]' '[:lower:]')
arch=""
case $(uname -m) in
x86_64 | ia64) arch="amd64";;
arm64 | aarch64 | arm) arch="arm64";;
*)
echo "unsupported architecture: $(uname -m)"
exit 1;;
esac
dist_file=bbgo-dnum-$version-$osf-$arch.tar.gz
exchange=max
if [[ -n $1 ]] ; then
exchange=$1
fi
exchange_upper=$(echo -n $exchange | tr 'a-z' 'A-Z')
info "downloading..."
curl -O -L https://github.com/c9s/bbgo/releases/download/$version/$dist_file
tar xzf $dist_file
mv bbgo-dnum-$osf-$arch bbgo
chmod +x bbgo
info "downloaded successfully"
function gen_dotenv()
{
read -p "Enter your $exchange_upper API key: " api_key
read -p "Enter your $exchange_upper API secret: " api_secret
info "generating your .env.local file..."
cat <<END > .env.local
${exchange_upper}_API_KEY=$api_key
${exchange_upper}_API_SECRET=$api_secret
END
info "dotenv is configured successfully"
}
if [[ -e ".env.local" ]] ; then
warn "found an existing .env.local, you will overwrite the existing .env.local file!"
read -p "are you sure? (Y/n) " a
if [[ $a != "n" ]] ; then
gen_dotenv
fi
else
gen_dotenv
fi
if [[ -e "bbgo.yaml" ]] ; then
warn "found existing bbgo.yaml, you will overwrite the existing bbgo.yaml file!"
read -p "are you sure? (Y/n) " a
if [[ $a == "n" ]] ; then
exit
fi
fi
cat <<END > bbgo.yaml
---
exchangeStrategies:
- on: ${exchange}
grid:
symbol: BTCUSDT
quantity: 0.001
gridNumber: 100
profitSpread: 100.0
upperPrice: 50_000.0
lowerPrice: 10_000.0
long: true
END
info "config file is generated successfully"
echo "================================================================"
echo "now you can edit your strategy config file bbgo.yaml to run bbgo"
if [[ $osf == "darwin" ]] ; then
echo "we found you're using MacOS, you can type:"
echo ""
echo " open -a TextEdit bbgo.yaml"
echo ""
else
echo "you look like a pro user, you can edit the config by:"
echo ""
echo " vim bbgo.yaml"
echo ""
fi
echo "To run bbgo just type: "
echo ""
echo " ./bbgo run"
echo ""
echo "To stop bbgo, just hit CTRL-C"
if [[ $osf == "darwin" ]] ; then
open -a TextEdit bbgo.yaml
fi

View File

@ -21,9 +21,16 @@ function info()
echo -e "${GREEN}$@${NC}" echo -e "${GREEN}$@${NC}"
} }
version=$(curl -fs https://api.github.com/repos/c9s/bbgo/releases/latest | awk -F '"' '/tag_name/{print $4}')
osf=$(uname | tr '[:upper:]' '[:lower:]') osf=$(uname | tr '[:upper:]' '[:lower:]')
arch=amd64 arch=""
version=v1.21.4 case $(uname -m) in
x86_64 | ia64) arch="amd64";;
arm64 | aarch64 | arm) arch="arm64";;
*)
echo "unsupported architecture: $(uname -m)"
exit 1;;
esac
dist_file=bbgo-$version-$osf-$arch.tar.gz dist_file=bbgo-$version-$osf-$arch.tar.gz
exchange=max exchange=max

View File

@ -1,8 +1,16 @@
#!/bin/bash #!/bin/bash
set -e set -e
version=$(curl -fs https://api.github.com/repos/c9s/bbgo/releases/latest | awk -F '"' '/tag_name/{print $4}')
osf=$(uname | tr '[:upper:]' '[:lower:]') osf=$(uname | tr '[:upper:]' '[:lower:]')
version=v1.21.4 arch=""
dist_file=bbgo-$version-$osf-amd64.tar.gz case $(uname -m) in
x86_64 | ia64) arch="amd64";;
arm64 | aarch64 | arm) arch="arm64";;
*)
echo "unsupported architecture: $(uname -m)"
exit 1;;
esac
dist_file=bbgo-$version-$osf-$arch.tar.gz
RED='\033[0;31m' RED='\033[0;31m'
GREEN='\033[0;32m' GREEN='\033[0;32m'
@ -27,7 +35,7 @@ function info()
info "downloading..." info "downloading..."
curl -O -L https://github.com/c9s/bbgo/releases/download/$version/$dist_file curl -O -L https://github.com/c9s/bbgo/releases/download/$version/$dist_file
tar xzf $dist_file tar xzf $dist_file
mv bbgo-$osf bbgo mv bbgo-$osf-$arch bbgo
chmod +x bbgo chmod +x bbgo
info "downloaded successfully" info "downloaded successfully"