service

package
v1.58.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 19, 2024 License: AGPL-3.0 Imports: 35 Imported by: 16

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrExchangeRewardServiceNotImplemented = errors.New("exchange does not implement ExchangeRewardService interface")
View Source
var ErrNotImplemented = errors.New("not implemented")
View Source
var ErrPersistenceNotExists = errors.New("persistent data does not exists")
View Source
var ErrTradeNotFound = errors.New("trade not found")

Functions

func NewDefaultTotpKey added in v1.4.0

func NewDefaultTotpKey() (*otp.Key, error)

func ParseStructTag added in v1.33.1

func ParseStructTag(s string) (string, map[string]string)

func ReformatMysqlDSN added in v1.11.0

func ReformatMysqlDSN(dsn string) (string, error)

func SelectLastDeposits added in v1.33.2

func SelectLastDeposits(ex types.ExchangeName, limit uint64) sq.SelectBuilder

func SelectLastMarginInterests added in v1.33.0

func SelectLastMarginInterests(ex types.ExchangeName, asset string, limit uint64) sq.SelectBuilder

func SelectLastMarginLiquidations added in v1.33.0

func SelectLastMarginLiquidations(ex types.ExchangeName, limit uint64) sq.SelectBuilder

func SelectLastMarginLoans added in v1.33.0

func SelectLastMarginLoans(ex types.ExchangeName, asset string, limit uint64) sq.SelectBuilder

func SelectLastMarginRepays added in v1.33.0

func SelectLastMarginRepays(ex types.ExchangeName, asset string, limit uint64) sq.SelectBuilder

func SelectLastOrders added in v1.33.0

func SelectLastOrders(ex types.ExchangeName, symbol string, isMargin, isFutures, isIsolated bool, limit uint64) sq.SelectBuilder

func SelectLastRewards added in v1.36.0

func SelectLastRewards(ex types.ExchangeName, limit uint64) sq.SelectBuilder

func SelectLastTrades added in v1.33.0

func SelectLastTrades(ex types.ExchangeName, symbol string, isMargin, isFutures, isIsolated bool, limit uint64) sq.SelectBuilder

func SelectLastWithdraws added in v1.33.0

func SelectLastWithdraws(ex types.ExchangeName, limit uint64) sq.SelectBuilder

Types

type AccountService added in v1.21.0

type AccountService struct {
	DB *sqlx.DB
}

func NewAccountService added in v1.21.0

func NewAccountService(db *sqlx.DB) *AccountService

func (*AccountService) InsertAsset added in v1.21.0

func (s *AccountService) InsertAsset(time time.Time, session string, name types.ExchangeName, account string, isMargin bool, isIsolatedMargin bool, isolatedMarginSymbol string, assets types.AssetMap) error

TODO: should pass bbgo.ExchangeSession to this function, but that might cause cyclic import

type AggOrder added in v1.11.0

type AggOrder struct {
	types.Order
	AveragePrice *float64 `json:"averagePrice" db:"average_price"`
}

type BacktestService

type BacktestService struct {
	DB *sqlx.DB
}

func (*BacktestService) BatchInsert added in v1.21.0

func (s *BacktestService) BatchInsert(kline []types.KLine, ex types.Exchange) error

BatchInsert Note: all kline should be same exchange, or it will cause issue.

func (*BacktestService) FindMissingTimeRanges added in v1.33.0

func (s *BacktestService) FindMissingTimeRanges(
	ctx context.Context, ex types.Exchange, symbol string, interval types.Interval, since, until time.Time,
) ([]TimeRange, error)

FindMissingTimeRanges returns the missing time ranges, the start/end time represents the existing data time points. So when sending kline query to the exchange API, we need to add one second to the start time and minus one second to the end time.

func (*BacktestService) Insert

func (s *BacktestService) Insert(kline types.KLine, ex types.Exchange) error

func (*BacktestService) QueryExistingDataRange added in v1.33.0

func (s *BacktestService) QueryExistingDataRange(
	ctx context.Context, ex types.Exchange, symbol string, interval types.Interval, tArgs ...time.Time,
) (start, end *types.Time, err error)

func (*BacktestService) QueryKLine added in v1.19.3

func (s *BacktestService) QueryKLine(
	ex types.Exchange, symbol string, interval types.Interval, orderBy string, limit int,
) (*types.KLine, error)

QueryKLine queries the klines from the database

func (*BacktestService) QueryKLinesBackward

