mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-22 06:53:52 +00:00
Merge pull request #1109 from c9s/narumi/rebalance/fix-order-executor-not-found
fix: rebalance: fix positions and profit stats map
This commit is contained in:
commit
7d91fd01d8
|
@ -33,10 +33,9 @@ exchangeStrategies:
|
|||
targetWeights:
|
||||
BTC: 50%
|
||||
ETH: 25%
|
||||
MAX: 15%
|
||||
USDT: 10%
|
||||
USDT: 25%
|
||||
threshold: 1%
|
||||
maxAmount: 1_000 # max amount to buy or sell per order
|
||||
orderType: LIMIT_MAKER # LIMIT, LIMIT_MAKER or MARKET
|
||||
dryRun: false
|
||||
onStart: false
|
||||
onStart: true
|
||||
|
|
|
@ -14,6 +14,7 @@ func NewGeneralOrderExecutorMap(session *bbgo.ExchangeSession, positionMap Posit
|
|||
m := make(GeneralOrderExecutorMap)
|
||||
|
||||
for symbol, position := range positionMap {
|
||||
log.Infof("creating order executor for symbol %s", symbol)
|
||||
orderExecutor := bbgo.NewGeneralOrderExecutor(session, symbol, ID, instanceID(symbol), position)
|
||||
m[symbol] = orderExecutor
|
||||
}
|
||||
|
@ -29,6 +30,7 @@ func (m GeneralOrderExecutorMap) BindEnvironment(environ *bbgo.Environment) {
|
|||
|
||||
func (m GeneralOrderExecutorMap) BindProfitStats(profitStatsMap ProfitStatsMap) {
|
||||
for symbol, orderExecutor := range m {
|
||||
log.Infof("binding profit stats for symbol %s", symbol)
|
||||
orderExecutor.BindProfitStats(profitStatsMap[symbol])
|
||||
}
|
||||
}
|
||||
|
@ -50,6 +52,7 @@ func (m GeneralOrderExecutorMap) Sync(ctx context.Context, obj interface{}) {
|
|||
func (m GeneralOrderExecutorMap) SubmitOrders(ctx context.Context, submitOrders ...types.SubmitOrder) (types.OrderSlice, error) {
|
||||
var allCreatedOrders types.OrderSlice
|
||||
for _, submitOrder := range submitOrders {
|
||||
log.Infof("submitting order: %+v", submitOrder)
|
||||
orderExecutor, ok := m[submitOrder.Symbol]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("order executor not found for symbol %s", submitOrder.Symbol)
|
||||
|
|
|
@ -6,15 +6,17 @@ import (
|
|||
|
||||
type PositionMap map[string]*types.Position
|
||||
|
||||
func NewPositionMap(markets []types.Market) PositionMap {
|
||||
m := make(PositionMap)
|
||||
|
||||
func (m PositionMap) createPositions(markets []types.Market) PositionMap {
|
||||
for _, market := range markets {
|
||||
if _, ok := m[market.Symbol]; ok {
|
||||
continue
|
||||
}
|
||||
|
||||
log.Infof("creating position for symbol %s", market.Symbol)
|
||||
position := types.NewPositionFromMarket(market)
|
||||
position.Strategy = ID
|
||||
position.StrategyInstanceID = instanceID(market.Symbol)
|
||||
m[market.Symbol] = position
|
||||
}
|
||||
|
||||
return m
|
||||
}
|
||||
|
|
|
@ -4,12 +4,14 @@ import "github.com/c9s/bbgo/pkg/types"
|
|||
|
||||
type ProfitStatsMap map[string]*types.ProfitStats
|
||||
|
||||
func NewProfitStatsMap(markets []types.Market) ProfitStatsMap {
|
||||
m := make(ProfitStatsMap)
|
||||
|
||||
func (m ProfitStatsMap) createProfitStats(markets []types.Market) ProfitStatsMap {
|
||||
for _, market := range markets {
|
||||
if _, ok := m[market.Symbol]; ok {
|
||||
continue
|
||||
}
|
||||
|
||||
log.Infof("creating profit stats for symbol %s", market.Symbol)
|
||||
m[market.Symbol] = types.NewProfitStats(market)
|
||||
}
|
||||
|
||||
return m
|
||||
}
|
||||
|
|
|
@ -99,12 +99,14 @@ func (s *Strategy) Run(ctx context.Context, _ bbgo.OrderExecutor, session *bbgo.
|
|||
}
|
||||
|
||||
if s.PositionMap == nil {
|
||||
s.PositionMap = NewPositionMap(markets)
|
||||
s.PositionMap = make(PositionMap)
|
||||
}
|
||||
s.PositionMap.createPositions(markets)
|
||||
|
||||
if s.ProfitStatsMap == nil {
|
||||
s.ProfitStatsMap = NewProfitStatsMap(markets)
|
||||
s.ProfitStatsMap = make(ProfitStatsMap)
|
||||
}
|
||||
s.ProfitStatsMap.createProfitStats(markets)
|
||||
|
||||
s.orderExecutorMap = NewGeneralOrderExecutorMap(session, s.PositionMap)
|
||||
s.orderExecutorMap.BindEnvironment(s.Environment)
|
||||
|
|
Loading…
Reference in New Issue
Block a user