mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-26 08:45:16 +00:00
bbgo: add trade collector test
This commit is contained in:
parent
a49d001c29
commit
d63cc42867
|
@ -50,7 +50,9 @@ func (c *TradeCollector) BindStreamForBackground(stream types.Stream) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *TradeCollector) BindStream(stream types.Stream) {
|
func (c *TradeCollector) BindStream(stream types.Stream) {
|
||||||
stream.OnTradeUpdate(c.ProcessTrade)
|
stream.OnTradeUpdate(func(trade types.Trade) {
|
||||||
|
c.ProcessTrade(trade)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Emit triggers the trade processing (position update)
|
// Emit triggers the trade processing (position update)
|
||||||
|
@ -66,7 +68,6 @@ func (c *TradeCollector) Emit() {
|
||||||
func (c *TradeCollector) Process() bool {
|
func (c *TradeCollector) Process() bool {
|
||||||
positionChanged := false
|
positionChanged := false
|
||||||
c.tradeStore.Filter(func(trade types.Trade) bool {
|
c.tradeStore.Filter(func(trade types.Trade) bool {
|
||||||
return c.processTrade(trade)
|
|
||||||
key := trade.Key()
|
key := trade.Key()
|
||||||
|
|
||||||
// if it's already done, remove the trade from the trade store
|
// if it's already done, remove the trade from the trade store
|
||||||
|
@ -112,10 +113,12 @@ func (c *TradeCollector) processTrade(trade types.Trade) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *TradeCollector) ProcessTrade(trade types.Trade) {
|
func (c *TradeCollector) ProcessTrade(trade types.Trade) bool {
|
||||||
if !c.processTrade(trade) {
|
if !c.processTrade(trade) {
|
||||||
c.tradeStore.Add(trade)
|
c.tradeStore.Add(trade)
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run is a goroutine executed in the background
|
// Run is a goroutine executed in the background
|
||||||
|
|
68
pkg/bbgo/tradecollector_test.go
Normal file
68
pkg/bbgo/tradecollector_test.go
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
package bbgo
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
|
"github.com/c9s/bbgo/pkg/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestTradeCollector(t *testing.T) {
|
||||||
|
symbol := "BTCUSDT"
|
||||||
|
position := types.NewPosition(symbol, "BTC", "USDT")
|
||||||
|
orderStore := NewOrderStore(symbol)
|
||||||
|
collector := NewTradeCollector(symbol, position, orderStore)
|
||||||
|
assert.NotNil(t, collector)
|
||||||
|
|
||||||
|
matched := collector.ProcessTrade(types.Trade{
|
||||||
|
ID: 1,
|
||||||
|
OrderID: 399,
|
||||||
|
Exchange: types.ExchangeBinance,
|
||||||
|
Price: 40000.0,
|
||||||
|
Quantity: 1.0,
|
||||||
|
QuoteQuantity: 40000.0,
|
||||||
|
Symbol: "BTCUSDT",
|
||||||
|
Side: types.SideTypeBuy,
|
||||||
|
IsBuyer: true,
|
||||||
|
Fee: 0,
|
||||||
|
FeeCurrency: "",
|
||||||
|
})
|
||||||
|
assert.False(t, matched, "should be added to the trade store")
|
||||||
|
assert.Equal(t, 1, len(collector.tradeStore.Trades()), "should have one trade in the trade store")
|
||||||
|
|
||||||
|
orderStore.Add(types.Order{
|
||||||
|
SubmitOrder: types.SubmitOrder{
|
||||||
|
Symbol: "BTCUSDT",
|
||||||
|
Side: types.SideTypeBuy,
|
||||||
|
Type: types.OrderTypeLimit,
|
||||||
|
Quantity: 1.0,
|
||||||
|
Price: 40000.0,
|
||||||
|
},
|
||||||
|
Exchange: types.ExchangeBinance,
|
||||||
|
OrderID: 399,
|
||||||
|
Status: types.OrderStatusFilled,
|
||||||
|
ExecutedQuantity: 1.0,
|
||||||
|
IsWorking: false,
|
||||||
|
})
|
||||||
|
|
||||||
|
matched = collector.Process()
|
||||||
|
assert.True(t, matched)
|
||||||
|
assert.Equal(t, 0, len(collector.tradeStore.Trades()), "the found trade should be removed from the trade store")
|
||||||
|
|
||||||
|
matched = collector.ProcessTrade(types.Trade{
|
||||||
|
ID: 1,
|
||||||
|
OrderID: 399,
|
||||||
|
Exchange: types.ExchangeBinance,
|
||||||
|
Price: 40000.0,
|
||||||
|
Quantity: 1.0,
|
||||||
|
QuoteQuantity: 40000.0,
|
||||||
|
Symbol: "BTCUSDT",
|
||||||
|
Side: types.SideTypeBuy,
|
||||||
|
IsBuyer: true,
|
||||||
|
Fee: 0,
|
||||||
|
FeeCurrency: "",
|
||||||
|
})
|
||||||
|
assert.True(t, matched, "the same trade should match")
|
||||||
|
assert.Equal(t, 0, len(collector.tradeStore.Trades()), "the same trade should not be added to the trade store")
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user