bbgo_origin/bbgo/stock_test.go
2020-08-04 15:25:09 +08:00

104 lines
2.8 KiB
Go

package bbgo
import (
"github.com/c9s/bbgo/pkg/bbgo/types"
"github.com/stretchr/testify/assert"
"testing"
)
func TestStockManager(t *testing.T) {
t.Run("stock", func(t *testing.T) {
var trades = []types.Trade{
{Symbol: "BTCUSDT", Price: 9100.0, Quantity: 0.05, IsBuyer: true},
{Symbol: "BTCUSDT", Price: 9100.0, Quantity: 0.05, IsBuyer: true},
{Symbol: "BTCUSDT", Price: 9200.0, Quantity: 0.01, IsBuyer: false},
}
var stockManager = &StockManager{
TradingFeeCurrency: "BNB",
Symbol: "BTCUSDT",
}
_, err := stockManager.LoadTrades(trades)
assert.NoError(t, err)
assert.Len(t, stockManager.Stocks, 2)
assert.Len(t, stockManager.PendingSells, 0)
})
t.Run("sold out", func(t *testing.T) {
var trades = []types.Trade{
{Symbol: "BTCUSDT", Price: 9100.0, Quantity: 0.05, IsBuyer: true},
{Symbol: "BTCUSDT", Price: 9200.0, Quantity: 0.05, IsBuyer: false},
{Symbol: "BTCUSDT", Price: 9100.0, Quantity: 0.05, IsBuyer: true},
{Symbol: "BTCUSDT", Price: 9200.0, Quantity: 0.05, IsBuyer: false},
}
var stockManager = &StockManager{
TradingFeeCurrency: "BNB",
Symbol: "BTCUSDT",
}
_, err := stockManager.LoadTrades(trades)
assert.NoError(t, err)
assert.Len(t, stockManager.Stocks, 0)
assert.Len(t, stockManager.PendingSells, 0)
})
t.Run("oversell", func(t *testing.T) {
var trades = []types.Trade{
{Symbol: "BTCUSDT", Price: 9100.0, Quantity: 0.05, IsBuyer: true},
{Symbol: "BTCUSDT", Price: 9200.0, Quantity: 0.05, IsBuyer: false},
{Symbol: "BTCUSDT", Price: 9200.0, Quantity: 0.05, IsBuyer: false},
}
var stockManager = &StockManager{
TradingFeeCurrency: "BNB",
Symbol: "BTCUSDT",
}
_, err := stockManager.LoadTrades(trades)
assert.NoError(t, err)
assert.Len(t, stockManager.Stocks, 0)
assert.Len(t, stockManager.PendingSells, 1)
})
t.Run("loss sell", func(t *testing.T) {
var trades = []types.Trade{
{Symbol: "BTCUSDT", Price: 9100.0, Quantity: 0.05, IsBuyer: true},
{Symbol: "BTCUSDT", Price: 9200.0, Quantity: 0.02, IsBuyer: false},
{Symbol: "BTCUSDT", Price: 8000.0, Quantity: 0.01, IsBuyer: false},
}
var stockManager = &StockManager{
TradingFeeCurrency: "BNB",
Symbol: "BTCUSDT",
}
_, err := stockManager.LoadTrades(trades)
assert.NoError(t, err)
assert.Len(t, stockManager.Stocks, 1)
assert.Len(t, stockManager.PendingSells, 0)
})
t.Run("pending sell", func(t *testing.T) {
var trades = []types.Trade{
{Symbol: "BTCUSDT", Price: 9200.0, Quantity: 0.02, IsBuyer: false},
{Symbol: "BTCUSDT", Price: 9100.0, Quantity: 0.05, IsBuyer: true},
}
var stockManager = &StockManager{
TradingFeeCurrency: "BNB",
Symbol: "BTCUSDT",
}
_, err := stockManager.LoadTrades(trades)
assert.NoError(t, err)
assert.Len(t, stockManager.Stocks, 1)
assert.Len(t, stockManager.PendingSells, 0)
})
}