From 4aed6c4625f0d76500ae9f55b633fffb8235307b Mon Sep 17 00:00:00 2001 From: c9s Date: Thu, 5 May 2022 01:03:29 +0800 Subject: [PATCH] add bollmaker setup script --- scripts/setup-bollmaker.sh | 185 +++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100755 scripts/setup-bollmaker.sh diff --git a/scripts/setup-bollmaker.sh b/scripts/setup-bollmaker.sh new file mode 100755 index 000000000..c097db8cc --- /dev/null +++ b/scripts/setup-bollmaker.sh @@ -0,0 +1,185 @@ +#!/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-$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-$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 < .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 < bbgo.yaml +--- +sessions: + binance: + exchange: binance + envVarPrefix: BINANCE + +persistence: + redis: + host: 127.0.0.1 + port: 6379 + db: 0 + +exchangeStrategies: +- on: binance + bollmaker: + symbol: ETHUSDT + + # interval is how long do you want to update your order price and quantity + interval: 1m + + # quantity is the base order quantity for your buy/sell order. + quantity: 0.05 + + # useTickerPrice use the ticker api to get the mid price instead of the closed kline price. + # The back-test engine is kline-based, so the ticker price api is not supported. + # Turn this on if you want to do real trading. + useTickerPrice: false + + # spread is the price spread from the middle price. + # For ask orders, the ask price is ((bestAsk + bestBid) / 2 * (1.0 + spread)) + # For bid orders, the bid price is ((bestAsk + bestBid) / 2 * (1.0 - spread)) + # Spread can be set by percentage or floating number. e.g., 0.1% or 0.001 + spread: 0.09% + + # minProfitSpread is the minimal order price spread from the current average cost. + # For long position, you will only place sell order above the price (= average cost * (1 + minProfitSpread)) + # For short position, you will only place buy order below the price (= average cost * (1 - minProfitSpread)) + minProfitSpread: 0.5% + + # dynamicExposurePositionScale overrides maxExposurePosition + # for domain, + # -1 means -100%, the price is on the lower band price. + # if the price breaks the lower band, a number less than -1 will be given. + # 1 means 100%, the price is on the upper band price. + # if the price breaks the upper band, a number greater than 1 will be given, for example, 1.2 for 120%, and 1.3 for 130%. + dynamicExposurePositionScale: + byPercentage: + # exp means we want to use exponential scale, you can replace "exp" with "linear" for linear scale + exp: + # from lower band -100% (-1) to upper band 100% (+1) + domain: [ -1, 1 ] + # when in down band, holds 1.0 by maximum + # when in up band, holds 0.05 by maximum + range: [ 10.0, 1.0 ] + + # DisableShort means you can don't want short position during the market making + # THe short here means you might sell some of your existing inventory. + disableShort: true + + # uptrendSkew, like the strongUptrendSkew, but the price is still in the default band. + uptrendSkew: 0.8 + + # downtrendSkew, like the strongDowntrendSkew, but the price is still in the default band. + downtrendSkew: 1.2 + + defaultBollinger: + interval: "1h" + window: 21 + bandWidth: 2.0 + + # neutralBollinger is the smaller range of the bollinger band + # If price is in this band, it usually means the price is oscillating. + neutralBollinger: + interval: "5m" + window: 21 + bandWidth: 2.0 + + # tradeInBand: when tradeInBand is set, you will only place orders in the bollinger band. + tradeInBand: false + + # buyBelowNeutralSMA: when this set, it will only place buy order when the current price is below the SMA line. + buyBelowNeutralSMA: false + + persistence: + type: redis + +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