Skip to content

Commit

Permalink
core: setting.InitializeConverter could return a nil converter object
Browse files Browse the repository at this point in the history
  • Loading branch information
c9s committed Aug 16, 2024
1 parent 098de22 commit 3d7453f
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 3 deletions.
5 changes: 3 additions & 2 deletions pkg/core/tradecollector.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,14 @@ type ConverterManager struct {

func (c *ConverterManager) Initialize() error {
for _, setting := range c.ConverterSettings {

converter, err := setting.InitializeConverter()
if err != nil {
return err
}

c.AddConverter(converter)
if converter != nil {
c.AddConverter(converter)
}
}

return nil
Expand Down
22 changes: 22 additions & 0 deletions pkg/core/tradecollector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,28 @@ import (
"github.com/c9s/bbgo/pkg/types"
)

func TestTradeCollector_NilConvertManager(t *testing.T) {
symbol := "BTCUSDT"
position := types.NewPosition(symbol, "BTC", "USDT")
orderStore := NewOrderStore(symbol)
collector := NewTradeCollector(symbol, position, orderStore)

trade := types.Trade{
ID: 1,
OrderID: 399,
Exchange: types.ExchangeBinance,
Price: fixedpoint.NewFromInt(40000),
Quantity: fixedpoint.One,
QuoteQuantity: fixedpoint.NewFromInt(40000),
Symbol: "BTCUSDT",
Side: types.SideTypeBuy,
IsBuyer: true,
}

trade = collector.ConvertTrade(trade)
assert.Equal(t, "BTCUSDT", trade.Symbol)
}

func TestTradeCollector_ShouldNotCountDuplicatedTrade(t *testing.T) {
symbol := "BTCUSDT"
position := types.NewPosition(symbol, "BTC", "USDT")
Expand Down
4 changes: 3 additions & 1 deletion pkg/types/position.go
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ func (p *Position) NewMarketCloseOrder(percentage fixedpoint.Value) *SubmitOrder
}
}

// IsDust checks if the position is dust, the first argument is the price to calculate the dust quantity
func (p *Position) IsDust(a ...fixedpoint.Value) bool {
price := p.AverageCost
if len(a) > 0 {
Expand Down Expand Up @@ -448,6 +449,7 @@ func (p *Position) String() string {
)
}

// BindStream binds the trade update callback and update the position
func (p *Position) BindStream(stream Stream) {
stream.OnTradeUpdate(func(trade Trade) {
if p.Symbol == trade.Symbol {
Expand Down Expand Up @@ -540,7 +542,7 @@ func (p *Position) AddTrade(td Trade) (profit fixedpoint.Value, netProfit fixedp
p.addTradeFee(td)

// Base > 0 means we're in long position
// Base < 0 means we're in short position
// Base < 0 means we're in short position
switch td.Side {

case SideTypeBuy:
Expand Down

0 comments on commit 3d7453f

Please sign in to comment.