mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-26 00:35:15 +00:00
add AggOrder for market orders
This commit is contained in:
parent
d9f904a98f
commit
b8d7ae7687
|
@ -15,7 +15,7 @@ const columns = [
|
||||||
{field: 'symbol', headerName: 'Symbol'},
|
{field: 'symbol', headerName: 'Symbol'},
|
||||||
{field: 'orderType', headerName: 'Type'},
|
{field: 'orderType', headerName: 'Type'},
|
||||||
{field: 'side', headerName: 'Side', width: 90},
|
{field: 'side', headerName: 'Side', width: 90},
|
||||||
{field: 'price', headerName: 'Price', type: 'number'},
|
{field: 'averagePrice', headerName: 'Average Price', type: 'number'},
|
||||||
{field: 'quantity', headerName: 'Quantity', type: 'number'},
|
{field: 'quantity', headerName: 'Quantity', type: 'number'},
|
||||||
{field: 'executedQuantity', headerName: 'Executed Quantity', type: 'number'},
|
{field: 'executedQuantity', headerName: 'Executed Quantity', type: 'number'},
|
||||||
{field: 'status', headerName: 'Status'},
|
{field: 'status', headerName: 'Status'},
|
||||||
|
|
|
@ -45,6 +45,11 @@ func (s *OrderService) QueryLast(ex types.ExchangeName, symbol string, isMargin
|
||||||
return nil, rows.Err()
|
return nil, rows.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AggOrder struct {
|
||||||
|
types.Order
|
||||||
|
AveragePrice *float64 `json:"averagePrice" db:"average_price"`
|
||||||
|
}
|
||||||
|
|
||||||
type OrderQueryOptions struct {
|
type OrderQueryOptions struct {
|
||||||
Exchange types.ExchangeName
|
Exchange types.ExchangeName
|
||||||
Symbol string
|
Symbol string
|
||||||
|
@ -52,7 +57,7 @@ type OrderQueryOptions struct {
|
||||||
Order string
|
Order string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *OrderService) Query(options OrderQueryOptions) ([]types.Order, error) {
|
func (s *OrderService) Query(options OrderQueryOptions) ([]AggOrder, error) {
|
||||||
// ascending
|
// ascending
|
||||||
ordering := "ASC"
|
ordering := "ASC"
|
||||||
if len(options.Order) > 0 {
|
if len(options.Order) > 0 {
|
||||||
|
@ -77,11 +82,13 @@ func (s *OrderService) Query(options OrderQueryOptions) ([]types.Order, error) {
|
||||||
where = append(where, "symbol = :symbol")
|
where = append(where, "symbol = :symbol")
|
||||||
}
|
}
|
||||||
|
|
||||||
sql := `SELECT * FROM orders`
|
sql := `SELECT orders.*, IFNULL(SUM(t.price * t.quantity)/SUM(t.quantity), orders.price) AS average_price FROM orders` +
|
||||||
|
` LEFT JOIN trades AS t ON (t.order_id = orders.order_id)`
|
||||||
if len(where) > 0 {
|
if len(where) > 0 {
|
||||||
sql += ` WHERE ` + strings.Join(where, " AND ")
|
sql += ` WHERE ` + strings.Join(where, " AND ")
|
||||||
}
|
}
|
||||||
sql += ` ORDER BY gid ` + ordering
|
sql += ` GROUP BY orders.gid `
|
||||||
|
sql += ` ORDER BY orders.gid ` + ordering
|
||||||
sql += ` LIMIT ` + strconv.Itoa(500)
|
sql += ` LIMIT ` + strconv.Itoa(500)
|
||||||
|
|
||||||
rows, err := s.DB.NamedQuery(sql, map[string]interface{}{
|
rows, err := s.DB.NamedQuery(sql, map[string]interface{}{
|
||||||
|
@ -95,7 +102,20 @@ func (s *OrderService) Query(options OrderQueryOptions) ([]types.Order, error) {
|
||||||
|
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
return s.scanRows(rows)
|
return s.scanAggRows(rows)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *OrderService) scanAggRows(rows *sqlx.Rows) (orders []AggOrder, err error) {
|
||||||
|
for rows.Next() {
|
||||||
|
var order AggOrder
|
||||||
|
if err := rows.StructScan(&order); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
orders = append(orders, order)
|
||||||
|
}
|
||||||
|
|
||||||
|
return orders, rows.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *OrderService) scanRows(rows *sqlx.Rows) (orders []types.Order, err error) {
|
func (s *OrderService) scanRows(rows *sqlx.Rows) (orders []types.Order, err error) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user