Skip to content

Commit

Permalink
Merge pull request #1585 from c9s/c9s/fix-xalign-side-for-reversed-quote
Browse files Browse the repository at this point in the history
FIX: [xalign] fix reversed market
  • Loading branch information
c9s committed Mar 15, 2024
2 parents f618485 + 1d314da commit d3a1a97
Showing 1 changed file with 24 additions and 4 deletions.
28 changes: 24 additions & 4 deletions pkg/strategy/xalign/strategy.go
Expand Up @@ -90,7 +90,9 @@ func (s *Strategy) Validate() error {
return nil
}

func (s *Strategy) aggregateBalances(ctx context.Context, sessions map[string]*bbgo.ExchangeSession) (totalBalances types.BalanceMap, sessionBalances map[string]types.BalanceMap) {
func (s *Strategy) aggregateBalances(
ctx context.Context, sessions map[string]*bbgo.ExchangeSession,
) (totalBalances types.BalanceMap, sessionBalances map[string]types.BalanceMap) {
totalBalances = make(types.BalanceMap)
sessionBalances = make(map[string]types.BalanceMap)

Expand All @@ -112,7 +114,9 @@ func (s *Strategy) aggregateBalances(ctx context.Context, sessions map[string]*b
return totalBalances, sessionBalances
}

func (s *Strategy) selectSessionForCurrency(ctx context.Context, sessions map[string]*bbgo.ExchangeSession, currency string, changeQuantity fixedpoint.Value) (*bbgo.ExchangeSession, *types.SubmitOrder) {
func (s *Strategy) selectSessionForCurrency(
ctx context.Context, sessions map[string]*bbgo.ExchangeSession, currency string, changeQuantity fixedpoint.Value,
) (*bbgo.ExchangeSession, *types.SubmitOrder) {
for _, sessionName := range s.PreferredSessions {
session := sessions[sessionName]

Expand All @@ -128,10 +132,24 @@ func (s *Strategy) selectSessionForCurrency(ctx context.Context, sessions map[st
}

for _, quoteCurrency := range quoteCurrencies {
// skip the same currency, because there is no such USDT/USDT market
if currency == quoteCurrency {
continue
}

// check both quoteCurrency/currency and currency/quoteCurrency
symbol := currency + quoteCurrency
market, ok := session.Market(symbol)
if !ok {
continue
// for TWD in USDT/TWD market, buy TWD means sell USDT
symbol = quoteCurrency + currency
market, ok = session.Market(symbol)
if !ok {
continue
}

// reverse side
side = side.Reverse()
}

ticker, err := session.Exchange.QueryTicker(ctx, symbol)
Expand Down Expand Up @@ -376,7 +394,9 @@ func (s *Strategy) align(ctx context.Context, sessions map[string]*bbgo.Exchange
}
}

func (s *Strategy) calculateRefillQuantity(totalBalances types.BalanceMap, currency string, expectedBalance fixedpoint.Value) fixedpoint.Value {
func (s *Strategy) calculateRefillQuantity(
totalBalances types.BalanceMap, currency string, expectedBalance fixedpoint.Value,
) fixedpoint.Value {
if b, ok := totalBalances[currency]; ok {
netBalance := b.Net()
return expectedBalance.Sub(netBalance)
Expand Down

0 comments on commit d3a1a97

Please sign in to comment.