func (s *BacktestService) QueryKLinesBackward(
	exchange types.Exchange, symbol string, interval types.Interval, endTime time.Time, limit int,
) ([]types.KLine, error)

func (*BacktestService) QueryKLinesCh

func (s *BacktestService) QueryKLinesCh(
	since, until time.Time, exchange types.Exchange, symbols []string, intervals []types.Interval,
) (chan types.KLine, chan error)

func (*BacktestService) QueryKLinesForward

func (s *BacktestService) QueryKLinesForward(
	exchange types.Exchange, symbol string, interval types.Interval, startTime time.Time, limit int,
) ([]types.KLine, error)

QueryKLinesForward is used for querying klines to back-testing

func (*BacktestService) SelectKLineTimePoints added in v1.56.0

func (s *BacktestService) SelectKLineTimePoints(
	ex types.Exchange, symbol string, interval types.Interval, args ...time.Time,
) sq.SelectBuilder

func (*BacktestService) SelectKLineTimeRange added in v1.56.0

func (s *BacktestService) SelectKLineTimeRange(
	ex types.Exchange, symbol string, interval types.Interval, args ...time.Time,
) sq.SelectBuilder

SelectKLineTimeRange returns the existing klines time range (since < kline.start_time < until)

func (*BacktestService) SelectLastKLines added in v1.56.0

func (s *BacktestService) SelectLastKLines(
	ex types.Exchange, symbol string, interval types.Interval, startTime, endTime time.Time, limit uint64,
) sq.SelectBuilder

TODO: add is_futures column since the klines data is different

func (*BacktestService) Sync

func (s *BacktestService) Sync(
	ctx context.Context, ex types.Exchange, symbol string, interval types.Interval, since, until time.Time,
) error

func (*BacktestService) SyncFresh added in v1.33.0

func (s *BacktestService) SyncFresh(
	ctx context.Context, exchange types.Exchange, symbol string, interval types.Interval, startTime, endTime time.Time,
) error

func (*BacktestService) SyncKLineByInterval added in v1.14.0

func (s *BacktestService) SyncKLineByInterval(
	ctx context.Context, exchange types.Exchange, symbol string, interval types.Interval, startTime, endTime time.Time,
) error

func (*BacktestService) SyncPartial added in v1.33.0

func (s *BacktestService) SyncPartial(
	ctx context.Context, ex types.Exchange, symbol string, interval types.Interval, since, until time.Time,
) error

SyncPartial find the existing data time range (t1, t2) scan if there is a missing part create a time range slice []TimeRange iterate the []TimeRange slice to sync data.

func (*BacktestService) Verify added in v1.21.0

func (s *BacktestService) Verify(sourceExchange types.Exchange, symbols []string, startTime time.Time, endTime time.Time) error

type CurrencyPositionMap added in v1.13.0

type CurrencyPositionMap map[string]fixedpoint.Value

type DatabaseService added in v1.11.0

type DatabaseService struct {
	Driver string
	DSN    string
	DB     *sqlx.DB
	// contains filtered or unexported fields
}

func NewDatabaseService added in v1.11.0

func NewDatabaseService(driver, dsn string) *DatabaseService

func (*DatabaseService) AddMigrationPackages added in v1.56.0

func (s *DatabaseService) AddMigrationPackages(pkgNames ...string)

func (*DatabaseService) Close added in v1.11.0

func (s *DatabaseService) Close() error

func (*DatabaseService) Connect added in v1.11.0

func (s *DatabaseService) Connect() error

func (*DatabaseService) Insert added in v1.33.0

func (s *DatabaseService) Insert(record interface{}) error

func (*DatabaseService) Upgrade added in v1.11.0

func (s *DatabaseService) Upgrade(ctx context.Context) error

type DepositService added in v1.14.0

type DepositService struct {
	DB *sqlx.DB
}

func (*DepositService) Query added in v1.14.0

func (s *DepositService) Query(exchangeName types.ExchangeName) ([]types.Deposit, error)

func (*DepositService) Sync added in v1.14.0

func (s *DepositService) Sync(ctx context.Context, ex types.Exchange, startTime time.Time) error

Sync syncs the withdraw records into db

type Expirable added in v1.44.0

type Expirable interface {
	Expiration() time.Duration
}

type JsonPersistenceConfig added in v1.12.0

type JsonPersistenceConfig struct {
	Directory string `yaml:"directory" json:"directory"`
}

type JsonPersistenceService added in v1.12.0

type JsonPersistenceService struct {
	Directory string
}

