Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FIX: [xalign] correct the base/quote currency balance name when it's reversed #1592

Merged
merged 1 commit into from Mar 19, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
33 changes: 22 additions & 11 deletions pkg/strategy/xalign/strategy.go
Expand Up @@ -131,18 +131,22 @@ func (s *Strategy) selectSessionForCurrency(
side = types.SideTypeSell
}

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

// check both quoteCurrency/currency and currency/quoteCurrency
symbol := currency + quoteCurrency
// check both fromQuoteCurrency/currency and currency/fromQuoteCurrency
baseCurrency := currency
quoteCurrency := fromQuoteCurrency
symbol := currency + fromQuoteCurrency
market, ok := session.Market(symbol)
if !ok {
// for TWD in USDT/TWD market, buy TWD means sell USDT
symbol = quoteCurrency + currency
baseCurrency = fromQuoteCurrency
quoteCurrency = currency
symbol = fromQuoteCurrency + currency
market, ok = session.Market(symbol)
if !ok {
continue
Expand Down Expand Up @@ -196,11 +200,18 @@ func (s *Strategy) selectSessionForCurrency(
continue
}

if expectedQuoteBalance, ok := s.ExpectedBalances[quoteCurrency]; ok {
rest := quoteBalance.Total().Sub(requiredQuoteAmount)
if rest.Compare(expectedQuoteBalance) < 0 {
log.Warnf("required quote amount %f will use up the expected balance %f, skip", requiredQuoteAmount.Float64(), expectedQuoteBalance.Float64())
continue
// for currency = TWD in market USDT/TWD
// since the side is reversed, the quote currency is also "TWD" here.
//
// for currency = BTC in market BTC/USDT and the side is buy
// we want to check if the quote currency USDT used up another expected balance.
if quoteCurrency != currency {
if expectedQuoteBalance, ok := s.ExpectedBalances[quoteCurrency]; ok {
rest := quoteBalance.Total().Sub(requiredQuoteAmount)
if rest.Compare(expectedQuoteBalance) < 0 {
log.Warnf("required quote amount %f will use up the expected balance %f, skip", requiredQuoteAmount.Float64(), expectedQuoteBalance.Float64())
continue
}
}
}

Expand Down Expand Up @@ -232,7 +243,7 @@ func (s *Strategy) selectSessionForCurrency(
price = ticker.Sell
}

baseBalance, ok := session.Account.Balance(currency)
baseBalance, ok := session.Account.Balance(baseCurrency)
if !ok {
continue
}
Expand Down