2020-08-04 06:14:19 +00:00
|
|
|
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)
|
|
|
|
})
|
|
|
|
|
2020-08-04 07:25:09 +00:00
|
|
|
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)
|
|
|
|
})
|
|
|
|
|
2020-08-04 06:14:19 +00:00
|
|
|
|
|
|
|
}
|