func (*JsonPersistenceService) NewStore added in v1.12.0

func (s *JsonPersistenceService) NewStore(id string, subIDs ...string) Store

type JsonStore added in v1.12.0

type JsonStore struct {
	ID        string
	Directory string
}

func (JsonStore) Load added in v1.12.0

func (store JsonStore) Load(val interface{}) error

func (JsonStore) Reset added in v1.12.0

func (store JsonStore) Reset() error

func (JsonStore) Save added in v1.12.0

func (store JsonStore) Save(val interface{}) error

type MarginService added in v1.33.0

type MarginService struct {
	DB *sqlx.DB
}

func (*MarginService) Sync added in v1.33.0

func (s *MarginService) Sync(ctx context.Context, ex types.Exchange, asset string, startTime time.Time) error

type MemoryService added in v1.12.0

type MemoryService struct {
	Slots map[string]interface{}
}

func NewMemoryService added in v1.12.0

func NewMemoryService() *MemoryService

func (*MemoryService) NewStore added in v1.12.0

func (s *MemoryService) NewStore(id string, subIDs ...string) Store

type MemoryStore added in v1.12.0

type MemoryStore struct {
	Key string
	// contains filtered or unexported fields
}

func (*MemoryStore) Load added in v1.12.0

func (store *MemoryStore) Load(val interface{}) error

func (*MemoryStore) Reset added in v1.12.0

func (store *MemoryStore) Reset() error

func (*MemoryStore) Save added in v1.12.0

func (store *MemoryStore) Save(val interface{}) error

type OrderService

type OrderService struct {
	DB *sqlx.DB
}

func (*OrderService) Insert

func (s *OrderService) Insert(order types.Order) (err error)

func (*OrderService) Query

func (s *OrderService) Query(options QueryOrdersOptions) ([]AggOrder, error)

func (*OrderService) Sync added in v1.14.0

func (s *OrderService) Sync(ctx context.Context, exchange types.Exchange, symbol string, startTime time.Time) error

type PersistenceService added in v1.12.0

type PersistenceService interface {
	NewStore(id string, subIDs ...string) Store
}

type PersistenceServiceFacade added in v1.12.0

type PersistenceServiceFacade struct {
	Redis  *RedisPersistenceService
	Json   *JsonPersistenceService
	Memory *MemoryService
}

func (*PersistenceServiceFacade) Get added in v1.12.0

Get returns the preferred persistence service by fallbacks Redis will be preferred at the first position.

type PositionService added in v1.28.0

type PositionService struct {
	DB *sqlx.DB
}

func NewPositionService added in v1.28.0

func NewPositionService(db *sqlx.DB) *PositionService

func (*PositionService) Insert added in v1.28.0

func (s *PositionService) Insert(position *types.Position, trade types.Trade, profit fixedpoint.Value) error

func (*PositionService) Load added in v1.28.0

func (s *PositionService) Load(ctx context.Context, id int64) (*types.Position, error)

type ProfitService added in v1.28.0

type ProfitService struct {
	DB *sqlx.DB
}

func (*ProfitService) Insert added in v1.28.0

func (s *ProfitService) Insert(profit types.Profit) error

func (*ProfitService) Load added in v1.28.0

func (s *ProfitService) Load(ctx context.Context, id int64) (*types.Trade, error)

type QueryOrdersOptions added in v1.11.0

type QueryOrdersOptions struct {
	Exchange types.ExchangeName
	Symbol   string
	LastGID  int64
	Ordering string
}

type QueryTradesOptions added in v1.11.0

type QueryTradesOptions struct {
	Exchange types.ExchangeName
	Sessions []string
	Symbol   string
	LastGID  int64

	// inclusive
	Since *time.Time

	// exclusive
	Until *time.Time

	// ASC or DESC
	Ordering string
	Limit    uint64
}

type RedisPersistenceConfig added in v1.12.0

type RedisPersistenceConfig struct {
	Host      string `yaml:"host" json:"host" env:"REDIS_HOST"`
	Port      string `yaml:"port" json:"port" env:"REDIS_PORT"`
	Password  string `yaml:"password,omitempty" json:"password,omitempty" env:"REDIS_PASSWORD"`
	DB        int    `yaml:"db" json:"db" env:"REDIS_DB"`
	Namespace string `yaml:"namespace" json:"namespace" env:"REDIS_NAMESPACE"`
}

type RedisPersistenceService added in v1.12.0

