mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-10 09:11:55 +00:00
Merge pull request #1000 from c9s/narumi/rebalance/backtest
fix: rebalance: fix backtest
This commit is contained in:
commit
ba7985690f
|
@ -8,18 +8,34 @@ notifications:
|
|||
orderUpdate: true
|
||||
submitOrder: true
|
||||
|
||||
backtest:
|
||||
startTime: "2022-01-01"
|
||||
endTime: "2022-10-01"
|
||||
symbols:
|
||||
- BTCUSDT
|
||||
- ETHUSDT
|
||||
- MAXUSDT
|
||||
account:
|
||||
max:
|
||||
makerFeeRate: 0.075%
|
||||
takerFeeRate: 0.075%
|
||||
balances:
|
||||
BTC: 0.0
|
||||
ETH: 0.0
|
||||
MAX: 0.0
|
||||
USDT: 10000.0
|
||||
|
||||
exchangeStrategies:
|
||||
- on: max
|
||||
rebalance:
|
||||
interval: 1d
|
||||
quoteCurrency: TWD
|
||||
quoteCurrency: USDT
|
||||
targetWeights:
|
||||
BTC: 40%
|
||||
ETH: 20%
|
||||
MAX: 10%
|
||||
USDT: 15%
|
||||
TWD: 15%
|
||||
threshold: 2%
|
||||
BTC: 50%
|
||||
ETH: 25%
|
||||
MAX: 15%
|
||||
USDT: 10%
|
||||
threshold: 1%
|
||||
# max amount to buy or sell per order
|
||||
maxAmount: 10_000
|
||||
maxAmount: 1_000
|
||||
dryRun: false
|
||||
|
|
|
@ -66,7 +66,9 @@ func (s *Strategy) Validate() error {
|
|||
}
|
||||
|
||||
func (s *Strategy) Subscribe(session *bbgo.ExchangeSession) {
|
||||
session.Subscribe(types.KLineChannel, s.symbols()[0], types.SubscribeOptions{Interval: s.Interval})
|
||||
for _, symbol := range s.symbols() {
|
||||
session.Subscribe(types.KLineChannel, symbol, types.SubscribeOptions{Interval: s.Interval})
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Strategy) Run(ctx context.Context, orderExecutor bbgo.OrderExecutor, session *bbgo.ExchangeSession) error {
|
||||
|
@ -113,21 +115,20 @@ func (s *Strategy) rebalance(ctx context.Context, orderExecutor bbgo.OrderExecut
|
|||
|
||||
func (s *Strategy) prices(ctx context.Context, session *bbgo.ExchangeSession) types.ValueMap {
|
||||
m := make(types.ValueMap)
|
||||
|
||||
tickers, err := session.Exchange.QueryTickers(ctx, s.symbols()...)
|
||||
if err != nil {
|
||||
log.WithError(err).Error("failed to query tickers")
|
||||
return nil
|
||||
}
|
||||
|
||||
for currency := range s.TargetWeights {
|
||||
if currency == s.QuoteCurrency {
|
||||
m[s.QuoteCurrency] = fixedpoint.One
|
||||
continue
|
||||
}
|
||||
m[currency] = tickers[currency+s.QuoteCurrency].Last
|
||||
}
|
||||
|
||||
ticker, err := session.Exchange.QueryTicker(ctx, currency+s.QuoteCurrency)
|
||||
if err != nil {
|
||||
log.WithError(err).Error("failed to query tickers")
|
||||
return nil
|
||||
}
|
||||
|
||||
m[currency] = ticker.Last
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user