mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-26 00:35:15 +00:00
fix exchange interface
This commit is contained in:
parent
0b58033bfb
commit
a9b995a362
|
@ -323,14 +323,7 @@ func (e *Exchange) QueryKLines(ctx context.Context, symbol, interval string, opt
|
|||
return kLines, nil
|
||||
}
|
||||
|
||||
type TradeQueryOptions struct {
|
||||
StartTime *time.Time
|
||||
EndTime *time.Time
|
||||
Limit int
|
||||
LastTradeID int64
|
||||
}
|
||||
|
||||
func (e *Exchange) QueryTrades(ctx context.Context, symbol string, options *TradeQueryOptions) (trades []types.Trade, err error) {
|
||||
func (e *Exchange) QueryTrades(ctx context.Context, symbol string, options *types.TradeQueryOptions) (trades []types.Trade, err error) {
|
||||
req := e.Client.NewListTradesService().
|
||||
Limit(1000).
|
||||
Symbol(symbol)
|
||||
|
@ -368,7 +361,7 @@ func (e *Exchange) QueryTrades(ctx context.Context, symbol string, options *Trad
|
|||
return trades, nil
|
||||
}
|
||||
|
||||
func (e *Exchange) BatchQueryTrades(ctx context.Context, symbol string, options *TradeQueryOptions) (allTrades []types.Trade, err error) {
|
||||
func (e *Exchange) BatchQueryTrades(ctx context.Context, symbol string, options *types.TradeQueryOptions) (allTrades []types.Trade, err error) {
|
||||
var startTime = time.Now().Add(-7 * 24 * time.Hour)
|
||||
if options.StartTime != nil {
|
||||
startTime = *options.StartTime
|
||||
|
@ -378,7 +371,7 @@ func (e *Exchange) BatchQueryTrades(ctx context.Context, symbol string, options
|
|||
|
||||
var lastTradeID = options.LastTradeID
|
||||
for {
|
||||
trades, err := e.QueryTrades(ctx, symbol, &TradeQueryOptions{
|
||||
trades, err := e.QueryTrades(ctx, symbol, &types.TradeQueryOptions{
|
||||
StartTime: &startTime,
|
||||
Limit: options.Limit,
|
||||
LastTradeID: lastTradeID,
|
||||
|
|
|
@ -242,7 +242,6 @@ func ParseEvent(message string) (interface{}, error) {
|
|||
return nil, fmt.Errorf("unsupported message: %s", message)
|
||||
}
|
||||
|
||||
// KLine uses binance's kline as the standard structure
|
||||
type KLine struct {
|
||||
StartTime int64 `json:"t"`
|
||||
EndTime int64 `json:"T"`
|
||||
|
|
|
@ -35,9 +35,9 @@ type OrderProcessor struct {
|
|||
MinProfitSpread float64 `json:"minProfitSpread"`
|
||||
|
||||
MaxOrderAmount float64 `json:"maxOrderAmount"`
|
||||
Exchange types.Exchange
|
||||
|
||||
Trader *Trader
|
||||
Exchange types.Exchange `json:"-"`
|
||||
Trader *Trader `json:"-"`
|
||||
}
|
||||
|
||||
func (p *OrderProcessor) Submit(ctx context.Context, order *types.SubmitOrder) error {
|
||||
|
@ -46,6 +46,9 @@ func (p *OrderProcessor) Submit(ctx context.Context, order *types.SubmitOrder) e
|
|||
market := order.Market
|
||||
quantity := order.Quantity
|
||||
|
||||
tradingCtx.Lock()
|
||||
defer tradingCtx.Unlock()
|
||||
|
||||
switch order.Side {
|
||||
case types.SideTypeBuy:
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ func (s *TradeSync) Sync(ctx context.Context, symbol string, startTime time.Time
|
|||
log.Infof("found last trade, start from lastID = %d since %s", lastTrade.ID, startTime)
|
||||
}
|
||||
|
||||
trades, err := s.Exchange.BatchQueryTrades(ctx, symbol, &binance.TradeQueryOptions{
|
||||
trades, err := s.Exchange.BatchQueryTrades(ctx, symbol, &types.TradeQueryOptions{
|
||||
StartTime: &startTime,
|
||||
Limit: 200,
|
||||
LastTradeID: lastID,
|
||||
|
|
|
@ -304,7 +304,18 @@ func (trader *Trader) reportPnL() {
|
|||
func (trader *Trader) SubmitOrder(ctx context.Context, order *types.SubmitOrder) {
|
||||
trader.Notifier.Notify(":memo: Submitting %s %s %s order with quantity: %s", order.Symbol, order.Type, order.Side, order.QuantityString, order)
|
||||
|
||||
err := trader.Exchange.SubmitOrder(ctx, order)
|
||||
orderProcessor := &OrderProcessor{
|
||||
MinQuoteBalance: 0,
|
||||
MaxAssetBalance: 0,
|
||||
MinAssetBalance: 0,
|
||||
MinProfitSpread: 0,
|
||||
MaxOrderAmount: 0,
|
||||
Exchange: trader.Exchange,
|
||||
Trader: trader,
|
||||
}
|
||||
|
||||
err := orderProcessor.Submit(ctx, order)
|
||||
|
||||
if err != nil {
|
||||
log.WithError(err).Errorf("order create error: side %s quantity: %s", order.Side, order.QuantityString)
|
||||
return
|
||||
|
|
|
@ -6,8 +6,16 @@ import (
|
|||
)
|
||||
|
||||
type Exchange interface {
|
||||
QueryKLines(interval string, startFrom time.Time, endTo time.Time) []KLineOrWindow
|
||||
QueryTrades(symbol string, startFrom time.Time) []Trade
|
||||
QueryKLines(ctx context.Context, symbol string, interval string, options KLineQueryOptions) ([]KLine, error)
|
||||
QueryTrades(ctx context.Context, symbol string, options *TradeQueryOptions) ([]Trade, error)
|
||||
|
||||
SubmitOrder(ctx context.Context, order *SubmitOrder) error
|
||||
}
|
||||
|
||||
type TradeQueryOptions struct {
|
||||
StartTime *time.Time
|
||||
EndTime *time.Time
|
||||
Limit int
|
||||
LastTradeID int64
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user