diff --git a/config/bollmaker-pstack.yaml b/config/bollmaker-pstack.yaml new file mode 100644 index 000000000..ac5ef5364 --- /dev/null +++ b/config/bollmaker-pstack.yaml @@ -0,0 +1,128 @@ +--- +persistence: + redis: + host: 127.0.0.1 + port: 6379 + db: 0 + +# example command: +# godotenv -f .env.local -- go run ./cmd/bbgo backtest --exchange max --sync-from 2020-11-01 --config config/grid.yaml --base-asset-baseline +backtest: + # for testing max draw down (MDD) at 03-12 + # see here for more details + # https://www.investopedia.com/terms/m/maximum-drawdown-mdd.asp + startTime: "2021-09-01" + endTime: "2021-09-30" + symbols: + - ETHUSDT + account: + balances: + ETH: 1.0 + USDT: 200_000.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.1% + + # 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.1% + + # maxExposurePosition is the maximum position you can hold + # +10 means you can hold 10 ETH long position by maximum + # -10 means you can hold -10 ETH short position by maximum + # maxExposurePosition: 3.0 + maxExposurePosition: 1 + + # 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 + + # Set up your stop order, this is optional + # sometimes the stop order might decrease your total profit. + # you can setup multiple stop, + stops: + # use trailing stop order + - trailingStop: + # callbackRate: when the price reaches -1% from the previous highest, we trigger the stop + callbackRate: 5.1% + + # closePosition is how much position do you want to close + closePosition: 20% + + # minProfit is how much profit you want to take. + # if you set this option, your stop will only be triggered above the average cost. + minProfit: 5% + + # interval is the time interval for checking your stop + interval: 1m + + # virtual means we don't place a a REAL stop order + # when virtual is on + # the strategy won't place a REAL stop order, instead if watches the close price, + # and if the condition matches, it submits a market order to close your position. + virtual: true +