From 44d0bbc3fad4d7a391544c7ed6e517a3d5ffd777 Mon Sep 17 00:00:00 2001 From: c9s Date: Wed, 29 Jun 2022 01:22:03 +0800 Subject: [PATCH] config: optimize and update pivotshort config Signed-off-by: c9s --- config/pivotshort-ETHUSDT.yaml | 100 ------------------------------- config/pivotshort.yaml | 93 ++++++++++++++++++++-------- config/pivotshort_optimizer.yaml | 69 ++++++++++++--------- 3 files changed, 108 insertions(+), 154 deletions(-) delete mode 100644 config/pivotshort-ETHUSDT.yaml diff --git a/config/pivotshort-ETHUSDT.yaml b/config/pivotshort-ETHUSDT.yaml deleted file mode 100644 index 2059c8040..000000000 --- a/config/pivotshort-ETHUSDT.yaml +++ /dev/null @@ -1,100 +0,0 @@ ---- -sessions: - binance: - exchange: binance - envVarPrefix: binance - margin: true - # isolatedMargin: true - # isolatedMarginSymbol: ETHUSDT - -exchangeStrategies: -- on: binance - pivotshort: - symbol: ETHUSDT - - # interval is the main pivot interval - interval: 5m - - # window is the main pivot window - window: 200 - - # breakLow settings are used for shorting when the current price break the previous low - breakLow: - # ratio is how much the price breaks the previous low to trigger the short. - ratio: -0.1% - - # quantity is used for submitting the sell order - # if quantity is not set, all base balance will be used for selling the short. - quantity: 10.0 - - # marketOrder submits the market sell order when the closed price is lower than the previous pivot low. - marketOrder: true - - # bounceRatio is used for calculating the price of the limit sell order. - # it's ratio of pivot low bounce when a new pivot low is detected. - # Sometimes when the price breaks the previous low, the price might be pulled back to a higher price. - # The bounceRatio is useful for such case, however, you might also miss the chance to short at the price if there is no pull back. - # Notice: When marketOrder is set, bounceRatio will not be used. - # bounceRatio: 0.1% - - # stopEMARange is the price range we allow short. - # Short-allowed price range = [current price] > [EMA] * (1 - [stopEMARange]) - stopEMARange: 0% - stopEMA: - interval: 1h - window: 99 - - bounceShort: - enabled: false - interval: 1h - window: 10 - quantity: 10.0 - minDistance: 3% - # stopLossPercentage: 1% - - # ratio is the ratio of the resistance price, - # higher the ratio, lower the price - # first_layer_price = resistance_price * (1 - ratio) - # second_layer_price = (resistance_price * (1 - ratio)) * (2 * layerSpread) - ratio: 0% - numOfLayers: 1 - layerSpread: 0.1% - - exits: - # roiStopLoss is the stop loss percentage of the position ROI (currently the price change) - - roiStopLoss: - percentage: 2% - - # roiTakeProfit is used to force taking profit by percentage of the position ROI (currently the price change) - # force to take the profit ROI exceeded the percentage. - - roiTakeProfit: - percentage: 30% - - - protectionStopLoss: - activationRatio: 1% - stopLossRatio: 0.2% - placeStopOrder: true - - # lowerShadowTakeProfit is used to taking profit when the (lower shadow height / low price) > lowerShadowRatio - # you can grab a simple stats by the following SQL: - # SELECT ((close - low) / close) AS shadow_ratio FROM binance_klines WHERE symbol = 'ETHUSDT' AND `interval` = '5m' AND start_time > '2022-01-01' ORDER BY shadow_ratio DESC LIMIT 20; - - lowerShadowTakeProfit: - ratio: 3% - - # cumulatedVolumeTakeProfit is used to take profit when the cumulated quote volume from the klines exceeded a threshold - - cumulatedVolumeTakeProfit: - minQuoteVolume: 90_000_000 - window: 5 - -backtest: - sessions: - - binance - startTime: "2022-04-01" - endTime: "2022-06-08" - symbols: - - ETHUSDT - accounts: - binance: - balances: - ETH: 10.0 - USDT: 3000.0 diff --git a/config/pivotshort.yaml b/config/pivotshort.yaml index 48b0cdc70..b9c9aa35e 100644 --- a/config/pivotshort.yaml +++ b/config/pivotshort.yaml @@ -3,64 +3,105 @@ sessions: binance: exchange: binance envVarPrefix: binance -# margin: true -# isolatedMargin: true -# isolatedMarginSymbol: GMTUSDT -# futures: true + margin: true + # isolatedMargin: true + # isolatedMarginSymbol: ETHUSDT exchangeStrategies: - on: binance pivotshort: - symbol: GMTUSDT + symbol: ETHUSDT + + # interval is the main pivot interval interval: 5m - window: 120 + # window is the main pivot window + window: 200 # breakLow settings are used for shorting when the current price break the previous low breakLow: - ratio: 0.1% + # ratio is how much the price breaks the previous low to trigger the short. + ratio: 0% + + # quantity is used for submitting the sell order + # if quantity is not set, all base balance will be used for selling the short. quantity: 10.0 - stopEMARange: 5% + + # marketOrder submits the market sell order when the closed price is lower than the previous pivot low. + marketOrder: true + + # bounceRatio is used for calculating the price of the limit sell order. + # it's ratio of pivot low bounce when a new pivot low is detected. + # Sometimes when the price breaks the previous low, the price might be pulled back to a higher price. + # The bounceRatio is useful for such case, however, you might also miss the chance to short at the price if there is no pull back. + # Notice: When marketOrder is set, bounceRatio will not be used. + # bounceRatio: 0.1% + + # stopEMARange is the price range we allow short. + # Short-allowed price range = [current price] > [EMA] * (1 - [stopEMARange]) + stopEMARange: 0% stopEMA: interval: 1h window: 99 - exits: - # roiStopLoss is the stop loss percentage of the position ROI (currently the price change) - - roiStopLoss: - percentage: 2% + bounceShort: + enabled: false + interval: 1h + window: 10 + quantity: 10.0 + minDistance: 3% + # stopLossPercentage: 1% - # roiTakeProfit is used to force taking profit by percentage of the position ROI (currently the price change) + # ratio is the ratio of the resistance price, + # higher the ratio, lower the price + # first_layer_price = resistance_price * (1 - ratio) + # second_layer_price = (resistance_price * (1 - ratio)) * (2 * layerSpread) + ratio: 0% + numOfLayers: 1 + layerSpread: 0.1% + + exits: + # (0) roiStopLoss is the stop loss percentage of the position ROI (currently the price change) + - roiStopLoss: + percentage: 0.8% + + # (1) roiTakeProfit is used to force taking profit by percentage of the position ROI (currently the price change) # force to take the profit ROI exceeded the percentage. - roiTakeProfit: - percentage: 30% + percentage: 35% + # (2) protective stop loss -- short term - protectionStopLoss: - activationRatio: 1% - stopLossRatio: 0.2% - placeStopOrder: true + activationRatio: 0.6% + stopLossRatio: 0.1% + placeStopOrder: false - # lowerShadowTakeProfit is used to taking profit when the (lower shadow height / low price) > lowerShadowRatio + # (3) protective stop loss -- long term + - protectionStopLoss: + activationRatio: 5% + stopLossRatio: 1% + placeStopOrder: false + + # (4) lowerShadowTakeProfit is used to taking profit when the (lower shadow height / low price) > lowerShadowRatio # you can grab a simple stats by the following SQL: - # # SELECT ((close - low) / close) AS shadow_ratio FROM binance_klines WHERE symbol = 'ETHUSDT' AND `interval` = '5m' AND start_time > '2022-01-01' ORDER BY shadow_ratio DESC LIMIT 20; - lowerShadowTakeProfit: ratio: 3% - # cumulatedVolumeTakeProfit is used to take profit when the cumulated quote volume from the klines exceeded a threshold + # (5) cumulatedVolumeTakeProfit is used to take profit when the cumulated quote volume from the klines exceeded a threshold - cumulatedVolumeTakeProfit: - minQuoteVolume: 90_000_000 + minQuoteVolume: 50_000_000 window: 5 backtest: sessions: - binance - startTime: "2022-05-01" - endTime: "2022-06-03" + startTime: "2022-04-01" + endTime: "2022-06-18" symbols: - - GMTUSDT + - ETHUSDT accounts: binance: balances: - GMT: 3010.0 - USDT: 1000.0 + ETH: 10.0 + USDT: 5000.0 diff --git a/config/pivotshort_optimizer.yaml b/config/pivotshort_optimizer.yaml index c32708826..74f31ce55 100644 --- a/config/pivotshort_optimizer.yaml +++ b/config/pivotshort_optimizer.yaml @@ -1,6 +1,6 @@ # usage: # -# go run ./cmd/bbgo optimize --config config/pivotshort-ETHUSDT.yaml --optimizer-config config/pivotshort_optimizer.yaml --debug +# go run ./cmd/bbgo optimize --config config/pivotshort.yaml --optimizer-config config/pivotshort_optimizer.yaml --debug # --- executor: @@ -22,31 +22,44 @@ matrix: max: 200.0 step: 20.0 -# - type: range -# path: '/exchangeStrategies/0/pivotshort/breakLow/stopEMARange' -# label: stopEMARange -# min: 0% -# max: 10% -# step: 1% +- type: range + path: '/exchangeStrategies/0/pivotshort/breakLow/stopEMARange' + label: stopEMARange + min: 0% + max: 10% + step: 1% -# - type: range -# path: '/exchangeStrategies/0/pivotshort/exit/roiStopLossPercentage' -# label: roiStopLossPercentage -# min: 0.5% -# max: 2% -# step: 0.5% -# -# - type: range -# path: '/exchangeStrategies/0/pivotshort/exit/roiTakeProfitPercentage' -# label: roiTakeProfitPercentage -# min: 10% -# max: 50% -# step: 5% -# -# - type: range -# path: '/exchangeStrategies/0/pivotshort/exit/roiMinTakeProfitPercentage' -# label: roiMinTakeProfitPercentage -# min: 3% -# max: 10% -# step: 1% -# +- type: range + path: '/exchangeStrategies/0/pivotshort/exits/0/roiStopLoss/percentage' + label: roiStopLossPercentage + min: 0.5% + max: 2% + step: 0.1% + +- type: range + path: '/exchangeStrategies/0/pivotshort/exits/1/roiTakeProfit/percentage' + label: roiTakeProfit + min: 10% + max: 40% + step: 5% + +- type: range + path: '/exchangeStrategies/0/pivotshort/exits/2/protectionStopLoss/activationRatio' + label: protectionStopLoss_activationRatio + min: 0.5% + max: 3% + step: 0.1% + +- type: range + path: '/exchangeStrategies/0/pivotshort/exits/4/lowerShadowTakeProfit/ratio' + label: lowerShadowTakeProfit_ratio + min: 1% + max: 10% + step: 1% + +- type: range + path: '/exchangeStrategies/0/pivotshort/exits/5/cumulatedVolumeTakeProfit/minQuoteVolume' + label: cumulatedVolumeTakeProfit_minQuoteVolume + min: 30_000_000 + max: 200_000_000 + step: 10_000_000