type RedisPersistenceService struct {
	// contains filtered or unexported fields
}

func NewRedisPersistenceService added in v1.12.0

func NewRedisPersistenceService(config *RedisPersistenceConfig) *RedisPersistenceService

func (*RedisPersistenceService) NewStore added in v1.12.0

func (s *RedisPersistenceService) NewStore(id string, subIDs ...string) Store

type RedisStore added in v1.12.0

type RedisStore struct {
	ID string
	// contains filtered or unexported fields
}

func (*RedisStore) Load added in v1.12.0

func (store *RedisStore) Load(val interface{}) error

func (*RedisStore) Reset added in v1.12.0

func (store *RedisStore) Reset() error

func (*RedisStore) Save added in v1.12.0

func (store *RedisStore) Save(val interface{}) error

type ReflectCache added in v1.33.0

type ReflectCache struct {
	// contains filtered or unexported fields
}

func NewReflectCache added in v1.33.0

func NewReflectCache() *ReflectCache

func (*ReflectCache) FieldsOf added in v1.33.0

func (c *ReflectCache) FieldsOf(t interface{}) []string

func (*ReflectCache) InsertSqlOf added in v1.33.0

func (c *ReflectCache) InsertSqlOf(t interface{}) string

func (*ReflectCache) PlaceholderOf added in v1.33.0

func (c *ReflectCache) PlaceholderOf(t interface{}) []string

func (*ReflectCache) TableNameOf added in v1.33.0

func (c *ReflectCache) TableNameOf(t interface{}) string

type RewardService added in v1.13.0

type RewardService struct {
	DB *sqlx.DB
}

RewardService collects the reward records from the exchange, currently it's only available for MAX exchange. TODO: add summary query for calculating the reward amounts CREATE VIEW reward_summary_by_years AS SELECT YEAR(created_at) as year, reward_type, currency, SUM(quantity) FROM rewards WHERE reward_type != 'airdrop' GROUP BY YEAR(created_at), reward_type, currency ORDER BY year DESC;

func (*RewardService) AggregateUnspentCurrencyPosition added in v1.13.0

func (s *RewardService) AggregateUnspentCurrencyPosition(ctx context.Context, ex types.ExchangeName, since time.Time) (CurrencyPositionMap, error)

func (*RewardService) Insert added in v1.13.0

func (s *RewardService) Insert(reward types.Reward) error

func (*RewardService) MarkAsSpent added in v1.13.0

func (s *RewardService) MarkAsSpent(ctx context.Context, uuid string) error

func (*RewardService) MarkCurrencyAsSpent added in v1.13.0

func (s *RewardService) MarkCurrencyAsSpent(ctx context.Context, currency string) error

func (*RewardService) QueryUnspent added in v1.13.0

func (s *RewardService) QueryUnspent(ctx context.Context, ex types.ExchangeName, rewardTypes ...types.RewardType) ([]types.Reward, error)

func (*RewardService) QueryUnspentSince added in v1.13.0

func (s *RewardService) QueryUnspentSince(ctx context.Context, ex types.ExchangeName, since time.Time, rewardTypes ...types.RewardType) ([]types.Reward, error)

func (*RewardService) Sync added in v1.14.0

func (s *RewardService) Sync(ctx context.Context, exchange types.Exchange, startTime time.Time) error

type Store added in v1.12.0

type Store interface {
	Load(val interface{}) error
	Save(val interface{}) error
	Reset() error
}

type SyncService

type SyncService struct {
	TradeService    *TradeService
	OrderService    *OrderService
	RewardService   *RewardService
	WithdrawService *WithdrawService
	DepositService  *DepositService
	MarginService   *MarginService
}

func (*SyncService) SyncDepositHistory added in v1.31.0

func (s *SyncService) SyncDepositHistory(ctx context.Context, exchange types.Exchange, startTime time.Time) error

func (*SyncService) SyncMarginHistory added in v1.33.0

func (s *SyncService) SyncMarginHistory(
	ctx context.Context, exchange types.Exchange, startTime time.Time, assets ...string,
) error

func (*SyncService) SyncRewardHistory added in v1.31.0

func (s *SyncService) SyncRewardHistory(ctx context.Context, exchange types.Exchange, startTime time.Time) error

func (*SyncService) SyncSessionSymbols added in v1.11.1

func (s *SyncService) SyncSessionSymbols(
	ctx context.Context, exchange types.Exchange, startTime time.Time, symbols ...string,
) error

SyncSessionSymbols syncs the trades from the given exchange session

func (*SyncService) SyncWithdrawHistory added in v1.31.0

func (s *SyncService) SyncWithdrawHistory(ctx context.Context, exchange types.Exchange, startTime time.Time) error

type SyncTask added in v1.33.0

type SyncTask struct {
	// Type is the element type of this sync task
	// Since it will create a []Type slice from this type, you should not set pointer to this field
	Type interface{}

	// ID is a function that returns the unique identity of the object
	// This function will be used for detecting duplicated objects.
	ID func(obj interface{}) string

	// Time is a function that returns the time of the object
	// This function will be used for sorting records
	Time func(obj interface{}) time.Time

	// Select is the select query builder for querying existing db records
	// The built SQL will be used for querying existing db records.
	// And then the ID function will be used for filtering duplicated object.
	Select squirrel.SelectBuilder

	// OnLoad is an optional field, which is called when the records are loaded from the database
	OnLoad func(objs interface{})

	// Filter is an optional field, which is used for filtering the remote records
	// Return true to keep the record,
	// Return false to filter the record.
	Filter func(obj interface{}) bool

	// BatchQuery is used for querying remote records.
	BatchQuery func(ctx context.Context, startTime, endTime time.Time) (interface{}, chan error)

	// Insert is an option field, which is used for customizing the record insert
	Insert func(obj interface{}) error

	// Insert is an option field, which is used for customizing the record batch insert
	BatchInsert func(obj interface{}) error

	BatchInsertBuffer int

	// LogInsert logs the insert record in INFO level
	LogInsert bool
}

SyncTask defines the behaviors for syncing remote records

type TimeRange added in v1.33.0

type TimeRange struct {
	Start time.Time
	End   time.Time
}

func (*TimeRange) String added in v1.33.0

func (t *TimeRange) String() string

type TradeService

type TradeService struct {
	DB *sqlx.DB
}

func NewTradeService

func NewTradeService(db *sqlx.DB) *TradeService

func (*TradeService) DeleteAll added in v1.17.0

func (s *TradeService) DeleteAll() error

func (*TradeService) Insert

func (s *TradeService) Insert(trade types.Trade) error

func (*TradeService) Load added in v1.11.1

func (s *TradeService) Load(ctx context.Context, id int64) (*types.Trade, error)

func (*TradeService) Query

func (s *TradeService) Query(options QueryTradesOptions) ([]types.Trade, error)

func (*TradeService) QueryForTradingFeeCurrency

func (s *TradeService) QueryForTradingFeeCurrency(ex types.ExchangeName, symbol string, feeCurrency string) ([]types.Trade, error)

func (*TradeService) QueryTradingVolume added in v1.11.0

func (s *TradeService) QueryTradingVolume(startTime time.Time, options TradingVolumeQueryOptions) ([]TradingVolume, error)

func (*TradeService) Sync added in v1.14.0

func (s *TradeService) Sync(ctx context.Context, exchange types.Exchange, symbol string, startTime time.Time) error

type TradingVolume added in v1.11.0

type TradingVolume struct {
	Year        int       `db:"year" json:"year"`
	Month       int       `db:"month" json:"month,omitempty"`
	Day         int       `db:"day" json:"day,omitempty"`
	Time        time.Time `json:"time,omitempty"`
	Exchange    string    `db:"exchange" json:"exchange,omitempty"`
	Symbol      string    `db:"symbol" json:"symbol,omitempty"`
	QuoteVolume float64   `db:"quote_volume" json:"quoteVolume"`
}

type TradingVolumeQueryOptions added in v1.11.0

type TradingVolumeQueryOptions struct {
	GroupByPeriod string
	SegmentBy     string
}

type WithdrawService added in v1.14.0

type WithdrawService struct {
	DB *sqlx.DB
}

func (*WithdrawService) Insert added in v1.14.0

func (s *WithdrawService) Insert(withdrawal types.Withdraw) error

func (*WithdrawService) Query added in v1.14.0

func (s *WithdrawService) Query(exchangeName types.ExchangeName) ([]types.Withdraw, error)

func (*WithdrawService) QueryLast added in v1.14.0

func (s *WithdrawService) QueryLast(ex types.ExchangeName, limit int) ([]types.Withdraw, error)

func (*WithdrawService) Sync added in v1.14.0

func (s *WithdrawService) Sync(ctx context.Context, ex types.Exchange, startTime time.Time) error

Sync syncs the withdrawal records into db

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL