diff --git a/pkg/core/tradecollector.go b/pkg/core/tradecollector.go index 9622e912c1..08c33d7d24 100644 --- a/pkg/core/tradecollector.go +++ b/pkg/core/tradecollector.go @@ -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 diff --git a/pkg/core/tradecollector_test.go b/pkg/core/tradecollector_test.go index 0b1f8772fe..8f9ccf8416 100644 --- a/pkg/core/tradecollector_test.go +++ b/pkg/core/tradecollector_test.go @@ -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") diff --git a/pkg/types/position.go b/pkg/types/position.go index d0b37f031a..2d71ee7406 100644 --- a/pkg/types/position.go +++ b/pkg/types/position.go @@ -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 { @@ -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 { @@ -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: