mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-22 14:55:16 +00:00
pull out order formatter
This commit is contained in:
parent
a4b6a5f923
commit
4e7c1a327b
|
@ -5,6 +5,7 @@ import (
|
|||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/c9s/bbgo/pkg/fixedpoint"
|
||||
"github.com/c9s/bbgo/pkg/types"
|
||||
)
|
||||
|
||||
|
@ -20,50 +21,66 @@ func (e *ExchangeOrderExecutionRouter) SubmitOrdersTo(ctx context.Context, sessi
|
|||
return nil, errors.Errorf("exchange session %s not found", session)
|
||||
}
|
||||
|
||||
var formattedOrders []types.SubmitOrder
|
||||
for _, order := range orders {
|
||||
market, ok := es.Market(order.Symbol)
|
||||
if !ok {
|
||||
return nil, errors.Errorf("market is not defined: %s", order.Symbol)
|
||||
}
|
||||
|
||||
order.Market = market
|
||||
order.PriceString = market.FormatPrice(order.Price)
|
||||
order.QuantityString = market.FormatVolume(order.Quantity)
|
||||
formattedOrders = append(formattedOrders, order)
|
||||
formattedOrders, err := formatOrders(orders, es)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// e.Notify(":memo: Submitting order to %s %s %s %s with quantity: %s", session, order.Symbol, order.Type, order.Side, order.QuantityString, order)
|
||||
|
||||
return es.Exchange.SubmitOrders(ctx, formattedOrders...)
|
||||
}
|
||||
|
||||
// ExchangeOrderExecutor is an order executor wrapper for single exchange instance.
|
||||
type ExchangeOrderExecutor struct {
|
||||
Notifiability
|
||||
Notifiability `json:"-"`
|
||||
|
||||
session *ExchangeSession
|
||||
}
|
||||
|
||||
func (e *ExchangeOrderExecutor) Session() *ExchangeSession {
|
||||
return e.session
|
||||
session *ExchangeSession `json:"-"`
|
||||
}
|
||||
|
||||
func (e *ExchangeOrderExecutor) SubmitOrders(ctx context.Context, orders ...types.SubmitOrder) ([]types.Order, error) {
|
||||
var formattedOrders []types.SubmitOrder
|
||||
formattedOrders, err := formatOrders(orders, e.session)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// e.Notify(":memo: Submitting %s %s %s order with quantity: %s", order.Symbol, order.Type, order.Side, order.QuantityString, order)
|
||||
|
||||
return e.session.Exchange.SubmitOrders(ctx, formattedOrders...)
|
||||
}
|
||||
|
||||
type RiskControlOrderExecutor struct {
|
||||
Notifiability `json:"-"`
|
||||
|
||||
MinQuoteBalance fixedpoint.Value `json:"minQuoteBalance,omitempty"`
|
||||
MaxAssetBalance fixedpoint.Value `json:"maxBaseAssetBalance,omitempty"`
|
||||
MinAssetBalance fixedpoint.Value `json:"minBaseAssetBalance,omitempty"`
|
||||
MaxOrderAmount fixedpoint.Value `json:"maxOrderAmount,omitempty"`
|
||||
|
||||
session *ExchangeSession `json:"-"`
|
||||
}
|
||||
|
||||
func (e *RiskControlOrderExecutor) SubmitOrders(ctx context.Context, orders ...types.SubmitOrder) ([]types.Order, error) {
|
||||
formattedOrders, err := formatOrders(orders, e.session)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// e.Notify(":memo: Submitting %s %s %s order with quantity: %s", order.Symbol, order.Type, order.Side, order.QuantityString, order)
|
||||
return e.session.Exchange.SubmitOrders(ctx, formattedOrders...)
|
||||
}
|
||||
|
||||
func formatOrders(orders []types.SubmitOrder, session *ExchangeSession) (formattedOrders []types.SubmitOrder, err error) {
|
||||
for _, order := range orders {
|
||||
market, ok := e.session.Market(order.Symbol)
|
||||
market, ok := session.Market(order.Symbol)
|
||||
if !ok {
|
||||
return nil, errors.Errorf("market is not defined: %s", order.Symbol)
|
||||
return formattedOrders, errors.Errorf("market is not defined: %s", order.Symbol)
|
||||
}
|
||||
|
||||
order.Market = market
|
||||
order.PriceString = market.FormatPrice(order.Price)
|
||||
order.QuantityString = market.FormatVolume(order.Quantity)
|
||||
formattedOrders = append(formattedOrders, order)
|
||||
|
||||
// e.Notify(":memo: Submitting %s %s %s order with quantity: %s", order.Symbol, order.Type, order.Side, order.QuantityString, order)
|
||||
}
|
||||
|
||||
return e.session.Exchange.SubmitOrders(ctx, formattedOrders...)
|
||||
return formattedOrders, err
|
||||
}
|
||||
|
|
|
@ -225,7 +225,6 @@ func (trader *Trader) ReportPnL(notifier Notifier) *PnLReporterManager {
|
|||
}
|
||||
|
||||
type OrderExecutor interface {
|
||||
Session() *ExchangeSession
|
||||
SubmitOrders(ctx context.Context, orders ...types.SubmitOrder) (createdOrders []types.Order, err error)
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,6 @@ import (
|
|||
"gopkg.in/yaml.v3"
|
||||
|
||||
"github.com/c9s/bbgo/pkg/bbgo"
|
||||
"github.com/c9s/bbgo/pkg/fixedpoint"
|
||||
)
|
||||
|
||||
type SingleExchangeStrategyConfig struct {
|
||||
|
@ -23,15 +22,8 @@ type PnLReporter struct {
|
|||
When StringSlice `json:"when" yaml:"when"`
|
||||
}
|
||||
|
||||
type RiskControlOrderExecutor struct {
|
||||
MinQuoteBalance fixedpoint.Value `json:"minQuoteBalance,omitempty"`
|
||||
MaxAssetBalance fixedpoint.Value `json:"maxBaseAssetBalance,omitempty"`
|
||||
MinAssetBalance fixedpoint.Value `json:"minBaseAssetBalance,omitempty"`
|
||||
MaxOrderAmount fixedpoint.Value `json:"maxOrderAmount,omitempty"`
|
||||
}
|
||||
|
||||
type SymbolBasedOrderExecutor struct {
|
||||
RiskControlOrderExecutor *RiskControlOrderExecutor `json:"RiskControlOrderExecutor,omitempty"`
|
||||
RiskControlOrderExecutor *bbgo.RiskControlOrderExecutor `json:"RiskControlOrderExecutor,omitempty"`
|
||||
}
|
||||
|
||||
type OrderExecutor struct {
|
||||
|
|
Loading…
Reference in New Issue
Block a user