types

package
v0.0.0-...-8d88297 Latest Latest
Warning

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

Go to latest
Published: Mar 21, 2023 License: AGPL-3.0 Imports: 32 Imported by: 3

Documentation

Index

Constants

View Source
const (
	AccountTypeFutures        = AccountType("futures")
	AccountTypeMargin         = AccountType("margin")
	AccountTypeIsolatedMargin = AccountType("isolated_margin")
	AccountTypeSpot           = AccountType("spot")
)
View Source
const (
	DepositPending = DepositStatus("pending")

	DepositRejected = DepositStatus("rejected")

	DepositSuccess = DepositStatus("success")

	DepositCancelled = DepositStatus("canceled")

	// created but can not withdraw
	DepositCredited = DepositStatus("credited")
)
View Source
const (
	PositionShort  = PositionType("Short")
	PositionLong   = PositionType("Long")
	PositionClosed = PositionType("Closed")
)
View Source
const (
	Red   = Color(false)
	Black = Color(true)
)
View Source
const (
	RewardAirdrop          = RewardType("airdrop")
	RewardCommission       = RewardType("commission")
	RewardReferralKickback = RewardType("referral_kickback")
	RewardHolding          = RewardType("holding")
	RewardMining           = RewardType("mining")
	RewardTrading          = RewardType("trading")
	RewardVipRebate        = RewardType("vip_rebate")
)
View Source
const (
	SideTypeBuy  = SideType("BUY")
	SideTypeSell = SideType("SELL")
	SideTypeSelf = SideType("SELF")

	// SideTypeBoth is only used for the configuration context
	SideTypeBoth = SideType("BOTH")
)
View Source
const DateFormat = "2006-01-02"
View Source
const DirectionDown = -1
View Source
const DirectionNone = 0
View Source
const DirectionUp = 1
View Source
const NoClientOrderID = "0"

Variables

View Source
var AggTradeChannel = Channel("aggTrade")
View Source
var BNB = wrapper{accounting.Accounting{Symbol: "BNB ", Precision: 4}}
View Source
var BTC = wrapper{accounting.Accounting{Symbol: "BTC ", Precision: 8}}
View Source
var BookChannel = Channel("book")
View Source
var BookTickerChannel = Channel("bookticker")
View Source
var ErrInvalidSideType = errors.New("invalid side type")
View Source
var ErrNotSimpleDuration = errors.New("the given input is not simple duration format, valid format: [1-9][0-9]*[hdw]")
View Source
var FiatCurrencies = []string{"USDC", "USDT", "USD", "TWD", "EUR", "GBP", "BUSD"}
View Source
var Interval12h = Interval("12h")
View Source
var Interval15m = Interval("15m")
View Source
var Interval1d = Interval("1d")
View Source
var Interval1h = Interval("1h")
View Source
var Interval1m = Interval("1m")
View Source
var Interval1mo = Interval("1mo")
View Source
var Interval1ms = Interval("1ms")
View Source
var Interval1s = Interval("1s")
View Source
var Interval1w = Interval("1w")
View Source
var Interval2h = Interval("2h")
View Source
var Interval2w = Interval("2w")
View Source
var Interval30m = Interval("30m")
View Source
var Interval3d = Interval("3d")
View Source
var Interval3m = Interval("3m")
View Source
var Interval4h = Interval("4h")
View Source
var Interval5m = Interval("5m")
View Source
var Interval6h = Interval("6h")
View Source
var KLineChannel = Channel("kline")
View Source
var MarketTradeChannel = Channel("trade")
View Source
var QuantityDelta = fixedpoint.MustNewFromString("0.00000000001")
View Source
var SupportedIntervals = map[Interval]int{
	Interval1s:  1,
	Interval1m:  1 * 60,
	Interval3m:  3 * 60,
	Interval5m:  5 * 60,
	Interval15m: 15 * 60,
	Interval30m: 30 * 60,
	Interval1h:  60 * 60,
	Interval2h:  60 * 60 * 2,
	Interval4h:  60 * 60 * 4,
	Interval6h:  60 * 60 * 6,
	Interval12h: 60 * 60 * 12,
	Interval1d:  60 * 60 * 24,
	Interval3d:  60 * 60 * 24 * 3,
	Interval1w:  60 * 60 * 24 * 7,
	Interval2w:  60 * 60 * 24 * 14,
	Interval1mo: 60 * 60 * 24 * 30,
}
View Source
var USD = wrapper{accounting.Accounting{Symbol: "$ ", Precision: 2}}
View Source
var USDFiatCurrencies = []string{"USDT", "USDC", "USD", "BUSD"}

Functions

func Array

func Array(a Series, limit ...int) (result []float64)

Extract elements from the Series to a float64 array, following the order of Index(0..limit) if limit is given, will only take the first limit numbers (a.Index[0..limit]) otherwise will operate on all elements

func AutoCorrelation

func AutoCorrelation(a Series, length int, lags ...int) float64

similar to pandas.Series.autocorr() function.

The method computes the Pearson correlation between Series and shifted itself

func BeginningOfTheDay

func BeginningOfTheDay(t time.Time) time.Time

func Correlation

func Correlation(a Series, b Series, length int, method ...CorrFunc) float64

similar to pandas.Series.corr() function.

method could either be `types.Pearson`, `types.Spearman` or `types.Kendall`

func Covariance

func Covariance(a Series, b Series, length int) float64

similar to pandas.Series.cov() function with ddof=0

Compute covariance with Series

func CrossEntropy

func CrossEntropy(a, b Series, window int) (e float64)

CrossEntropy computes the cross-entropy between the two distributions

func Dot

func Dot(a interface{}, b interface{}, limit ...int) float64

Calculate (a dot b). if limit is given, will only calculate the first limit numbers (a.Index[0..limit]) otherwise will operate on all elements

func Entropy

func Entropy(a Series, window int) (e float64)

Entropy computes the Shannon entropy of a distribution or the distance between two distributions. The natural logarithm is used. - sum(v * ln(v))

func ExchangeFooterIcon

func ExchangeFooterIcon(exName ExchangeName) string

func Highest

func Highest(a Series, lookback int) float64

func IsActiveOrder

func IsActiveOrder(o Order) bool

func IsFiatCurrency

func IsFiatCurrency(currency string) bool

func IsUSDFiatCurrency

func IsUSDFiatCurrency(currency string) bool

func Kendall

func Kendall(a, b Series, length int) float64

func LinearRegression

func LinearRegression(a Series, lookback int) (alpha float64, beta float64)

func Lowest

func Lowest(a Series, lookback int) float64

func Mean

func Mean(a Series, limit ...int) (mean float64)

Calculate the average value of the series if limit is given, will only calculate the average of first limit numbers (a.Index[0..limit]) otherwise will operate on all elements

func MustParseUnixTimestamp

func MustParseUnixTimestamp(a string) time.Time

func NewOrderError

func NewOrderError(e error, o Order) error

func NextCross

func NextCross(a Series, b Series, lookback int) (int, float64, bool)

This will make prediction using Linear Regression to get the next cross point Return (offset from latest, crossed value, could cross) offset from latest should always be positive lookback param is to use at most `lookback` points to determine linear regression functions

You may also refer to excel's FORECAST function

func Omega

func Omega(returns Series, returnThresholds ...float64) float64

Determines the Omega ratio of a strategy See https://en.wikipedia.org/wiki/Omega_ratio for more details

@param returns (Series): Series of profit/loss percentage every specific interval @param returnThresholds(float64): threshold for returns filtering @return Omega ratio for give return series and threshold

func OrdersAll

func OrdersAll(orders []Order, f func(o Order) bool) bool

func OrdersAny

func OrdersAny(orders []Order, f func(o Order) bool) bool

func Over24Hours

func Over24Hours(since time.Time) bool

func ParseInterval

func ParseInterval(input Interval) int

func ParseTimeWithFormats

func ParseTimeWithFormats(strTime string, formats []string) (time.Time, error)

func Pearson

func Pearson(a, b Series, length int) float64

func Predict

func Predict(a Series, lookback int, offset ...int) float64

func Reverse

func Reverse(a Series, limit ...int) (result floats.Slice)

Similar to Array but in reverse order. Useful when you want to cache series' calculated result as float64 array the then reuse the result in multiple places (so that no recalculation will be triggered)

notice that the return type is a Float64Slice, which implements the Series interface

func Sharpe

func Sharpe(returns Series, periods int, annualize bool, smart bool) float64

Sharpe: Calcluates the sharpe ratio of access returns

@param returns (Series): Series of profit/loss percentage every specific interval @param periods (int): Freq. of returns (252/365 for daily, 12 for monthy, 1 for annually) @param annualize (bool): return annualize sharpe? @param smart (bool): return smart sharpe ratio

func SideToColorName

func SideToColorName(side SideType) string

func Skew

func Skew(a Series, length int) float64

similar to pandas.Series.skew() function.

Return unbiased skew over input series

func Sortino

func Sortino(returns Series, riskFreeReturns float64, periods int, annualize bool, smart bool) float64

Sortino: Calcluates the sotino ratio of access returns

ROI_excess   E[ROI] - ROI_risk_free

sortino = ---------- = -----------------------

risk      sqrt(E[ROI_drawdown^2])

@param returns (Series): Series of profit/loss percentage every specific interval @param riskFreeReturns (float): risk-free return rate of year @param periods (int): Freq. of returns (252/365 for daily, 12 for monthy, 1 for annually) @param annualize (bool): return annualize sortino? @param smart (bool): return smart sharpe ratio

func Spearman

func Spearman(a, b Series, length int) float64

func Stdev

func Stdev(a Series, params ...int) float64

func Sum

func Sum(a Series, limit ...int) (sum float64)

Calculate sum of the series if limit is given, will only sum first limit numbers (a.Index[0..limit]) otherwise will sum all elements

func Variance

func Variance(a Series, length int) float64

Types

type AbsResult

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

func (*AbsResult) Index

func (a *AbsResult) Index(i int) float64

func (*AbsResult) Last

func (a *AbsResult) Last() float64

func (*AbsResult) Length

func (a *AbsResult) Length() int

type Acc

type Acc = accounting.Accounting

type Account

type Account struct {
	sync.Mutex `json:"-"`

	AccountType        AccountType `json:"accountType,omitempty"`
	FuturesInfo        *FuturesAccountInfo
	MarginInfo         *MarginAccountInfo
	IsolatedMarginInfo *IsolatedMarginAccountInfo

	// Margin related common field
	// From binance:
	// Margin Level = Total Asset Value / (Total Borrowed + Total Accrued Interest)
	// If your margin level drops to 1.3, you will receive a Margin Call, which is a reminder that you should either increase your collateral (by depositing more funds) or reduce your loan (by repaying what you’ve borrowed).
	// If your margin level drops to 1.1, your assets will be automatically liquidated, meaning that Binance will sell your funds at market price to repay the loan.
	MarginLevel     fixedpoint.Value `json:"marginLevel,omitempty"`
	MarginTolerance fixedpoint.Value `json:"marginTolerance,omitempty"`

	BorrowEnabled   bool `json:"borrowEnabled,omitempty"`
	TransferEnabled bool `json:"transferEnabled,omitempty"`

	// isolated margin related fields
	// LiquidationPrice is only used when account is in the isolated margin mode
	MarginRatio      fixedpoint.Value `json:"marginRatio,omitempty"`
	LiquidationPrice fixedpoint.Value `json:"liquidationPrice,omitempty"`
	LiquidationRate  fixedpoint.Value `json:"liquidationRate,omitempty"`

	MakerFeeRate fixedpoint.Value `json:"makerFeeRate,omitempty"`
	TakerFeeRate fixedpoint.Value `json:"takerFeeRate,omitempty"`

	TotalAccountValue fixedpoint.Value `json:"totalAccountValue,omitempty"`

	CanDeposit  bool `json:"canDeposit"`
	CanTrade    bool `json:"canTrade"`
	CanWithdraw bool `json:"canWithdraw"`
	// contains filtered or unexported fields
}

func NewAccount

func NewAccount() *Account

func (*Account) AddBalance

func (a *Account) AddBalance(currency string, fund fixedpoint.Value)

func (*Account) Balance

func (a *Account) Balance(currency string) (balance Balance, ok bool)

func (*Account) Balances

func (a *Account) Balances() (d BalanceMap)

Balances lock the balances and returned the copied balances

func (*Account) LockBalance

func (a *Account) LockBalance(currency string, locked fixedpoint.Value) error

func (*Account) Print

func (a *Account) Print()

func (*Account) UnlockBalance

func (a *Account) UnlockBalance(currency string, unlocked fixedpoint.Value) error

func (*Account) UpdateBalances

func (a *Account) UpdateBalances(balances BalanceMap)

func (*Account) UseLockedBalance

func (a *Account) UseLockedBalance(currency string, fund fixedpoint.Value) error

type AccountType

type AccountType string

type AddSeriesResult

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

func (*AddSeriesResult) Index

func (a *AddSeriesResult) Index(i int) float64

func (*AddSeriesResult) Last

func (a *AddSeriesResult) Last() float64

func (*AddSeriesResult) Length

func (a *AddSeriesResult) Length() int

type Asset

type Asset struct {
	Currency string `json:"currency" db:"currency"`

	Total fixedpoint.Value `json:"total" db:"total"`

	NetAsset fixedpoint.Value `json:"netAsset" db:"net_asset"`

	Interest fixedpoint.Value `json:"interest" db:"interest"`

	// InUSD is net asset in USD
	InUSD fixedpoint.Value `json:"inUSD" db:"net_asset_in_usd"`

	// InBTC is net asset in BTC
	InBTC fixedpoint.Value `json:"inBTC" db:"net_asset_in_btc"`

	Time       time.Time        `json:"time" db:"time"`
	Locked     fixedpoint.Value `json:"lock" db:"lock" `
	Available  fixedpoint.Value `json:"available"  db:"available"`
	Borrowed   fixedpoint.Value `json:"borrowed" db:"borrowed"`
	PriceInUSD fixedpoint.Value `json:"priceInUSD" db:"price_in_usd"`
}

type AssetMap

type AssetMap map[string]Asset

func (AssetMap) InUSD

func (m AssetMap) InUSD() (total fixedpoint.Value)

func (AssetMap) PlainText

func (m AssetMap) PlainText() (o string)

func (AssetMap) SlackAttachment

func (m AssetMap) SlackAttachment() slack.Attachment

func (AssetMap) Slice

func (m AssetMap) Slice() (assets []Asset)

type BacktestStream

type BacktestStream struct {
	StandardStreamEmitter
}

func (*BacktestStream) Close

func (s *BacktestStream) Close() error

func (*BacktestStream) Connect

func (s *BacktestStream) Connect(ctx context.Context) error

type Balance

type Balance struct {
	Currency  string           `json:"currency"`
	Available fixedpoint.Value `json:"available"`
	Locked    fixedpoint.Value `json:"locked,omitempty"`

	// margin related fields
	Borrowed fixedpoint.Value `json:"borrowed,omitempty"`
	Interest fixedpoint.Value `json:"interest,omitempty"`

	// NetAsset = (Available + Locked) - Borrowed - Interest
	NetAsset fixedpoint.Value `json:"net,omitempty"`
}

func (Balance) Add

func (b Balance) Add(b2 Balance) Balance

func (Balance) Debt

func (b Balance) Debt() fixedpoint.Value

func (Balance) Net

func (b Balance) Net() fixedpoint.Value

Net returns the net asset value (total - debt)

func (Balance) String

func (b Balance) String() (o string)

func (Balance) Total

func (b Balance) Total() fixedpoint.Value

func (Balance) ValueString

func (b Balance) ValueString() (o string)

type BalanceMap

type BalanceMap map[string]Balance

func (BalanceMap) Add

func (m BalanceMap) Add(bm BalanceMap) BalanceMap

func (BalanceMap) Assets

func (m BalanceMap) Assets(prices PriceMap, priceTime time.Time) AssetMap

Assets converts balances into assets with the given prices

func (BalanceMap) Copy

func (m BalanceMap) Copy() (d BalanceMap)

func (BalanceMap) Currencies

func (m BalanceMap) Currencies() (currencies []string)

func (BalanceMap) Debts

func (m BalanceMap) Debts() BalanceMap

func (BalanceMap) Print

func (m BalanceMap) Print()

func (BalanceMap) SlackAttachment

func (m BalanceMap) SlackAttachment() slack.Attachment

func (BalanceMap) String

func (m BalanceMap) String() string

type BalanceSnapshot

type BalanceSnapshot struct {
	Balances BalanceMap `json:"balances"`
	Session  string     `json:"session"`
	Time     time.Time  `json:"time"`
}

func (BalanceSnapshot) CsvHeader

func (m BalanceSnapshot) CsvHeader() []string

func (BalanceSnapshot) CsvRecords

func (m BalanceSnapshot) CsvRecords() [][]string

type BollingerSetting

type BollingerSetting struct {
	IntervalWindow
	BandWidth float64 `json:"bandWidth"`
}

BollingerSetting contains the bollinger indicator setting propers Interval, Window and BandWidth

type BookTicker

type BookTicker struct {
	//Time     time.Time
	Symbol   string
	Buy      fixedpoint.Value // `buy` from Max, `bidPrice` from binance
	BuySize  fixedpoint.Value
	Sell     fixedpoint.Value // `sell` from Max, `askPrice` from binance
	SellSize fixedpoint.Value
}

BookTicker time exists in ftx, not in binance last exists in ftx, not in binance

func (BookTicker) String

func (b BookTicker) String() string

type BoolSeries

type BoolSeries interface {
	Last() bool
	Index(int) bool
	Length() int
}

The interface maps to pinescript basic type `series` for bool type Access the internal historical data from the latest to the oldest Index(0) always maps to Last()

func CrossOver

func CrossOver(a Series, b Series) BoolSeries

a series cross above b series. If in current KLine, a is higher than b, and in previous KLine, a is lower than b, then return true. Otherwise return false. If accessing index <= length, will always return false

func CrossUnder

func CrossUnder(a Series, b Series) BoolSeries

a series cross under b series. If in current KLine, a is lower than b, and in previous KLine, a is higher than b, then return true. Otherwise return false. If accessing index <= length, will always return false

type CancelReplaceModeType

type CancelReplaceModeType string
var (
	StopOnFailure CancelReplaceModeType = "STOP_ON_FAILURE"
	AllowFailure  CancelReplaceModeType = "ALLOW_FAILURE"
)

type Canvas

type Canvas struct {
	chart.Chart
	Interval Interval
}

func NewCanvas

func NewCanvas(title string, intervals ...Interval) *Canvas

func (*Canvas) Plot

func (canvas *Canvas) Plot(tag string, a Series, endTime Time, length int, intervals ...Interval)

func (*Canvas) PlotRaw

func (canvas *Canvas) PlotRaw(tag string, a Series, length int)

type ChangeResult

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

func (*ChangeResult) Index

func (c *ChangeResult) Index(i int) float64

func (*ChangeResult) Last

func (c *ChangeResult) Last() float64

func (*ChangeResult) Length

func (c *ChangeResult) Length() int

type Channel

type Channel string

type Color

type Color bool

Color is the RB Tree color

type CorrFunc

type CorrFunc func(Series, Series, int) float64

type CrossResult

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

The result structure that maps to the crossing result of `CrossOver` and `CrossUnder` Accessible through BoolSeries interface

func (*CrossResult) Index

func (c *CrossResult) Index(i int) bool

func (*CrossResult) Last

func (c *CrossResult) Last() bool

func (*CrossResult) Length

func (c *CrossResult) Length() int

type CsvFormatter

type CsvFormatter interface {
	CsvHeader() []string
	CsvRecords() [][]string
}

CsvFormatter is an interface used for dumping object into csv file

type CustomIntervalProvider

type CustomIntervalProvider interface {
	SupportedInterval() map[Interval]int
	IsSupportedInterval(interval Interval) bool
}

type Deposit

type Deposit struct {
	GID           int64            `json:"gid" db:"gid"`
	Exchange      ExchangeName     `json:"exchange" db:"exchange"`
	Time          Time             `json:"time" db:"time"`
	Amount        fixedpoint.Value `json:"amount" db:"amount"`
	Asset         string           `json:"asset" db:"asset"`
	Address       string           `json:"address" db:"address"`
	AddressTag    string           `json:"addressTag"`
	TransactionID string           `json:"transactionID" db:"txn_id"`
	Status        DepositStatus    `json:"status"`
}

func (Deposit) EffectiveTime

func (d Deposit) EffectiveTime() time.Time

func (Deposit) String

func (d Deposit) String() (o string)

type DepositStatus

type DepositStatus string

type Depth

type Depth string
const (
	DepthLevelFull   Depth = "FULL"
	DepthLevelMedium Depth = "MEDIUM"
	DepthLevel1      Depth = "1"
	DepthLevel5      Depth = "5"
	DepthLevel20     Depth = "20"
)

type Direction

type Direction int

type Dispatcher

type Dispatcher func(e interface{})

type DivSeriesResult

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

func (*DivSeriesResult) Index

func (a *DivSeriesResult) Index(i int) float64

func (*DivSeriesResult) Last

func (a *DivSeriesResult) Last() float64

func (*DivSeriesResult) Length

func (a *DivSeriesResult) Length() int

type Duration

type Duration time.Duration

func (*Duration) Duration

func (d *Duration) Duration() time.Duration

func (*Duration) UnmarshalJSON

func (d *Duration) UnmarshalJSON(data []byte) error

type EndpointCreator

type EndpointCreator func(ctx context.Context) (string, error)

type Exchange

type Exchange interface {
	Name() ExchangeName

	PlatformFeeCurrency() string

	ExchangeMarketDataService

	ExchangeTradeService

	ExchangePostionService
}

type ExchangeAmountFeeProtect

type ExchangeAmountFeeProtect interface {
	SetModifyOrderAmountForFee(ExchangeFee)
}

type ExchangeDefaultFeeRates

type ExchangeDefaultFeeRates interface {
	DefaultFeeRates() ExchangeFee
}

type ExchangeFee

type ExchangeFee struct {
	MakerFeeRate fixedpoint.Value
	TakerFeeRate fixedpoint.Value
}

type ExchangeMarketDataService

type ExchangeMarketDataService interface {
	NewStream() Stream

	QueryMarkets(ctx context.Context) (MarketMap, error)

	QueryTicker(ctx context.Context, symbol string) (*Ticker, error)

	QueryTickers(ctx context.Context, symbol ...string) (map[string]Ticker, error)

	QueryKLines(ctx context.Context, symbol string, interval Interval, options KLineQueryOptions) ([]KLine, error)
}

type ExchangeName

type ExchangeName string
const (
	ExchangeMax      ExchangeName = "max"
	ExchangeBinance  ExchangeName = "binance"
	ExchangeOKEx     ExchangeName = "okex"
	ExchangeKucoin   ExchangeName = "kucoin"
	ExchangeBacktest ExchangeName = "backtest"
)

func ValidExchangeName

func ValidExchangeName(a string) (ExchangeName, error)

func (ExchangeName) String

func (n ExchangeName) String() string

func (*ExchangeName) UnmarshalJSON

func (n *ExchangeName) UnmarshalJSON(data []byte) error

func (*ExchangeName) Value

func (n *ExchangeName) Value() (driver.Value, error)

type ExchangeOrderQueryService

type ExchangeOrderQueryService interface {
	QueryOrder(ctx context.Context, q OrderQuery) (*Order, error)
	QueryOrderTrades(ctx context.Context, q OrderQuery) ([]Trade, error)
}

ExchangeOrderQueryService provides an interface for querying the order status via order ID or client order ID

type ExchangePostionService

type ExchangePostionService interface {
	QueryPositions(ctx context.Context, symbol string) ([]*Positions, error)
}

type ExchangeRewardService

type ExchangeRewardService interface {
	QueryRewards(ctx context.Context, startTime time.Time) ([]Reward, error)
}

type ExchangeTradeHistoryService

type ExchangeTradeHistoryService interface {
	QueryTrades(ctx context.Context, symbol string, options *TradeQueryOptions) ([]Trade, error)
	QueryClosedOrders(ctx context.Context, symbol string, since, until time.Time, lastOrderID uint64) (orders []Order, err error)
}

type ExchangeTradeService

type ExchangeTradeService interface {
	QueryAccount(ctx context.Context) (*Account, error)

	QueryAccountBalances(ctx context.Context) (BalanceMap, error)

	SubmitOrder(ctx context.Context, order SubmitOrder) (createdOrder *Order, err error)

	QueryOpenOrders(ctx context.Context, symbol string) (orders []Order, err error)

	CancelOrders(ctx context.Context, orders ...Order) error
}

type ExchangeTransferService

type ExchangeTransferService interface {
	QueryDepositHistory(ctx context.Context, asset string, since, until time.Time) (allDeposits []Deposit, err error)
	QueryWithdrawHistory(ctx context.Context, asset string, since, until time.Time) (allWithdraws []Withdraw, err error)
}

type ExchangeWithdrawalService

type ExchangeWithdrawalService interface {
	Withdraw(ctx context.Context, asset string, amount fixedpoint.Value, address string, options *WithdrawalOptions) error
}

type FilterResult

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

func (*FilterResult) Index

func (f *FilterResult) Index(j int) float64

func (*FilterResult) Last

func (f *FilterResult) Last() float64

func (*FilterResult) Length

func (f *FilterResult) Length() int

type Float64Indicator

type Float64Indicator interface {
	Last() float64
}

Float64Indicator is the indicators (SMA and EWMA) that we want to use are returning float64 data.

type FundingRate

type FundingRate struct {
	FundingRate fixedpoint.Value
	FundingTime time.Time
	Time        time.Time
}

type FuturesAccountInfo

type FuturesAccountInfo struct {
	// Futures fields
	Assets                      FuturesAssetMap    `json:"assets"`
	Positions                   FuturesPositionMap `json:"positions"`
	TotalInitialMargin          fixedpoint.Value   `json:"totalInitialMargin"`
	TotalMaintMargin            fixedpoint.Value   `json:"totalMaintMargin"`
	TotalMarginBalance          fixedpoint.Value   `json:"totalMarginBalance"`
	TotalOpenOrderInitialMargin fixedpoint.Value   `json:"totalOpenOrderInitialMargin"`
	TotalPositionInitialMargin  fixedpoint.Value   `json:"totalPositionInitialMargin"`
	TotalUnrealizedProfit       fixedpoint.Value   `json:"totalUnrealizedProfit"`
	TotalWalletBalance          fixedpoint.Value   `json:"totalWalletBalance"`
	UpdateTime                  int64              `json:"updateTime"`
}

type FuturesAssetMap

type FuturesAssetMap map[string]FuturesUserAsset

type FuturesExchange

type FuturesExchange interface {
	UseFutures()
	UseIsolatedFutures(symbol string)
	GetFuturesSettings() FuturesSettings
}

type FuturesPosition

type FuturesPosition struct {
	Symbol        string `json:"symbol"`
	BaseCurrency  string `json:"baseCurrency"`
	QuoteCurrency string `json:"quoteCurrency"`

	Market Market `json:"market"`

	Base        fixedpoint.Value `json:"base"`
	Quote       fixedpoint.Value `json:"quote"`
	AverageCost fixedpoint.Value `json:"averageCost"`

	// ApproximateAverageCost adds the computed fee in quote in the average cost
	// This is used for calculating net profit
	ApproximateAverageCost fixedpoint.Value `json:"approximateAverageCost"`

	FeeRate          *ExchangeFee                 `json:"feeRate,omitempty"`
	ExchangeFeeRates map[ExchangeName]ExchangeFee `json:"exchangeFeeRates"`

	// Futures data fields
	Isolated     bool  `json:"isolated"`
	UpdateTime   int64 `json:"updateTime"`
	PositionRisk *PositionRisk
}

type FuturesPositionMap

type FuturesPositionMap map[string]FuturesPosition

type FuturesSettings

type FuturesSettings struct {
	IsFutures             bool
	IsIsolatedFutures     bool
	IsolatedFuturesSymbol string
}

func (FuturesSettings) GetFuturesSettings

func (s FuturesSettings) GetFuturesSettings() FuturesSettings

func (*FuturesSettings) UseFutures

func (s *FuturesSettings) UseFutures()

func (*FuturesSettings) UseIsolatedFutures

func (s *FuturesSettings) UseIsolatedFutures(symbol string)

type FuturesUserAsset

type FuturesUserAsset struct {
	Asset                  string           `json:"asset"`
	InitialMargin          fixedpoint.Value `json:"initialMargin"`
	MaintMargin            fixedpoint.Value `json:"maintMargin"`
	MarginBalance          fixedpoint.Value `json:"marginBalance"`
	MaxWithdrawAmount      fixedpoint.Value `json:"maxWithdrawAmount"`
	OpenOrderInitialMargin fixedpoint.Value `json:"openOrderInitialMargin"`
	PositionInitialMargin  fixedpoint.Value `json:"positionInitialMargin"`
	UnrealizedProfit       fixedpoint.Value `json:"unrealizedProfit"`
	WalletBalance          fixedpoint.Value `json:"walletBalance"`
}

FuturesUserAsset define cross/isolated futures account asset

type HeikinAshiStream

type HeikinAshiStream struct {
	StandardStreamEmitter

	LastOrigin map[string]map[Interval]*KLine
	// contains filtered or unexported fields
}

func (*HeikinAshiStream) EmitKLine

func (s *HeikinAshiStream) EmitKLine(kline KLine)

No writeback to lastAshi

func (*HeikinAshiStream) EmitKLineClosed

func (s *HeikinAshiStream) EmitKLineClosed(kline KLine)

type InstanceIDProvider

type InstanceIDProvider interface {
	InstanceID() string
}

type Interval

type Interval string

func (Interval) Duration

func (i Interval) Duration() time.Duration

func (Interval) Milliseconds

func (i Interval) Milliseconds() int

Milliseconds is specially handled, for better precision for ms level interval, calling Seconds and Minutes directly might trigger panic error

func (Interval) Minutes

func (i Interval) Minutes() int

func (Interval) Seconds

func (i Interval) Seconds() int

func (Interval) String

func (i Interval) String() string

func (*Interval) UnmarshalJSON

func (i *Interval) UnmarshalJSON(b []byte) (err error)

type IntervalProfitCollector

type IntervalProfitCollector struct {
	Interval  Interval      `json:"interval"`
	Profits   *floats.Slice `json:"profits"`
	Timestamp *floats.Slice `json:"timestamp"`
	// contains filtered or unexported fields
}

func NewIntervalProfitCollector

func NewIntervalProfitCollector(i Interval, startTime time.Time) *IntervalProfitCollector

func (*IntervalProfitCollector) GetNonProfitableIntervals

func (s *IntervalProfitCollector) GetNonProfitableIntervals() (result []ProfitReport)

Get all none-profitable intervals

func (*IntervalProfitCollector) GetNumOfNonProfitableIntervals

func (s *IntervalProfitCollector) GetNumOfNonProfitableIntervals() (nonprofit int)

Get number of non-profitable traded intervals (no trade within the interval or pnl = 0 will be also included here)

func (*IntervalProfitCollector) GetNumOfProfitableIntervals

func (s *IntervalProfitCollector) GetNumOfProfitableIntervals() (profit int)

Get number of profitable traded intervals

func (*IntervalProfitCollector) GetOmega

func (s *IntervalProfitCollector) GetOmega() float64

func (*IntervalProfitCollector) GetProfitableIntervals

func (s *IntervalProfitCollector) GetProfitableIntervals() (result []ProfitReport)

Get all profitable intervals

func (*IntervalProfitCollector) GetSharpe

func (s *IntervalProfitCollector) GetSharpe() float64

Get sharpe value with the interval of profit collected. no smart sharpe ON for the calculated result

func (*IntervalProfitCollector) GetSortino

func (s *IntervalProfitCollector) GetSortino() float64

Get sortino value with the interval of profit collected. No risk-free return rate and smart sortino OFF for the calculated result.

func (IntervalProfitCollector) MarshalYAML

func (s IntervalProfitCollector) MarshalYAML() (interface{}, error)

func (*IntervalProfitCollector) Update

func (s *IntervalProfitCollector) Update(profit *Profit)

Update the collector by every traded profit

type IntervalSlice

type IntervalSlice []Interval

func (IntervalSlice) StringSlice

func (s IntervalSlice) StringSlice() (slice []string)

type IntervalWindow

type IntervalWindow struct {
	// The interval of kline
	Interval Interval `json:"interval"`

	// The windows size of the indicator (for example, EWMA and SMA)
	Window int `json:"window"`

	// RightWindow is used by the pivot indicator
	RightWindow int `json:"rightWindow"`
}

IntervalWindow is used by the indicators

func (IntervalWindow) String

func (iw IntervalWindow) String() string

type IntervalWindowBandWidth

type IntervalWindowBandWidth struct {
	IntervalWindow
	BandWidth float64 `json:"bandWidth"`
}

type IsolatedMarginAccount

type IsolatedMarginAccount struct {
	TotalAssetOfBTC     fixedpoint.Value       `json:"totalAssetOfBtc"`
	TotalLiabilityOfBTC fixedpoint.Value       `json:"totalLiabilityOfBtc"`
	TotalNetAssetOfBTC  fixedpoint.Value       `json:"totalNetAssetOfBtc"`
	Assets              IsolatedMarginAssetMap `json:"assets"`
}

IsolatedMarginAccount defines isolated user assets of margin account

type IsolatedMarginAccountInfo

type IsolatedMarginAccountInfo struct {
	TotalAssetOfBTC     fixedpoint.Value       `json:"totalAssetOfBtc"`
	TotalLiabilityOfBTC fixedpoint.Value       `json:"totalLiabilityOfBtc"`
	TotalNetAssetOfBTC  fixedpoint.Value       `json:"totalNetAssetOfBtc"`
	Assets              IsolatedMarginAssetMap `json:"userAssets"`
}

type IsolatedMarginAsset

type IsolatedMarginAsset struct {
	Symbol     string            `json:"symbol"`
	QuoteAsset IsolatedUserAsset `json:"quoteAsset"`
	BaseAsset  IsolatedUserAsset `json:"baseAsset"`

	IsolatedCreated   bool             `json:"isolatedCreated"`
	MarginLevel       fixedpoint.Value `json:"marginLevel"`
	MarginLevelStatus string           `json:"marginLevelStatus"`

	MarginRatio    fixedpoint.Value `json:"marginRatio"`
	IndexPrice     fixedpoint.Value `json:"indexPrice"`
	LiquidatePrice fixedpoint.Value `json:"liquidatePrice"`
	LiquidateRate  fixedpoint.Value `json:"liquidateRate"`

	TradeEnabled bool `json:"tradeEnabled"`
}

IsolatedMarginAsset defines isolated margin asset information, like margin level, liquidation price... etc

type IsolatedMarginAssetMap

type IsolatedMarginAssetMap map[string]IsolatedMarginAsset

type IsolatedUserAsset

type IsolatedUserAsset struct {
	Asset         string           `json:"asset"`
	Borrowed      fixedpoint.Value `json:"borrowed"`
	Free          fixedpoint.Value `json:"free"`
	Interest      fixedpoint.Value `json:"interest"`
	Locked        fixedpoint.Value `json:"locked"`
	NetAsset      fixedpoint.Value `json:"netAsset"`
	NetAssetOfBtc fixedpoint.Value `json:"netAssetOfBtc"`

	BorrowEnabled bool             `json:"borrowEnabled"`
	RepayEnabled  bool             `json:"repayEnabled"`
	TotalAsset    fixedpoint.Value `json:"totalAsset"`
}

IsolatedUserAsset defines isolated user assets of the margin account

type JsonArr

type JsonArr []JsonStruct

func (JsonArr) Len

func (a JsonArr) Len() int

func (JsonArr) Less

func (a JsonArr) Less(i, j int) bool

func (JsonArr) Swap

func (a JsonArr) Swap(i, j int)

type JsonStruct

type JsonStruct struct {
	Key   string
	Json  string
	Type  string
	Value interface{}
}

type KLine

type KLine struct {
	GID      uint64       `json:"gid" db:"gid"`
	Exchange ExchangeName `json:"exchange" db:"exchange"`

	Symbol string `json:"symbol" db:"symbol"`

	StartTime Time `json:"startTime" db:"start_time"`
	EndTime   Time `json:"endTime" db:"end_time"`

	Interval Interval `json:"interval" db:"interval"`

	Open                     fixedpoint.Value `json:"open" db:"open"`
	Close                    fixedpoint.Value `json:"close" db:"close"`
	High                     fixedpoint.Value `json:"high" db:"high"`
	Low                      fixedpoint.Value `json:"low" db:"low"`
	Volume                   fixedpoint.Value `json:"volume" db:"volume"`
	QuoteVolume              fixedpoint.Value `json:"quoteVolume" db:"quote_volume"`
	TakerBuyBaseAssetVolume  fixedpoint.Value `json:"takerBuyBaseAssetVolume" db:"taker_buy_base_volume"`
	TakerBuyQuoteAssetVolume fixedpoint.Value `json:"takerBuyQuoteAssetVolume" db:"taker_buy_quote_volume"`

	LastTradeID    uint64 `json:"lastTradeID" db:"last_trade_id"`
	NumberOfTrades uint64 `json:"numberOfTrades" db:"num_trades"`
	Closed         bool   `json:"closed" db:"closed"`
}

KLine uses binance's kline as the standard structure

func SortKLinesAscending

func SortKLinesAscending(klines []KLine) []KLine

func (*KLine) BounceDown

func (k *KLine) BounceDown() bool

red candle with open and close near low price

func (*KLine) BounceUp

func (k *KLine) BounceUp() bool

green candle with open and close near high price

func (*KLine) Color

func (k *KLine) Color() string

func (*KLine) Direction

func (k *KLine) Direction() Direction

func (*KLine) GetAmplification

func (k *KLine) GetAmplification() fixedpoint.Value

func (*KLine) GetBody

func (k *KLine) GetBody() fixedpoint.Value

GetBody returns the height of the candle real body

func (*KLine) GetChange

func (k *KLine) GetChange() fixedpoint.Value

GetChange returns Close price - Open price.

func (*KLine) GetClose

func (k *KLine) GetClose() fixedpoint.Value

func (*KLine) GetEndTime

func (k *KLine) GetEndTime() Time

func (*KLine) GetHigh

func (k *KLine) GetHigh() fixedpoint.Value

func (*KLine) GetInterval

func (k *KLine) GetInterval() Interval

func (*KLine) GetLow

func (k *KLine) GetLow() fixedpoint.Value

func (*KLine) GetLowerShadowHeight

func (k *KLine) GetLowerShadowHeight() fixedpoint.Value

func (*KLine) GetLowerShadowRatio

func (k *KLine) GetLowerShadowRatio() fixedpoint.Value

func (*KLine) GetMaxChange

func (k *KLine) GetMaxChange() fixedpoint.Value

func (*KLine) GetOpen

func (k *KLine) GetOpen() fixedpoint.Value

func (*KLine) GetStartTime

func (k *KLine) GetStartTime() Time

func (*KLine) GetThickness

func (k *KLine) GetThickness() fixedpoint.Value

GetThickness returns the thickness of the kline. 1 => thick, 0.1 => thin

func (*KLine) GetUpperShadowHeight

func (k *KLine) GetUpperShadowHeight() fixedpoint.Value

func (*KLine) GetUpperShadowRatio

func (k *KLine) GetUpperShadowRatio() fixedpoint.Value

func (*KLine) Merge

func (k *KLine) Merge(o *KLine)

func (*KLine) Mid

func (k *KLine) Mid() fixedpoint.Value

func (*KLine) PlainText

func (k *KLine) PlainText() string

func (*KLine) Set

func (k *KLine) Set(o *KLine)

func (*KLine) SlackAttachment

func (k *KLine) SlackAttachment() slack.Attachment

func (*KLine) String

func (k *KLine) String() string

type KLineCallBack

type KLineCallBack func(k KLine)

func KLineWith

func KLineWith(symbol string, interval Interval, callback KLineCallBack) KLineCallBack

type KLineCallback

type KLineCallback func(kline KLine)

type KLineOrWindow

type KLineOrWindow interface {
	GetInterval() string
	Direction() Direction
	GetChange() fixedpoint.Value
	GetMaxChange() fixedpoint.Value
	GetThickness() fixedpoint.Value

	Mid() fixedpoint.Value
	GetOpen() fixedpoint.Value
	GetClose() fixedpoint.Value
	GetHigh() fixedpoint.Value
	GetLow() fixedpoint.Value

	BounceUp() bool
	BounceDown() bool
	GetUpperShadowRatio() fixedpoint.Value
	GetLowerShadowRatio() fixedpoint.Value

	SlackAttachment() slack.Attachment
}

type KLineQueryOptions

type KLineQueryOptions struct {
	Limit     int
	StartTime *time.Time
	EndTime   *time.Time
}

type KLineSeries

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

func (*KLineSeries) Index

func (k *KLineSeries) Index(i int) float64

func (*KLineSeries) Last

func (k *KLineSeries) Last() float64

func (*KLineSeries) Length

func (k *KLineSeries) Length() int

type KLineWindow

type KLineWindow []KLine

func (*KLineWindow) Add

func (k *KLineWindow) Add(line KLine)

func (KLineWindow) AllDrop

func (k KLineWindow) AllDrop() bool

func (KLineWindow) AllRise

func (k KLineWindow) AllRise() bool

func (KLineWindow) BounceDown

func (k KLineWindow) BounceDown() bool

BounceDown returns true red candle with open and close near low price

func (KLineWindow) BounceUp

func (k KLineWindow) BounceUp() bool

BounceUp returns true if it's green candle with open and close near high price

func (*KLineWindow) Close

func (k *KLineWindow) Close() Series

func (KLineWindow) Color

func (k KLineWindow) Color() string

func (KLineWindow) First

func (k KLineWindow) First() KLine

func (KLineWindow) GetAmplification

func (k KLineWindow) GetAmplification() fixedpoint.Value

func (KLineWindow) GetBody

func (k KLineWindow) GetBody() fixedpoint.Value

func (KLineWindow) GetChange

func (k KLineWindow) GetChange() fixedpoint.Value

func (KLineWindow) GetClose

func (k KLineWindow) GetClose() fixedpoint.Value

func (KLineWindow) GetHigh

func (k KLineWindow) GetHigh() fixedpoint.Value

func (KLineWindow) GetInterval

func (k KLineWindow) GetInterval() Interval

func (KLineWindow) GetLow

func (k KLineWindow) GetLow() fixedpoint.Value

func (KLineWindow) GetLowerShadowHeight

func (k KLineWindow) GetLowerShadowHeight() fixedpoint.Value

func (KLineWindow) GetLowerShadowRatio

func (k KLineWindow) GetLowerShadowRatio() fixedpoint.Value

func (KLineWindow) GetMaxChange

func (k KLineWindow) GetMaxChange() fixedpoint.Value

func (KLineWindow) GetOpen

func (k KLineWindow) GetOpen() fixedpoint.Value

func (KLineWindow) GetThickness

func (k KLineWindow) GetThickness() fixedpoint.Value

func (KLineWindow) GetTrend

func (k KLineWindow) GetTrend() int

func (KLineWindow) GetUpperShadowHeight

func (k KLineWindow) GetUpperShadowHeight() fixedpoint.Value

func (KLineWindow) GetUpperShadowRatio

func (k KLineWindow) GetUpperShadowRatio() fixedpoint.Value

func (*KLineWindow) High

func (k *KLineWindow) High() Series

func (KLineWindow) Last

func (k KLineWindow) Last() KLine

func (KLineWindow) Len

func (k KLineWindow) Len() int

func (*KLineWindow) Low

func (k *KLineWindow) Low() Series

func (KLineWindow) Mid

func (k KLineWindow) Mid() fixedpoint.Value

Mid price

func (*KLineWindow) Open

func (k *KLineWindow) Open() Series

func (KLineWindow) ReduceClose

func (k KLineWindow) ReduceClose() fixedpoint.Value

ReduceClose reduces the closed prices

func (KLineWindow) SlackAttachment

func (k KLineWindow) SlackAttachment() slack.Attachment

func (KLineWindow) Tail

func (k KLineWindow) Tail(size int) KLineWindow

func (KLineWindow) Take

func (k KLineWindow) Take(size int) KLineWindow

func (*KLineWindow) Truncate

func (k *KLineWindow) Truncate(size int)

Truncate removes the old klines from the window

func (*KLineWindow) Volume

func (k *KLineWindow) Volume() Series

type KValueType

type KValueType int

type LogisticRegressionModel

type LogisticRegressionModel struct {
	Weight       []float64
	Gradient     float64
	LearningRate float64
}

func LogisticRegression

func LogisticRegression(x []Series, y Series, lookback, iterations int, learningRate float64) *LogisticRegressionModel

func (*LogisticRegressionModel) Predict

func (l *LogisticRegressionModel) Predict(x []float64) float64

type LooseFormatTime

type LooseFormatTime time.Time

LooseFormatTime parses date time string with a wide range of formats.

func ParseLooseFormatTime

func ParseLooseFormatTime(s string) (LooseFormatTime, error)

func (LooseFormatTime) MarshalJSON

func (t LooseFormatTime) MarshalJSON() ([]byte, error)

func (LooseFormatTime) Time

func (t LooseFormatTime) Time() time.Time

func (*LooseFormatTime) UnmarshalJSON

func (t *LooseFormatTime) UnmarshalJSON(data []byte) error

func (*LooseFormatTime) UnmarshalYAML

func (t *LooseFormatTime) UnmarshalYAML(unmarshal func(interface{}) error) error

type MarginAccount

type MarginAccount struct {
	BorrowEnabled       bool              `json:"borrowEnabled"`
	MarginLevel         fixedpoint.Value  `json:"marginLevel"`
	TotalAssetOfBTC     fixedpoint.Value  `json:"totalAssetOfBtc"`
	TotalLiabilityOfBTC fixedpoint.Value  `json:"totalLiabilityOfBtc"`
	TotalNetAssetOfBTC  fixedpoint.Value  `json:"totalNetAssetOfBtc"`
	TradeEnabled        bool              `json:"tradeEnabled"`
	TransferEnabled     bool              `json:"transferEnabled"`
	UserAssets          []MarginUserAsset `json:"userAssets"`
}

MarginAccount is for the cross margin account

type MarginAccountInfo

type MarginAccountInfo struct {
	// Margin fields
	BorrowEnabled       bool             `json:"borrowEnabled"`
	MarginLevel         fixedpoint.Value `json:"marginLevel"`
	TotalAssetOfBTC     fixedpoint.Value `json:"totalAssetOfBtc"`
	TotalLiabilityOfBTC fixedpoint.Value `json:"totalLiabilityOfBtc"`
	TotalNetAssetOfBTC  fixedpoint.Value `json:"totalNetAssetOfBtc"`
	TradeEnabled        bool             `json:"tradeEnabled"`
	TransferEnabled     bool             `json:"transferEnabled"`
	Assets              MarginAssetMap   `json:"userAssets"`
}

type MarginAssetMap

type MarginAssetMap map[string]MarginUserAsset

type MarginBorrowRepayService

type MarginBorrowRepayService interface {
	RepayMarginAsset(ctx context.Context, asset string, amount fixedpoint.Value) error
	BorrowMarginAsset(ctx context.Context, asset string, amount fixedpoint.Value) error
	QueryMarginAssetMaxBorrowable(ctx context.Context, asset string) (amount fixedpoint.Value, err error)
}

MarginBorrowRepayService provides repay and borrow actions of an crypto exchange

type MarginExchange

type MarginExchange interface {
	UseMargin()
	UseIsolatedMargin(symbol string)
	GetMarginSettings() MarginSettings
}

type MarginHistory

type MarginHistory interface {
	QueryLoanHistory(ctx context.Context, asset string, startTime, endTime *time.Time) ([]MarginLoan, error)
	QueryRepayHistory(ctx context.Context, asset string, startTime, endTime *time.Time) ([]MarginRepay, error)
	QueryLiquidationHistory(ctx context.Context, startTime, endTime *time.Time) ([]MarginLiquidation, error)
	QueryInterestHistory(ctx context.Context, asset string, startTime, endTime *time.Time) ([]MarginInterest, error)
}

MarginHistory provides the service of querying loan history and repay history

type MarginInterest

type MarginInterest struct {
	GID            uint64           `json:"gid" db:"gid"`
	Exchange       ExchangeName     `json:"exchange" db:"exchange"`
	Asset          string           `json:"asset" db:"asset"`
	Principle      fixedpoint.Value `json:"principle" db:"principle"`
	Interest       fixedpoint.Value `json:"interest" db:"interest"`
	InterestRate   fixedpoint.Value `json:"interestRate" db:"interest_rate"`
	IsolatedSymbol string           `json:"isolatedSymbol" db:"isolated_symbol"`
	Time           Time             `json:"time" db:"time"`
}

type MarginLiquidation

type MarginLiquidation struct {
	GID              uint64           `json:"gid" db:"gid"`
	Exchange         ExchangeName     `json:"exchange" db:"exchange"`
	AveragePrice     fixedpoint.Value `json:"averagePrice" db:"average_price"`
	ExecutedQuantity fixedpoint.Value `json:"executedQuantity" db:"executed_quantity"`
	OrderID          uint64           `json:"orderID" db:"order_id"`
	Price            fixedpoint.Value `json:"price" db:"price"`
	Quantity         fixedpoint.Value `json:"quantity" db:"quantity"`
	Side             SideType         `json:"side" db:"side"`
	Symbol           string           `json:"symbol" db:"symbol"`
	TimeInForce      TimeInForce      `json:"timeInForce" db:"time_in_force"`
	IsIsolated       bool             `json:"isIsolated" db:"is_isolated"`
	UpdatedTime      Time             `json:"updatedTime" db:"time"`
}

type MarginLoan

type MarginLoan struct {
	GID            uint64           `json:"gid" db:"gid"`
	Exchange       ExchangeName     `json:"exchange" db:"exchange"`
	TransactionID  uint64           `json:"transactionID" db:"transaction_id"`
	Asset          string           `json:"asset" db:"asset"`
	Principle      fixedpoint.Value `json:"principle" db:"principle"`
	Time           Time             `json:"time" db:"time"`
	IsolatedSymbol string           `json:"isolatedSymbol" db:"isolated_symbol"`
}

type MarginOrderSideEffectType

type MarginOrderSideEffectType string

MarginOrderSideEffectType define side effect type for orders

var (
	SideEffectTypeNoSideEffect MarginOrderSideEffectType = "NO_SIDE_EFFECT"
	SideEffectTypeMarginBuy    MarginOrderSideEffectType = "MARGIN_BUY"
	SideEffectTypeAutoRepay    MarginOrderSideEffectType = "AUTO_REPAY"
)

func (*MarginOrderSideEffectType) UnmarshalJSON

func (t *MarginOrderSideEffectType) UnmarshalJSON(data []byte) error

type MarginRepay

type MarginRepay struct {
	GID            uint64           `json:"gid" db:"gid"`
	Exchange       ExchangeName     `json:"exchange" db:"exchange"`
	TransactionID  uint64           `json:"transactionID" db:"transaction_id"`
	Asset          string           `json:"asset" db:"asset"`
	Principle      fixedpoint.Value `json:"principle" db:"principle"`
	Time           Time             `json:"time" db:"time"`
	IsolatedSymbol string           `json:"isolatedSymbol" db:"isolated_symbol"`
}

type MarginSettings

type MarginSettings struct {
	IsMargin             bool
	IsIsolatedMargin     bool
	IsolatedMarginSymbol string
}

func (MarginSettings) GetMarginSettings

func (e MarginSettings) GetMarginSettings() MarginSettings

func (*MarginSettings) UseIsolatedMargin

func (e *MarginSettings) UseIsolatedMargin(symbol string)

func (*MarginSettings) UseMargin

func (e *MarginSettings) UseMargin()

type MarginUserAsset

type MarginUserAsset struct {
	Asset    string           `json:"asset"`
	Borrowed fixedpoint.Value `json:"borrowed"`
	Free     fixedpoint.Value `json:"free"`
	Interest fixedpoint.Value `json:"interest"`
	Locked   fixedpoint.Value `json:"locked"`
	NetAsset fixedpoint.Value `json:"netAsset"`
}

MarginUserAsset define user assets of margin account

type Market

type Market struct {
	Symbol string `json:"symbol"`

	// LocalSymbol is used for exchange's API (exchange package internal)
	LocalSymbol string `json:"localSymbol,omitempty"`

	// PricePrecision is the precision used for formatting price, 8 = 8 decimals
	// can be converted from price tick step size, e.g.
	//    int(math.Log10(price step size))
	PricePrecision int `json:"pricePrecision"`

	// VolumePrecision is the precision used for formatting quantity and volume, 8 = 8 decimals
	// can be converted from step size, e.g.
	//    int(math.Log10(quantity step size))
	VolumePrecision int `json:"volumePrecision"`

	// QuoteCurrency is the currency name for quote, e.g. USDT in BTC/USDT, USDC in BTC/USDC
	QuoteCurrency string `json:"quoteCurrency"`

	// BaseCurrency is the current name for base, e.g. BTC in BTC/USDT, ETH in ETH/USDC
	BaseCurrency string `json:"baseCurrency"`

	// The MIN_NOTIONAL filter defines the minimum notional value allowed for an order on a symbol.
	// An order's notional value is the price * quantity
	MinNotional fixedpoint.Value `json:"minNotional,omitempty"`
	MinAmount   fixedpoint.Value `json:"minAmount,omitempty"`

	// The LOT_SIZE filter defines the quantity
	MinQuantity fixedpoint.Value `json:"minQuantity,omitempty"`

	// MaxQuantity is currently not used in the code
	MaxQuantity fixedpoint.Value `json:"maxQuantity,omitempty"`

	// StepSize is the step size of quantity
	// can be converted from precision, e.g.
	//    1.0 / math.Pow10(m.BaseUnitPrecision)
	StepSize fixedpoint.Value `json:"stepSize,omitempty"`

	MinPrice fixedpoint.Value `json:"minPrice,omitempty"`
	MaxPrice fixedpoint.Value `json:"maxPrice,omitempty"`

	// TickSize is the step size of price
	TickSize fixedpoint.Value `json:"tickSize,omitempty"`

	CtVal fixedpoint.Value `json:"ctVal,omitempty"`
}

func (Market) BaseCurrencyFormatter

func (m Market) BaseCurrencyFormatter() *accounting.Accounting

func (Market) CanonicalizeVolume

func (m Market) CanonicalizeVolume(val fixedpoint.Value) float64

func (Market) FormatPrice

func (m Market) FormatPrice(val fixedpoint.Value) string

func (Market) FormatPriceCurrency

func (m Market) FormatPriceCurrency(val fixedpoint.Value) string

func (Market) FormatQuantity

func (m Market) FormatQuantity(val fixedpoint.Value) string

func (Market) FormatVolume

func (m Market) FormatVolume(val fixedpoint.Value) string

func (Market) IsDustQuantity

func (m Market) IsDustQuantity(quantity, price fixedpoint.Value) bool

func (Market) QuoteCurrencyFormatter

func (m Market) QuoteCurrencyFormatter() *accounting.Accounting

func (Market) TruncatePrice

func (m Market) TruncatePrice(price fixedpoint.Value) fixedpoint.Value

func (Market) TruncateQuantity

func (m Market) TruncateQuantity(quantity fixedpoint.Value) fixedpoint.Value

TruncateQuantity uses the step size to truncate floating number, in order to avoid the rounding issue

type MarketMap

type MarketMap map[string]Market

func (MarketMap) Add

func (m MarketMap) Add(market Market)

type MillisecondTimestamp

type MillisecondTimestamp time.Time

func MustParseMillisecondTimestamp

func MustParseMillisecondTimestamp(a string) MillisecondTimestamp

func NewMillisecondTimestampFromInt

func NewMillisecondTimestampFromInt(i int64) MillisecondTimestamp

func (MillisecondTimestamp) String

func (t MillisecondTimestamp) String() string

func (MillisecondTimestamp) Time

func (t MillisecondTimestamp) Time() time.Time

func (*MillisecondTimestamp) UnmarshalJSON

func (t *MillisecondTimestamp) UnmarshalJSON(data []byte) error

type MinusSeriesResult

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

func (*MinusSeriesResult) Index

func (a *MinusSeriesResult) Index(i int) float64

func (*MinusSeriesResult) Last

func (a *MinusSeriesResult) Last() float64

func (*MinusSeriesResult) Length

func (a *MinusSeriesResult) Length() int

type MulSeriesResult

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

func (*MulSeriesResult) Index

func (a *MulSeriesResult) Index(i int) float64

func (*MulSeriesResult) Last

func (a *MulSeriesResult) Last() float64

func (*MulSeriesResult) Length

func (a *MulSeriesResult) Length() int

type MutexOrderBook

type MutexOrderBook struct {
	sync.Mutex

	Symbol    string
	OrderBook OrderBook
}

func NewMutexOrderBook

func NewMutexOrderBook(symbol string) *MutexOrderBook

func (*MutexOrderBook) BestAsk

func (b *MutexOrderBook) BestAsk() (pv PriceVolume, ok bool)

func (*MutexOrderBook) BestBid

func (b *MutexOrderBook) BestBid() (pv PriceVolume, ok bool)

func (*MutexOrderBook) BestBidAndAsk

func (b *MutexOrderBook) BestBidAndAsk() (bid, ask PriceVolume, ok bool)

func (*MutexOrderBook) Copy

func (b *MutexOrderBook) Copy() OrderBook

func (*MutexOrderBook) CopyDepth

func (b *MutexOrderBook) CopyDepth(depth int) OrderBook

func (*MutexOrderBook) IsValid

func (b *MutexOrderBook) IsValid() (ok bool, err error)

func (*MutexOrderBook) LastUpdateTime

func (b *MutexOrderBook) LastUpdateTime() time.Time

func (*MutexOrderBook) Load

func (b *MutexOrderBook) Load(book SliceOrderBook)

func (*MutexOrderBook) Reset

func (b *MutexOrderBook) Reset()

func (*MutexOrderBook) Update

func (b *MutexOrderBook) Update(update SliceOrderBook)

type NanosecondTimestamp

type NanosecondTimestamp time.Time

func (NanosecondTimestamp) Time

func (t NanosecondTimestamp) Time() time.Time

func (*NanosecondTimestamp) UnmarshalJSON

func (t *NanosecondTimestamp) UnmarshalJSON(data []byte) error

type NumberSeries

type NumberSeries float64

func (NumberSeries) Clone

func (a NumberSeries) Clone() NumberSeries

func (NumberSeries) Index

func (a NumberSeries) Index(_ int) float64

func (NumberSeries) Last

func (a NumberSeries) Last() float64

func (NumberSeries) Length

func (a NumberSeries) Length() int

type Order

type Order struct {
	SubmitOrder

	Exchange ExchangeName `json:"exchange" db:"exchange"`

	// GID is used for relational database storage, it's an incremental ID
	GID     uint64 `json:"gid" db:"gid"`
	OrderID uint64 `json:"orderID" db:"order_id"` // order id
	UUID    string `json:"uuid,omitempty"`

	Status           OrderStatus      `json:"status" db:"status"`
	ExecutedQuantity fixedpoint.Value `json:"executedQuantity" db:"executed_quantity"`
	IsWorking        bool             `json:"isWorking" db:"is_working"`
	CreationTime     Time             `json:"creationTime" db:"created_at"`
	UpdateTime       Time             `json:"updateTime" db:"updated_at"`

	IsFutures  bool `json:"isFutures" db:"is_futures"`
	IsMargin   bool `json:"isMargin" db:"is_margin"`
	IsIsolated bool `json:"isIsolated" db:"is_isolated"`
}

func OrdersFilled

func OrdersFilled(in []Order) (out []Order)

func SortOrdersAscending

func SortOrdersAscending(orders []Order) []Order

SortOrdersAscending sorts by creation time ascending-ly

func SortOrdersUpdateTimeAscending

func SortOrdersUpdateTimeAscending(orders []Order) []Order

SortOrdersAscending sorts by update time ascending-ly

func (Order) Backup

func (o Order) Backup() SubmitOrder

Backup backs up the current order quantity to a SubmitOrder object so that we can post the order later when we want to restore the orders.

func (Order) CsvHeader

func (o Order) CsvHeader() []string

func (Order) CsvRecords

func (o Order) CsvRecords() [][]string

func (Order) PlainText

func (o Order) PlainText() string

PlainText is used for telegram-styled messages

func (Order) SlackAttachment

func (o Order) SlackAttachment() slack.Attachment

func (Order) String

func (o Order) String() string

type OrderBook

type OrderBook interface {
	Spread() (fixedpoint.Value, bool)
	BestAsk() (PriceVolume, bool)
	BestBid() (PriceVolume, bool)
	LastUpdateTime() time.Time
	Reset()
	Load(book SliceOrderBook)
	Update(book SliceOrderBook)
	Copy() OrderBook
	SideBook(sideType SideType) PriceVolumeSlice
	CopyDepth(depth int) OrderBook
	IsValid() (bool, error)
}

type OrderError

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

func (*OrderError) Error

func (e *OrderError) Error() string

func (*OrderError) Order

func (e *OrderError) Order() Order

type OrderMap

type OrderMap map[uint64]Order

OrderMap is used for storing orders by their order id

func (OrderMap) Add

func (m OrderMap) Add(o Order)

Add the order the the map

func (OrderMap) Backup

func (m OrderMap) Backup() (orderForms []SubmitOrder)

func (OrderMap) Canceled

func (m OrderMap) Canceled() OrderSlice

func (OrderMap) Exists

func (m OrderMap) Exists(orderID uint64) bool

func (OrderMap) Filled

func (m OrderMap) Filled() OrderSlice

func (OrderMap) FindByStatus

func (m OrderMap) FindByStatus(status OrderStatus) (orders OrderSlice)

func (OrderMap) Get

func (m OrderMap) Get(orderID uint64) (Order, bool)

func (OrderMap) IDs

func (m OrderMap) IDs() (ids []uint64)

func (OrderMap) Lookup

func (m OrderMap) Lookup(f func(o Order) bool) *Order

func (OrderMap) Orders

func (m OrderMap) Orders() (orders OrderSlice)

func (OrderMap) Remove

func (m OrderMap) Remove(orderID uint64)

func (OrderMap) Update

func (m OrderMap) Update(o Order)

Update only updates the order when the order ID exists in the map

type OrderQuery

type OrderQuery struct {
	Symbol        string
	OrderID       string
	ClientOrderID string
}

type OrderSlice

type OrderSlice []Order

type OrderStatus

type OrderStatus string
const (
	// OrderStatusNew means the order is active on the orderbook without any filling.
	OrderStatusNew OrderStatus = "NEW"

	// OrderStatusFilled means the order is fully-filled, it's an end state.
	OrderStatusFilled OrderStatus = "FILLED"

	// OrderStatusPartiallyFilled means the order is partially-filled, it's an end state, the order might be canceled in the end.
	OrderStatusPartiallyFilled OrderStatus = "PARTIALLY_FILLED"

	// OrderStatusCanceled means the order is canceled without partially filled or filled.
	OrderStatusCanceled OrderStatus = "CANCELED"

	// OrderStatusRejected means the order is not placed successfully, it's rejected by the api
	OrderStatusRejected OrderStatus = "REJECTED"
)

type OrderType

type OrderType string

OrderType define order type

const (
	OrderTypeLimit            OrderType = "LIMIT"
	OrderTypeLimitMaker       OrderType = "LIMIT_MAKER"
	OrderTypeMarket           OrderType = "MARKET"
	OrderTypeStopLimit        OrderType = "STOP_LIMIT"
	OrderTypeStopMarket       OrderType = "STOP_MARKET"
	OrderTypeTakeProfitLimit  OrderType = "TAKE_PROFIT_LIMIT"
	OrderTypeTakeProfitMarket OrderType = "TAKE_PROFIT_MARKET"
)

type PCA

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

func (*PCA) Fit

func (pca *PCA) Fit(x []SeriesExtend, lookback int) error

func (*PCA) FitTransform

func (pca *PCA) FitTransform(x []SeriesExtend, lookback, feature int) ([]SeriesExtend, error)

func (*PCA) Transform

func (pca *PCA) Transform(x []SeriesExtend, lookback int, features int) (result []SeriesExtend)

type Parser

type Parser func(message []byte) (interface{}, error)

type PercentageChangeResult

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

func (*PercentageChangeResult) Index

func (c *PercentageChangeResult) Index(i int) float64

func (*PercentageChangeResult) Last

func (c *PercentageChangeResult) Last() float64

func (*PercentageChangeResult) Length

func (c *PercentageChangeResult) Length() int

type PlainText

type PlainText interface {
	PlainText() string
}

type Position

type Position struct {
	Symbol        string `json:"symbol" db:"symbol"`
	BaseCurrency  string `json:"baseCurrency" db:"base"`
	QuoteCurrency string `json:"quoteCurrency" db:"quote"`

	Market Market `json:"market,omitempty"`

	Base        fixedpoint.Value `json:"base" db:"base"`
	Quote       fixedpoint.Value `json:"quote" db:"quote"`
	AverageCost fixedpoint.Value `json:"averageCost" db:"average_cost"`

	// ApproximateAverageCost adds the computed fee in quote in the average cost
	// This is used for calculating net profit
	ApproximateAverageCost fixedpoint.Value `json:"approximateAverageCost"`

	FeeRate          *ExchangeFee                 `json:"feeRate,omitempty"`
	ExchangeFeeRates map[ExchangeName]ExchangeFee `json:"exchangeFeeRates"`

	// TotalFee stores the fee currency -> total fee quantity
	TotalFee map[string]fixedpoint.Value `json:"totalFee" db:"-"`

	OpenedAt  time.Time `json:"openedAt,omitempty" db:"-"`
	ChangedAt time.Time `json:"changedAt,omitempty" db:"changed_at"`

	Strategy           string `json:"strategy,omitempty" db:"strategy"`
	StrategyInstanceID string `json:"strategyInstanceID,omitempty" db:"strategy_instance_id"`

	AccumulatedProfit fixedpoint.Value `json:"accumulatedProfit,omitempty" db:"accumulated_profit"`

	sync.Mutex
	// contains filtered or unexported fields
}

func NewPosition

func NewPosition(symbol, base, quote string) *Position

func NewPositionFromMarket

func NewPositionFromMarket(market Market) *Position

func (*Position) AddTrade

func (p *Position) AddTrade(td Trade) (profit fixedpoint.Value, netProfit fixedpoint.Value, madeProfit bool)

func (*Position) AddTrades

func (p *Position) AddTrades(trades []Trade) (fixedpoint.Value, fixedpoint.Value, bool)

func (*Position) BindStream

func (p *Position) BindStream(stream Stream)

func (*Position) CsvHeader

func (p *Position) CsvHeader() []string

func (*Position) CsvRecords

func (p *Position) CsvRecords() [][]string

func (*Position) EmitModify

func (p *Position) EmitModify(baseQty fixedpoint.Value, quoteQty fixedpoint.Value, price fixedpoint.Value)

func (*Position) GetBase

func (p *Position) GetBase() (base fixedpoint.Value)

GetBase locks the mutex and return the base quantity The base quantity can be negative

func (*Position) GetQuantity

func (p *Position) GetQuantity() fixedpoint.Value

func (*Position) IsClosed

func (p *Position) IsClosed() bool

func (*Position) IsDust

func (p *Position) IsDust(price fixedpoint.Value) bool

func (*Position) IsLong

func (p *Position) IsLong() bool

func (*Position) IsOpened

func (p *Position) IsOpened(currentPrice fixedpoint.Value) bool

func (*Position) IsShort

func (p *Position) IsShort() bool

func (*Position) ModifyAverageCost

func (p *Position) ModifyAverageCost(price fixedpoint.Value) error

ModifyAverageCost modifies position average cost with `price`

func (*Position) ModifyBase

func (p *Position) ModifyBase(qty fixedpoint.Value) error

ModifyBase modifies position base quantity with `qty`

func (*Position) ModifyQuote

func (p *Position) ModifyQuote(qty fixedpoint.Value) error

ModifyQuote modifies position quote quantity with `qty`

func (*Position) NewMarketCloseOrder

func (p *Position) NewMarketCloseOrder(percentage fixedpoint.Value) *SubmitOrder

func (*Position) NewProfit

func (p *Position) NewProfit(trade Trade, profit, netProfit fixedpoint.Value) Profit

NewProfit generates the profit object from the current position

func (*Position) OnModify

func (p *Position) OnModify(cb func(baseQty fixedpoint.Value, quoteQty fixedpoint.Value, price fixedpoint.Value))

func (*Position) PlainText

func (p *Position) PlainText() (msg string)

func (*Position) ROI

func (p *Position) ROI(price fixedpoint.Value) fixedpoint.Value

ROI -- Return on investment (ROI) is a performance measure used to evaluate the efficiency or profitability of an investment or compare the efficiency of a number of different investments. ROI tries to directly measure the amount of return on a particular investment, relative to the investment's cost.

func (*Position) Reset

func (p *Position) Reset()

func (*Position) SetExchangeFeeRate

func (p *Position) SetExchangeFeeRate(ex ExchangeName, exchangeFee ExchangeFee)

func (*Position) SetFeeRate

func (p *Position) SetFeeRate(exchangeFee ExchangeFee)

func (*Position) SlackAttachment

func (p *Position) SlackAttachment() slack.Attachment

func (*Position) String

func (p *Position) String() string

func (*Position) Type

func (p *Position) Type() PositionType

func (*Position) UnrealizedProfit

func (p *Position) UnrealizedProfit(price fixedpoint.Value) fixedpoint.Value

type PositionMap

type PositionMap map[string]Position

type PositionRisk

type PositionRisk struct {
	Leverage         fixedpoint.Value `json:"leverage"`
	LiquidationPrice fixedpoint.Value `json:"liquidationPrice"`
}

type PositionType

type PositionType string

type Positions

type Positions struct {
	Id               int    `json:"id"`
	Symbol           string `json:"symbol"`
	PositionAmt      string `json:"positionAmt"`
	EntryPrice       string `json:"entryPrice"`
	MarkPrice        string `json:"markPrice"`
	UnRealizedProfit string `json:"unRealizedProfit"`
	LiquidationPrice string `json:"liquidationPrice"`
	Leverage         string `json:"leverage"`
	MaxNotionalValue string `json:"maxNotionalValue"`
	MarginType       string `json:"marginType"`
	IsolatedMargin   string `json:"isolatedMargin"`
	IsAutoAddMargin  string `json:"isAutoAddMargin"`
	PositionSide     string `json:"positionSide"`
	Notional         string `json:"notional"`
	IsolatedWallet   string `json:"isolatedWallet"`
	UpdateTime       int64  `json:"updateTime"`
}

type PremiumIndex

type PremiumIndex struct {
	Symbol          string           `json:"symbol"`
	MarkPrice       fixedpoint.Value `json:"markPrice"`
	LastFundingRate fixedpoint.Value `json:"lastFundingRate"`
	NextFundingTime time.Time        `json:"nextFundingTime"`
	Time            time.Time        `json:"time"`
}

type PriceHeartBeat

type PriceHeartBeat struct {
	PriceVolume PriceVolume
	LastTime    time.Time
}

PriceHeartBeat is used for monitoring the price volume update.

func (*PriceHeartBeat) Update

func (b *PriceHeartBeat) Update(pv PriceVolume, timeout time.Duration) (bool, error)

Update updates the price volume object and the last update time It returns (bool, error), when the price is successfully updated, it returns true. If the price is not updated (same price) and the last time exceeded the timeout, Then false, and an error will be returned

type PriceMap

type PriceMap map[string]fixedpoint.Value

type PriceVolume

type PriceVolume struct {
	Price, Volume fixedpoint.Value
}

func (PriceVolume) String

func (p PriceVolume) String() string

type PriceVolumeSlice

type PriceVolumeSlice []PriceVolume

func ParsePriceVolumeSliceJSON

func ParsePriceVolumeSliceJSON(b []byte) (slice PriceVolumeSlice, err error)

ParsePriceVolumeSliceJSON tries to parse a 2 dimensional string array into a PriceVolumeSlice

[["9000", "10"], ["9900", "10"], ... ]

func (PriceVolumeSlice) Copy

func (slice PriceVolumeSlice) Copy() PriceVolumeSlice

func (PriceVolumeSlice) CopyDepth

func (slice PriceVolumeSlice) CopyDepth(depth int) PriceVolumeSlice

func (PriceVolumeSlice) Find

func (slice PriceVolumeSlice) Find(price fixedpoint.Value, descending bool) (pv PriceVolume, idx int)

Find finds the pair by the given price, this function is a read-only operation, so we use the value receiver to avoid copy value from the pointer If the price is not found, it will return the index where the price can be inserted at. true for descending (bid orders), false for ascending (ask orders)

func (PriceVolumeSlice) First

func (slice PriceVolumeSlice) First() (PriceVolume, bool)

func (PriceVolumeSlice) IndexByVolumeDepth

func (slice PriceVolumeSlice) IndexByVolumeDepth(requiredVolume fixedpoint.Value) int

func (PriceVolumeSlice) InsertAt

func (slice PriceVolumeSlice) InsertAt(idx int, pv PriceVolume) PriceVolumeSlice

func (PriceVolumeSlice) Len

func (slice PriceVolumeSlice) Len() int

func (PriceVolumeSlice) Less

func (slice PriceVolumeSlice) Less(i, j int) bool

func (PriceVolumeSlice) Remove

func (slice PriceVolumeSlice) Remove(price fixedpoint.Value, descending bool) PriceVolumeSlice

func (PriceVolumeSlice) Second

func (slice PriceVolumeSlice) Second() (PriceVolume, bool)

func (PriceVolumeSlice) Swap

func (slice PriceVolumeSlice) Swap(i, j int)

func (PriceVolumeSlice) Trim

func (slice PriceVolumeSlice) Trim() (pvs PriceVolumeSlice)

Trim removes the pairs that volume = 0

func (*PriceVolumeSlice) UnmarshalJSON

func (slice *PriceVolumeSlice) UnmarshalJSON(b []byte) error

func (PriceVolumeSlice) Upsert

func (slice PriceVolumeSlice) Upsert(pv PriceVolume, descending bool) PriceVolumeSlice

type Profit

type Profit struct {
	// --- position related fields
	// -------------------------------------------
	// Symbol is the symbol of the position
	Symbol        string           `json:"symbol"`
	QuoteCurrency string           `json:"quoteCurrency" db:"quote_currency"`
	BaseCurrency  string           `json:"baseCurrency" db:"base_currency"`
	AverageCost   fixedpoint.Value `json:"averageCost" db:"average_cost"`

	// profit related fields
	// -------------------------------------------
	// Profit is the profit of this trade made. negative profit means loss.
	Profit fixedpoint.Value `json:"profit" db:"profit"`

	// NetProfit is (profit - trading fee)
	NetProfit fixedpoint.Value `json:"netProfit" db:"net_profit"`

	// ProfitMargin is a percentage of the profit and the capital amount
	ProfitMargin fixedpoint.Value `json:"profitMargin" db:"profit_margin"`

	// NetProfitMargin is a percentage of the net profit and the capital amount
	NetProfitMargin fixedpoint.Value `json:"netProfitMargin" db:"net_profit_margin"`

	// trade related fields
	// --------------------------------------------
	// TradeID is the exchange trade id of that trade
	Trade         *Trade           `json:"trade,omitempty" db:"-"`
	TradeID       uint64           `json:"tradeID" db:"trade_id"`
	OrderID       uint64           `json:"orderID,omitempty"`
	Side          SideType         `json:"side" db:"side"`
	IsBuyer       bool             `json:"isBuyer" db:"is_buyer"`
	IsMaker       bool             `json:"isMaker" db:"is_maker"`
	Price         fixedpoint.Value `json:"price" db:"price"`
	Quantity      fixedpoint.Value `json:"quantity" db:"quantity"`
	QuoteQuantity fixedpoint.Value `json:"quoteQuantity" db:"quote_quantity"`

	// FeeInUSD is the summed fee of this profit,
	// you will need to convert the trade fee into USD since the fee currencies can be different.
	FeeInUSD    fixedpoint.Value `json:"feeInUSD" db:"fee_in_usd"`
	Fee         fixedpoint.Value `json:"fee" db:"fee"`
	FeeCurrency string           `json:"feeCurrency" db:"fee_currency"`
	Exchange    ExchangeName     `json:"exchange" db:"exchange"`
	IsMargin    bool             `json:"isMargin" db:"is_margin"`
	IsFutures   bool             `json:"isFutures" db:"is_futures"`
	IsIsolated  bool             `json:"isIsolated" db:"is_isolated"`
	TradedAt    time.Time        `json:"tradedAt" db:"traded_at"`

	PositionOpenedAt time.Time `json:"positionOpenedAt" db:"-"`

	// strategy related fields
	Strategy           string `json:"strategy" db:"strategy"`
	StrategyInstanceID string `json:"strategyInstanceID" db:"strategy_instance_id"`
}

Profit struct stores the PnL information

func (*Profit) PlainText

func (p *Profit) PlainText() string

func (*Profit) SlackAttachment

func (p *Profit) SlackAttachment() slack.Attachment

type ProfitReport

type ProfitReport struct {
	StartTime time.Time `json:"startTime"`
	Profit    float64   `json:"profit"`
	Interval  Interval  `json:"interval"`
}

func (ProfitReport) String

func (s ProfitReport) String() string

type ProfitStats

type ProfitStats struct {
	Symbol        string `json:"symbol"`
	QuoteCurrency string `json:"quoteCurrency"`
	BaseCurrency  string `json:"baseCurrency"`

	AccumulatedPnL         fixedpoint.Value `json:"accumulatedPnL,omitempty"`
	AccumulatedNetProfit   fixedpoint.Value `json:"accumulatedNetProfit,omitempty"`
	AccumulatedGrossProfit fixedpoint.Value `json:"accumulatedGrossProfit,omitempty"`
	AccumulatedGrossLoss   fixedpoint.Value `json:"accumulatedGrossLoss,omitempty"`
	AccumulatedVolume      fixedpoint.Value `json:"accumulatedVolume,omitempty"`
	AccumulatedSince       int64            `json:"accumulatedSince,omitempty"`

	TodayPnL         fixedpoint.Value `json:"todayPnL,omitempty"`
	TodayNetProfit   fixedpoint.Value `json:"todayNetProfit,omitempty"`
	TodayGrossProfit fixedpoint.Value `json:"todayGrossProfit,omitempty"`
	TodayGrossLoss   fixedpoint.Value `json:"todayGrossLoss,omitempty"`
	TodaySince       int64            `json:"todaySince,omitempty"`
}

func NewProfitStats

func NewProfitStats(market Market) *ProfitStats

func (*ProfitStats) AddProfit

func (s *ProfitStats) AddProfit(profit Profit)

func (*ProfitStats) AddTrade

func (s *ProfitStats) AddTrade(trade Trade)

func (*ProfitStats) Init

func (s *ProfitStats) Init(market Market)

Init Deprecated: use NewProfitStats instead

func (*ProfitStats) IsOver24Hours

func (s *ProfitStats) IsOver24Hours() bool

IsOver24Hours checks if the since time is over 24 hours

func (*ProfitStats) PlainText

func (s *ProfitStats) PlainText() string

func (*ProfitStats) ResetToday

func (s *ProfitStats) ResetToday(t time.Time)

func (*ProfitStats) SlackAttachment

func (s *ProfitStats) SlackAttachment() slack.Attachment

type Queue

type Queue struct {
	SeriesBase
	// contains filtered or unexported fields
}

Super basic Series type that simply holds the float64 data with size limit (the only difference compare to float64slice)

func NewQueue

func NewQueue(size int) *Queue

func (*Queue) Clone

func (inc *Queue) Clone() *Queue

func (*Queue) Index

func (inc *Queue) Index(i int) float64

func (*Queue) Last

func (inc *Queue) Last() float64

func (*Queue) Length

func (inc *Queue) Length() int

func (*Queue) Update

func (inc *Queue) Update(v float64)

type RBNode

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

RBNode A red node always has black children. A black node may have red or black children

func NewNil

func NewNil() *RBNode

type RBTOrderBook

type RBTOrderBook struct {
	Symbol string
	Bids   *RBTree
	Asks   *RBTree
	// contains filtered or unexported fields
}

func NewRBOrderBook

func NewRBOrderBook(symbol string) *RBTOrderBook

func (*RBTOrderBook) BestAsk

func (b *RBTOrderBook) BestAsk() (PriceVolume, bool)

func (*RBTOrderBook) BestBid

func (b *RBTOrderBook) BestBid() (PriceVolume, bool)

func (*RBTOrderBook) Copy

func (b *RBTOrderBook) Copy() OrderBook

func (*RBTOrderBook) CopyDepth

func (b *RBTOrderBook) CopyDepth(limit int) OrderBook

func (*RBTOrderBook) EmitLoad

func (b *RBTOrderBook) EmitLoad(book *RBTOrderBook)

func (*RBTOrderBook) EmitUpdate

func (b *RBTOrderBook) EmitUpdate(book *RBTOrderBook)

func (*RBTOrderBook) IsValid

func (b *RBTOrderBook) IsValid() (bool, error)

func (*RBTOrderBook) LastUpdateTime

func (b *RBTOrderBook) LastUpdateTime() time.Time

func (*RBTOrderBook) Load

func (b *RBTOrderBook) Load(book SliceOrderBook)

func (*RBTOrderBook) OnLoad

func (b *RBTOrderBook) OnLoad(cb func(book *RBTOrderBook))

func (*RBTOrderBook) OnUpdate

func (b *RBTOrderBook) OnUpdate(cb func(book *RBTOrderBook))

func (*RBTOrderBook) Print

func (b *RBTOrderBook) Print()

func (*RBTOrderBook) Reset

func (b *RBTOrderBook) Reset()

func (*RBTOrderBook) SideBook

func (b *RBTOrderBook) SideBook(sideType SideType) PriceVolumeSlice

func (*RBTOrderBook) Spread

func (b *RBTOrderBook) Spread() (fixedpoint.Value, bool)

func (*RBTOrderBook) Update

func (b *RBTOrderBook) Update(book SliceOrderBook)

type RBTree

type RBTree struct {
	Root *RBNode
	// contains filtered or unexported fields
}

func NewRBTree

func NewRBTree() *RBTree

func (*RBTree) CopyInorder

func (tree *RBTree) CopyInorder(limit int) *RBTree

func (*RBTree) CopyInorderReverse

func (tree *RBTree) CopyInorderReverse(limit int) *RBTree

func (*RBTree) Delete

func (tree *RBTree) Delete(key fixedpoint.Value) bool

func (*RBTree) DeleteFixup

func (tree *RBTree) DeleteFixup(current *RBNode)

func (*RBTree) Inorder

func (tree *RBTree) Inorder(cb func(n *RBNode) bool)

Inorder traverses the tree in ascending order

func (*RBTree) InorderOf

func (tree *RBTree) InorderOf(current *RBNode, cb func(n *RBNode) bool)

func (*RBTree) InorderReverse

func (tree *RBTree) InorderReverse(cb func(n *RBNode) bool)

InorderReverse traverses the tree in descending order

func (*RBTree) InorderReverseOf

func (tree *RBTree) InorderReverseOf(current *RBNode, cb func(n *RBNode) bool)

func (*RBTree) Insert

func (tree *RBTree) Insert(key, val fixedpoint.Value)

func (*RBTree) InsertFixup

func (tree *RBTree) InsertFixup(current *RBNode)

func (*RBTree) Leftmost

func (tree *RBTree) Leftmost() *RBNode

func (*RBTree) LeftmostOf

func (tree *RBTree) LeftmostOf(current *RBNode) *RBNode

func (*RBTree) Postorder

func (tree *RBTree) Postorder(cb func(n *RBNode) bool)

func (*RBTree) PostorderOf

func (tree *RBTree) PostorderOf(current *RBNode, cb func(n *RBNode) bool)

func (*RBTree) Preorder

func (tree *RBTree) Preorder(cb func(n *RBNode))

func (*RBTree) PreorderOf

func (tree *RBTree) PreorderOf(current *RBNode, cb func(n *RBNode))

func (*RBTree) Print

func (tree *RBTree) Print()

func (*RBTree) Rightmost

func (tree *RBTree) Rightmost() *RBNode

func (*RBTree) RightmostOf

func (tree *RBTree) RightmostOf(current *RBNode) *RBNode

func (*RBTree) RotateLeft

func (tree *RBTree) RotateLeft(x *RBNode)

RotateLeft x is the axes of rotation, y is the node that will be replace x's position. we need to: 1. move y's left child to the x's right child 2. change y's parent to x's parent 3. change x's parent to y

func (*RBTree) RotateRight

func (tree *RBTree) RotateRight(y *RBNode)

func (*RBTree) Search

func (tree *RBTree) Search(key fixedpoint.Value) *RBNode

func (*RBTree) Size

func (tree *RBTree) Size() int

func (*RBTree) Successor

func (tree *RBTree) Successor(current *RBNode) *RBNode

func (*RBTree) Upsert

func (tree *RBTree) Upsert(key, val fixedpoint.Value)

type Reward

type Reward struct {
	GID       int64            `json:"gid" db:"gid"`
	UUID      string           `json:"uuid" db:"uuid"`
	Exchange  ExchangeName     `json:"exchange" db:"exchange"`
	Type      RewardType       `json:"reward_type" db:"reward_type"`
	Currency  string           `json:"currency" db:"currency"`
	Quantity  fixedpoint.Value `json:"quantity" db:"quantity"`
	State     string           `json:"state" db:"state"`
	Note      string           `json:"note" db:"note"`
	Spent     bool             `json:"spent" db:"spent"`
	CreatedAt Time             `json:"created_at" db:"created_at"`
}

func (Reward) String

func (r Reward) String() (s string)

type RewardSlice

type RewardSlice []Reward

func (RewardSlice) Len

func (s RewardSlice) Len() int

func (RewardSlice) Swap

func (s RewardSlice) Swap(i, j int)

type RewardSliceByCreationTime

type RewardSliceByCreationTime RewardSlice

func (RewardSliceByCreationTime) Len

func (RewardSliceByCreationTime) Less

func (s RewardSliceByCreationTime) Less(i, j int) bool

Less reports whether x[i] should be ordered before x[j]

func (RewardSliceByCreationTime) Swap

func (s RewardSliceByCreationTime) Swap(i, j int)

type RewardType

type RewardType string

type RollingResult

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

func Rolling

func Rolling(a Series, window int) *RollingResult

func (*RollingResult) Index

func (r *RollingResult) Index(i int) SeriesExtend

func (*RollingResult) Last

func (r *RollingResult) Last() SeriesExtend

func (*RollingResult) Length

func (r *RollingResult) Length() int

type Series

type Series interface {
	Last() float64
	Index(int) float64
	Length() int
}

The interface maps to pinescript basic type `series` Access the internal historical data from the latest to the oldest Index(0) always maps to Last()

type SeriesBase

type SeriesBase struct {
	Series
}

func (*SeriesBase) Abs

func (s *SeriesBase) Abs() SeriesExtend

func (*SeriesBase) Add

func (s *SeriesBase) Add(b interface{}) SeriesExtend

func (*SeriesBase) Array

func (s *SeriesBase) Array(limit ...int) (result []float64)

func (*SeriesBase) AutoCorrelation

func (s *SeriesBase) AutoCorrelation(length int, lag ...int) float64

func (*SeriesBase) Change

func (s *SeriesBase) Change(offset ...int) SeriesExtend

func (*SeriesBase) Correlation

func (s *SeriesBase) Correlation(b Series, length int, method ...CorrFunc) float64

func (*SeriesBase) Covariance

func (s *SeriesBase) Covariance(b Series, length int) float64

func (*SeriesBase) CrossEntropy

func (s *SeriesBase) CrossEntropy(b Series, window int) float64

func (*SeriesBase) CrossOver

func (s *SeriesBase) CrossOver(b Series) BoolSeries

func (*SeriesBase) CrossUnder

func (s *SeriesBase) CrossUnder(b Series) BoolSeries

func (*SeriesBase) Div

func (s *SeriesBase) Div(b interface{}) SeriesExtend

func (*SeriesBase) Dot

func (s *SeriesBase) Dot(b interface{}, limit ...int) float64

func (*SeriesBase) Entropy

func (s *SeriesBase) Entropy(window int) float64

func (*SeriesBase) Filter

func (s *SeriesBase) Filter(b func(int, float64) bool, length int) SeriesExtend

func (*SeriesBase) Highest

func (s *SeriesBase) Highest(lookback int) float64

func (*SeriesBase) Index

func (s *SeriesBase) Index(i int) float64

func (*SeriesBase) Last

func (s *SeriesBase) Last() float64

func (*SeriesBase) Length

func (s *SeriesBase) Length() int

func (*SeriesBase) Lowest

func (s *SeriesBase) Lowest(lookback int) float64

func (*SeriesBase) Mean

func (s *SeriesBase) Mean(limit ...int) float64

func (*SeriesBase) Minus

func (s *SeriesBase) Minus(b interface{}) SeriesExtend

func (*SeriesBase) Mul

func (s *SeriesBase) Mul(b interface{}) SeriesExtend

func (*SeriesBase) NextCross

func (s *SeriesBase) NextCross(b Series, lookback int) (int, float64, bool)

func (*SeriesBase) PercentageChange

func (s *SeriesBase) PercentageChange(offset ...int) SeriesExtend

func (*SeriesBase) Predict

func (s *SeriesBase) Predict(lookback int, offset ...int) float64

func (*SeriesBase) Rank

func (s *SeriesBase) Rank(length int) SeriesExtend

func (*SeriesBase) Reverse

func (s *SeriesBase) Reverse(limit ...int) (result floats.Slice)

func (*SeriesBase) Rolling

func (s *SeriesBase) Rolling(window int) *RollingResult

func (*SeriesBase) Shift

func (s *SeriesBase) Shift(offset int) SeriesExtend

func (*SeriesBase) Sigmoid

func (s *SeriesBase) Sigmoid() SeriesExtend

func (*SeriesBase) Skew

func (s *SeriesBase) Skew(length int) float64

func (*SeriesBase) Softmax

func (s *SeriesBase) Softmax(window int) SeriesExtend

func (*SeriesBase) Stdev

func (s *SeriesBase) Stdev(params ...int) float64

func (*SeriesBase) Sum

func (s *SeriesBase) Sum(limit ...int) float64

func (*SeriesBase) Variance

func (s *SeriesBase) Variance(length int) float64

type SeriesExtend

type SeriesExtend interface {
	Series
	Sum(limit ...int) float64
	Mean(limit ...int) float64
	Abs() SeriesExtend
	Predict(lookback int, offset ...int) float64
	NextCross(b Series, lookback int) (int, float64, bool)
	CrossOver(b Series) BoolSeries
	CrossUnder(b Series) BoolSeries
	Highest(lookback int) float64
	Lowest(lookback int) float64
	Add(b interface{}) SeriesExtend
	Minus(b interface{}) SeriesExtend
	Div(b interface{}) SeriesExtend
	Mul(b interface{}) SeriesExtend
	Dot(b interface{}, limit ...int) float64
	Array(limit ...int) (result []float64)
	Reverse(limit ...int) (result floats.Slice)
	Change(offset ...int) SeriesExtend
	PercentageChange(offset ...int) SeriesExtend
	Stdev(params ...int) float64
	Rolling(window int) *RollingResult
	Shift(offset int) SeriesExtend
	Skew(length int) float64
	Variance(length int) float64
	Covariance(b Series, length int) float64
	Correlation(b Series, length int, method ...CorrFunc) float64
	AutoCorrelation(length int, lag ...int) float64
	Rank(length int) SeriesExtend
	Sigmoid() SeriesExtend
	Softmax(window int) SeriesExtend
	Entropy(window int) float64
	CrossEntropy(b Series, window int) float64
	Filter(b func(i int, value float64) bool, length int) SeriesExtend
}

func Abs

func Abs(a Series) SeriesExtend

Return series that having all the elements positive

func Add

func Add(a interface{}, b interface{}) SeriesExtend

Add two series, result[i] = a[i] + b[i]

func Change

func Change(a Series, offset ...int) SeriesExtend

Difference between current value and previous, a - a[offset] offset: if not given, offset is 1.

func Div

func Div(a interface{}, b interface{}) SeriesExtend

Divid two series, result[i] = a[i] / b[i]

func Filter

func Filter(a Series, b func(i int, value float64) bool, length int) SeriesExtend

Filter function filters Series by using a boolean function. When the boolean function returns true, the Series value at index i will be included in the returned Series. The returned Series will find at most `length` latest matching elements from the input Series. Query index larger or equal than length from the returned Series will return 0 instead. Notice that any Update on the input Series will make the previously returned Series outdated.

func Minus

func Minus(a interface{}, b interface{}) SeriesExtend

Minus two series, result[i] = a[i] - b[i]

func Mul

func Mul(a interface{}, b interface{}) SeriesExtend

Multiple two series, result[i] = a[i] * b[i]

func NewSeries

func NewSeries(a Series) SeriesExtend

func PercentageChange

func PercentageChange(a Series, offset ...int) SeriesExtend

Percentage change between current and a prior element, a / a[offset] - 1. offset: if not give, offset is 1.

func Rank

func Rank(a Series, length int) SeriesExtend

func Shift

func Shift(a Series, offset int) SeriesExtend

func Sigmoid

func Sigmoid(a Series) SeriesExtend

Sigmoid returns the input values in range of -1 to 1 along the sigmoid or s-shaped curve. Commonly used in machine learning while training neural networks as an activation function.

func Softmax

func Softmax(a Series, window int) SeriesExtend

SoftMax returns the input value in the range of 0 to 1 with sum of all the probabilities being equal to one. It is commonly used in machine learning neural networks. Will return Softmax SeriesExtend result based in latest [window] numbers from [a] Series

type ShiftResult

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

func (*ShiftResult) Index

func (inc *ShiftResult) Index(i int) float64

func (*ShiftResult) Last

func (inc *ShiftResult) Last() float64

func (*ShiftResult) Length

func (inc *ShiftResult) Length() int

type SideType

type SideType string

SideType define side type of order

func StrToSideType

func StrToSideType(s string) (side SideType, err error)

func (SideType) Color

func (side SideType) Color() string

func (SideType) Reverse

func (side SideType) Reverse() SideType

func (SideType) String

func (side SideType) String() string

func (*SideType) UnmarshalJSON

func (side *SideType) UnmarshalJSON(data []byte) error

type SigmoidResult

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

func (*SigmoidResult) Index

func (s *SigmoidResult) Index(i int) float64

func (*SigmoidResult) Last

func (s *SigmoidResult) Last() float64

func (*SigmoidResult) Length

func (s *SigmoidResult) Length() int

type SimpleDuration

type SimpleDuration struct {
	Num      int
	Unit     string
	Duration Duration
}

func ParseSimpleDuration

func ParseSimpleDuration(s string) (*SimpleDuration, error)

func (*SimpleDuration) Interval

func (d *SimpleDuration) Interval() Interval

func (*SimpleDuration) String

func (d *SimpleDuration) String() string

func (*SimpleDuration) UnmarshalJSON

func (d *SimpleDuration) UnmarshalJSON(data []byte) error

type SliceOrderBook

type SliceOrderBook struct {
	Symbol string
	Bids   PriceVolumeSlice
	Asks   PriceVolumeSlice
	// contains filtered or unexported fields
}

SliceOrderBook is a general order book structure which could be used for RESTful responses and websocket stream parsing

func NewSliceOrderBook

func NewSliceOrderBook(symbol string) *SliceOrderBook

func (*SliceOrderBook) BestAsk

func (b *SliceOrderBook) BestAsk() (PriceVolume, bool)

func (*SliceOrderBook) BestBid

func (b *SliceOrderBook) BestBid() (PriceVolume, bool)

func (*SliceOrderBook) Copy

func (b *SliceOrderBook) Copy() OrderBook

func (*SliceOrderBook) CopyDepth

func (b *SliceOrderBook) CopyDepth(limit int) OrderBook

func (*SliceOrderBook) EmitLoad

func (b *SliceOrderBook) EmitLoad(book *SliceOrderBook)

func (*SliceOrderBook) EmitUpdate

func (b *SliceOrderBook) EmitUpdate(book *SliceOrderBook)

func (*SliceOrderBook) IsValid

func (b *SliceOrderBook) IsValid() (bool, error)

func (*SliceOrderBook) LastUpdateTime

func (b *SliceOrderBook) LastUpdateTime() time.Time

func (*SliceOrderBook) Load

func (b *SliceOrderBook) Load(book SliceOrderBook)

func (*SliceOrderBook) OnLoad

func (b *SliceOrderBook) OnLoad(cb func(book *SliceOrderBook))

func (*SliceOrderBook) OnUpdate

func (b *SliceOrderBook) OnUpdate(cb func(book *SliceOrderBook))

func (*SliceOrderBook) PriceVolumesBySide

func (b *SliceOrderBook) PriceVolumesBySide(side SideType) PriceVolumeSlice

func (*SliceOrderBook) Print

func (b *SliceOrderBook) Print()

func (*SliceOrderBook) Reset

func (b *SliceOrderBook) Reset()

func (*SliceOrderBook) SideBook

func (b *SliceOrderBook) SideBook(sideType SideType) PriceVolumeSlice

func (*SliceOrderBook) Spread

func (b *SliceOrderBook) Spread() (fixedpoint.Value, bool)

func (*SliceOrderBook) String

func (b *SliceOrderBook) String() string

func (*SliceOrderBook) Update

func (b *SliceOrderBook) Update(book SliceOrderBook)

type SliceView

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

func (*SliceView) Index

func (s *SliceView) Index(i int) float64

func (*SliceView) Last

func (s *SliceView) Last() float64

func (*SliceView) Length

func (s *SliceView) Length() int

type Speed

type Speed string
const (
	SpeedHigh   Speed = "HIGH"
	SpeedMedium Speed = "MEDIUM"
	SpeedLow    Speed = "LOW"
)

type StandardStream

type StandardStream struct {

	// Conn is the websocket connection
	Conn *websocket.Conn

	// ConnCtx is the context of the current websocket connection
	ConnCtx context.Context

	// ConnCancel is the cancel funcion of the current websocket connection
	ConnCancel context.CancelFunc

	// ConnLock is used for locking Conn, ConnCtx and ConnCancel fields.
	// When changing these field values, be sure to call ConnLock
	ConnLock sync.Mutex

	PublicOnly bool

	// ReconnectC is a signal channel for reconnecting
	ReconnectC chan struct{}

	// CloseC is a signal channel for closing stream
	CloseC chan struct{}

	Subscriptions []Subscription

	// Futures
	FuturesPositionUpdateCallbacks []func(futuresPositions FuturesPositionMap)

	FuturesPositionSnapshotCallbacks []func(futuresPositions FuturesPositionMap)
	// contains filtered or unexported fields
}

func NewStandardStream

func NewStandardStream() StandardStream

func (*StandardStream) Close

func (s *StandardStream) Close() error

func (*StandardStream) Connect

func (s *StandardStream) Connect(ctx context.Context) error

Connect starts the stream and create the websocket connection

func (*StandardStream) Dial

func (s *StandardStream) Dial(ctx context.Context, args ...string) (*websocket.Conn, error)

func (*StandardStream) DialAndConnect

func (s *StandardStream) DialAndConnect(ctx context.Context) error

func (*StandardStream) EmitAggTrade

func (s *StandardStream) EmitAggTrade(trade Trade)

func (*StandardStream) EmitBalanceSnapshot

func (s *StandardStream) EmitBalanceSnapshot(balances BalanceMap)

func (*StandardStream) EmitBalanceUpdate

func (s *StandardStream) EmitBalanceUpdate(balances BalanceMap)

func (*StandardStream) EmitBookSnapshot

func (s *StandardStream) EmitBookSnapshot(book SliceOrderBook)

func (*StandardStream) EmitBookTickerUpdate

func (s *StandardStream) EmitBookTickerUpdate(bookTicker BookTicker)

func (*StandardStream) EmitBookUpdate

func (s *StandardStream) EmitBookUpdate(book SliceOrderBook)

func (*StandardStream) EmitConnect

func (s *StandardStream) EmitConnect()

func (*StandardStream) EmitDisconnect

func (s *StandardStream) EmitDisconnect()

func (*StandardStream) EmitFuturesPositionSnapshot

func (s *StandardStream) EmitFuturesPositionSnapshot(futuresPositions FuturesPositionMap)

func (*StandardStream) EmitFuturesPositionUpdate

func (s *StandardStream) EmitFuturesPositionUpdate(futuresPositions FuturesPositionMap)

func (*StandardStream) EmitKLine

func (s *StandardStream) EmitKLine(kline KLine)

func (*StandardStream) EmitKLineClosed

func (s *StandardStream) EmitKLineClosed(kline KLine)

func (*StandardStream) EmitMarketTrade

func (s *StandardStream) EmitMarketTrade(trade Trade)

func (*StandardStream) EmitOrderUpdate

func (s *StandardStream) EmitOrderUpdate(order Order)

func (*StandardStream) EmitStart

func (s *StandardStream) EmitStart()

func (*StandardStream) EmitTradeUpdate

func (s *StandardStream) EmitTradeUpdate(trade Trade)

func (*StandardStream) GetPublicOnly

func (s *StandardStream) GetPublicOnly() bool

func (*StandardStream) GetSubscriptions

func (s *StandardStream) GetSubscriptions() []Subscription

func (*StandardStream) OnAggTrade

func (s *StandardStream) OnAggTrade(cb func(trade Trade))

func (*StandardStream) OnBalanceSnapshot

func (s *StandardStream) OnBalanceSnapshot(cb func(balances BalanceMap))

func (*StandardStream) OnBalanceUpdate

func (s *StandardStream) OnBalanceUpdate(cb func(balances BalanceMap))

func (*StandardStream) OnBookSnapshot

func (s *StandardStream) OnBookSnapshot(cb func(book SliceOrderBook))

func (*StandardStream) OnBookTickerUpdate

func (s *StandardStream) OnBookTickerUpdate(cb func(bookTicker BookTicker))

func (*StandardStream) OnBookUpdate

func (s *StandardStream) OnBookUpdate(cb func(book SliceOrderBook))

func (*StandardStream) OnConnect

func (s *StandardStream) OnConnect(cb func())

func (*StandardStream) OnDisconnect

func (s *StandardStream) OnDisconnect(cb func())

func (*StandardStream) OnFuturesPositionSnapshot

func (s *StandardStream) OnFuturesPositionSnapshot(cb func(futuresPositions FuturesPositionMap))

func (*StandardStream) OnFuturesPositionUpdate

func (s *StandardStream) OnFuturesPositionUpdate(cb func(futuresPositions FuturesPositionMap))

func (*StandardStream) OnKLine

func (s *StandardStream) OnKLine(cb func(kline KLine))

func (*StandardStream) OnKLineClosed

func (s *StandardStream) OnKLineClosed(cb func(kline KLine))

func (*StandardStream) OnMarketTrade

func (s *StandardStream) OnMarketTrade(cb func(trade Trade))

func (*StandardStream) OnOrderUpdate

func (s *StandardStream) OnOrderUpdate(cb func(order Order))

func (*StandardStream) OnStart

func (s *StandardStream) OnStart(cb func())

func (*StandardStream) OnTradeUpdate

func (s *StandardStream) OnTradeUpdate(cb func(trade Trade))

func (*StandardStream) Read

func (s *StandardStream) Read(ctx context.Context, conn *websocket.Conn, cancel context.CancelFunc)

func (*StandardStream) Reconnect

func (s *StandardStream) Reconnect()

func (*StandardStream) SetConn

func (*StandardStream) SetDispatcher

func (s *StandardStream) SetDispatcher(dispatcher Dispatcher)

func (*StandardStream) SetEndpointCreator

func (s *StandardStream) SetEndpointCreator(creator EndpointCreator)

func (*StandardStream) SetParser

func (s *StandardStream) SetParser(parser Parser)

func (*StandardStream) SetPublicOnly

func (s *StandardStream) SetPublicOnly()

func (*StandardStream) Subscribe

func (s *StandardStream) Subscribe(channel Channel, symbol string, options SubscribeOptions)

type StandardStreamEmitter

type StandardStreamEmitter interface {
	Stream
	EmitStart()
	EmitConnect()
	EmitDisconnect()
	EmitTradeUpdate(Trade)
	EmitOrderUpdate(Order)
	EmitBalanceSnapshot(BalanceMap)
	EmitBalanceUpdate(BalanceMap)
	EmitKLineClosed(KLine)
	EmitKLine(KLine)
	EmitBookUpdate(SliceOrderBook)
	EmitBookTickerUpdate(BookTicker)
	EmitBookSnapshot(SliceOrderBook)
	EmitMarketTrade(Trade)
	EmitAggTrade(Trade)
	EmitFuturesPositionUpdate(FuturesPositionMap)
	EmitFuturesPositionSnapshot(FuturesPositionMap)
}

type StandardStreamEventHub

type StandardStreamEventHub interface {
	OnStart(cb func())

	OnConnect(cb func())

	OnDisconnect(cb func())

	OnTradeUpdate(cb func(trade Trade))

	OnOrderUpdate(cb func(order Order))

	OnBalanceSnapshot(cb func(balances BalanceMap))

	OnBalanceUpdate(cb func(balances BalanceMap))

	OnKLineClosed(cb func(kline KLine))

	OnKLine(cb func(kline KLine))

	OnBookUpdate(cb func(book SliceOrderBook))

	OnBookTickerUpdate(cb func(bookTicker BookTicker))

	OnBookSnapshot(cb func(book SliceOrderBook))

	OnMarketTrade(cb func(trade Trade))

	OnAggTrade(cb func(trade Trade))

	OnFuturesPositionUpdate(cb func(futuresPositions FuturesPositionMap))

	OnFuturesPositionSnapshot(cb func(futuresPositions FuturesPositionMap))
}

type StrategyStatus

type StrategyStatus string

StrategyStatus define strategy status

const (
	StrategyStatusRunning StrategyStatus = "RUNNING"
	StrategyStatusStopped StrategyStatus = "STOPPED"
	StrategyStatusUnknown StrategyStatus = "UNKNOWN"
)

type Stream

type Stream interface {
	StandardStreamEventHub

	Subscribe(channel Channel, symbol string, options SubscribeOptions)
	GetSubscriptions() []Subscription
	SetPublicOnly()
	GetPublicOnly() bool
	Connect(ctx context.Context) error
	Close() error
}

type StreamOrderBook

type StreamOrderBook struct {
	*MutexOrderBook

	C sigchan.Chan
	// contains filtered or unexported fields
}

StreamOrderBook receives streaming data from websocket connection and update the order book with mutex lock, so you can safely access it.

func NewStreamBook

func NewStreamBook(symbol string) *StreamOrderBook

func (*StreamOrderBook) BindStream

func (sb *StreamOrderBook) BindStream(stream Stream)

func (*StreamOrderBook) EmitSnapshot

func (sb *StreamOrderBook) EmitSnapshot(snapshot SliceOrderBook)

func (*StreamOrderBook) EmitUpdate

func (sb *StreamOrderBook) EmitUpdate(update SliceOrderBook)

func (*StreamOrderBook) OnSnapshot

func (sb *StreamOrderBook) OnSnapshot(cb func(snapshot SliceOrderBook))

func (*StreamOrderBook) OnUpdate

func (sb *StreamOrderBook) OnUpdate(cb func(update SliceOrderBook))

type Stringer

type Stringer interface {
	String() string
}

type SubmitOrder

type SubmitOrder struct {
	ClientOrderID string `json:"clientOrderID" db:"client_order_id"`

	Symbol string    `json:"symbol" db:"symbol"`
	Side   SideType  `json:"side" db:"side"`
	Type   OrderType `json:"orderType" db:"order_type"`

	Quantity fixedpoint.Value `json:"quantity" db:"quantity"`
	Price    fixedpoint.Value `json:"price" db:"price"`

	// AveragePrice is only used in back-test currently
	AveragePrice fixedpoint.Value `json:"averagePrice"`

	StopPrice fixedpoint.Value `json:"stopPrice,omitempty" db:"stop_price"`

	Market Market `json:"-" db:"-"`

	TimeInForce TimeInForce `json:"timeInForce,omitempty" db:"time_in_force"` // GTC, IOC, FOK

	GroupID uint32 `json:"groupID,omitempty"`

	MarginSideEffect MarginOrderSideEffectType `json:"marginSideEffect,omitempty"` // AUTO_REPAY = repay, MARGIN_BUY = borrow, defaults to  NO_SIDE_EFFECT

	ReduceOnly    bool `json:"reduceOnly" db:"reduce_only"`
	ClosePosition bool `json:"closePosition" db:"close_position"`

	Tag    string                 `json:"tag" db:"-"`
	Params map[string]interface{} `json:"params"`
}

func (*SubmitOrder) In

func (o *SubmitOrder) In() (fixedpoint.Value, string)

func (*SubmitOrder) Out

func (o *SubmitOrder) Out() (fixedpoint.Value, string)

func (*SubmitOrder) PlainText

func (o *SubmitOrder) PlainText() string

func (*SubmitOrder) SlackAttachment

func (o *SubmitOrder) SlackAttachment() slack.Attachment

func (*SubmitOrder) String

func (o *SubmitOrder) String() string

type SubscribeOptions

type SubscribeOptions struct {
	// TODO: change to Interval type later
	Interval Interval `json:"interval,omitempty"`
	Depth    Depth    `json:"depth,omitempty"`
	Speed    Speed    `json:"speed,omitempty"`
}

SubscribeOptions provides the standard stream options

func (SubscribeOptions) String

func (o SubscribeOptions) String() string

type Subscription

type Subscription struct {
	Symbol  string           `json:"symbol"`
	Channel Channel          `json:"channel"`
	Options SubscribeOptions `json:"options"`
}

type SyncOrderMap

type SyncOrderMap struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func NewSyncOrderMap

func NewSyncOrderMap() *SyncOrderMap

func (*SyncOrderMap) Add

func (m *SyncOrderMap) Add(o Order)

func (*SyncOrderMap) AnyFilled

func (m *SyncOrderMap) AnyFilled() (order Order, ok bool)

AnyFilled find any order is filled and stop iterating the order map

func (*SyncOrderMap) Backup

func (m *SyncOrderMap) Backup() (orders []SubmitOrder)

func (*SyncOrderMap) Canceled

func (m *SyncOrderMap) Canceled() OrderSlice

func (*SyncOrderMap) Exists

func (m *SyncOrderMap) Exists(orderID uint64) (exists bool)

func (*SyncOrderMap) Filled

func (m *SyncOrderMap) Filled() OrderSlice

func (*SyncOrderMap) FindByStatus

func (m *SyncOrderMap) FindByStatus(status OrderStatus) OrderSlice

func (*SyncOrderMap) Get

func (m *SyncOrderMap) Get(orderID uint64) (Order, bool)

func (*SyncOrderMap) IDs

func (m *SyncOrderMap) IDs() (ids []uint64)

func (*SyncOrderMap) Iterate

func (m *SyncOrderMap) Iterate(it func(id uint64, order Order) bool)

func (*SyncOrderMap) Len

func (m *SyncOrderMap) Len() int

func (*SyncOrderMap) Lookup

func (m *SyncOrderMap) Lookup(f func(o Order) bool) *Order

func (*SyncOrderMap) Orders

func (m *SyncOrderMap) Orders() (slice OrderSlice)

func (*SyncOrderMap) Remove

func (m *SyncOrderMap) Remove(orderID uint64) (exists bool)

func (*SyncOrderMap) Update

func (m *SyncOrderMap) Update(o Order)

type Ticker

type Ticker struct {
	Time   time.Time
	Volume fixedpoint.Value // `volume` from Max & binance
	Last   fixedpoint.Value // `last` from Max, `lastPrice` from binance
	Open   fixedpoint.Value // `open` from Max, `openPrice` from binance
	High   fixedpoint.Value // `high` from Max, `highPrice` from binance
	Low    fixedpoint.Value // `low` from Max, `lowPrice` from binance
	Buy    fixedpoint.Value // `buy` from Max, `bidPrice` from binance
	Sell   fixedpoint.Value // `sell` from Max, `askPrice` from binance
}

type Time

type Time time.Time

Time type implements the driver value for sqlite

func NewTimeFromUnix

func NewTimeFromUnix(sec int64, nsec int64) Time

func (Time) After

func (t Time) After(time2 time.Time) bool

func (Time) Before

func (t Time) Before(time2 time.Time) bool

func (Time) Equal

func (t Time) Equal(time2 time.Time) bool

func (Time) MarshalJSON

func (t Time) MarshalJSON() ([]byte, error)

func (*Time) Scan

func (t *Time) Scan(src interface{}) error

func (Time) String

func (t Time) String() string

func (Time) Time

func (t Time) Time() time.Time

func (Time) Unix

func (t Time) Unix() int64

func (Time) UnixMilli

func (t Time) UnixMilli() int64

func (*Time) UnmarshalJSON

func (t *Time) UnmarshalJSON(data []byte) error

func (Time) Value

func (t Time) Value() (driver.Value, error)

Value implements the driver.Valuer interface see http://jmoiron.net/blog/built-in-interfaces/

type TimeInForce

type TimeInForce string
var (
	TimeInForceGTC TimeInForce = "GTC"
	TimeInForceIOC TimeInForce = "IOC"
	TimeInForceFOK TimeInForce = "FOK"
)

type Timestamp

type Timestamp time.Time

Timestamp is used for parsing unix timestamp (seconds)

func (Timestamp) Format

func (t Timestamp) Format(layout string) string

func (Timestamp) MarshalJSON

func (t Timestamp) MarshalJSON() ([]byte, error)

func (Timestamp) String

func (t Timestamp) String() string

func (Timestamp) Time

func (t Timestamp) Time() time.Time

func (*Timestamp) UnmarshalJSON

func (t *Timestamp) UnmarshalJSON(o []byte) error

type Trade

type Trade struct {
	// GID is the global ID
	GID int64 `json:"gid" db:"gid"`

	// ID is the source trade ID
	ID            uint64           `json:"id" db:"id"`
	OrderID       uint64           `json:"orderID" db:"order_id"`
	Exchange      ExchangeName     `json:"exchange" db:"exchange"`
	Price         fixedpoint.Value `json:"price" db:"price"`
	Quantity      fixedpoint.Value `json:"quantity" db:"quantity"`
	QuoteQuantity fixedpoint.Value `json:"quoteQuantity" db:"quote_quantity"`
	Symbol        string           `json:"symbol" db:"symbol"`

	Side        SideType         `json:"side" db:"side"`
	IsBuyer     bool             `json:"isBuyer" db:"is_buyer"`
	IsMaker     bool             `json:"isMaker" db:"is_maker"`
	Time        Time             `json:"tradedAt" db:"traded_at"`
	Fee         fixedpoint.Value `json:"fee" db:"fee"`
	FeeCurrency string           `json:"feeCurrency" db:"fee_currency"`

	IsMargin   bool `json:"isMargin" db:"is_margin"`
	IsFutures  bool `json:"isFutures" db:"is_futures"`
	IsIsolated bool `json:"isIsolated" db:"is_isolated"`

	// StrategyID is the strategy that execute this trade
	StrategyID sql.NullString `json:"strategyID" db:"strategy"`

	// PnL is the profit and loss value of the executed trade
	PnL sql.NullFloat64 `json:"pnl" db:"pnl"`
}

func SortTradesAscending

func SortTradesAscending(trades []Trade) []Trade

func (Trade) CsvHeader

func (trade Trade) CsvHeader() []string

func (Trade) CsvRecords

func (trade Trade) CsvRecords() [][]string

func (Trade) Key

func (trade Trade) Key() TradeKey

func (Trade) Liquidity

func (trade Trade) Liquidity() (o string)

func (Trade) PlainText

func (trade Trade) PlainText() string

PlainText is used for telegram-styled messages

func (Trade) PositionChange

func (trade Trade) PositionChange() fixedpoint.Value

func (Trade) SlackAttachment

func (trade Trade) SlackAttachment() slack.Attachment

func (Trade) String

func (trade Trade) String() string

String is for console output

type TradeKey

type TradeKey struct {
	Exchange ExchangeName
	ID       uint64
	Side     SideType
}

func (TradeKey) String

func (k TradeKey) String() string

type TradeQueryOptions

type TradeQueryOptions struct {
	StartTime   *time.Time
	EndTime     *time.Time
	Limit       int64
	LastTradeID uint64
}

type TradeSlice

type TradeSlice struct {
	Trades []Trade
	// contains filtered or unexported fields
}

func (*TradeSlice) Append

func (s *TradeSlice) Append(t Trade)

func (*TradeSlice) Copy

func (s *TradeSlice) Copy() []Trade

func (*TradeSlice) Reverse

func (s *TradeSlice) Reverse()

type TradeStats

type TradeStats struct {
	Symbol string `json:"symbol,omitempty"`

	WinningRatio     fixedpoint.Value `json:"winningRatio" yaml:"winningRatio"`
	NumOfLossTrade   int              `json:"numOfLossTrade" yaml:"numOfLossTrade"`
	NumOfProfitTrade int              `json:"numOfProfitTrade" yaml:"numOfProfitTrade"`

	GrossProfit fixedpoint.Value `json:"grossProfit" yaml:"grossProfit"`
	GrossLoss   fixedpoint.Value `json:"grossLoss" yaml:"grossLoss"`

	Profits []fixedpoint.Value `json:"profits,omitempty" yaml:"profits,omitempty"`
	Losses  []fixedpoint.Value `json:"losses,omitempty" yaml:"losses,omitempty"`

	LargestProfitTrade fixedpoint.Value `json:"largestProfitTrade,omitempty" yaml:"largestProfitTrade"`
	LargestLossTrade   fixedpoint.Value `json:"largestLossTrade,omitempty" yaml:"largestLossTrade"`
	AverageProfitTrade fixedpoint.Value `json:"averageProfitTrade" yaml:"averageProfitTrade"`
	AverageLossTrade   fixedpoint.Value `json:"averageLossTrade" yaml:"averageLossTrade"`

	ProfitFactor    fixedpoint.Value                      `json:"profitFactor" yaml:"profitFactor"`
	TotalNetProfit  fixedpoint.Value                      `json:"totalNetProfit" yaml:"totalNetProfit"`
	IntervalProfits map[Interval]*IntervalProfitCollector `json:"intervalProfits,omitempty" yaml:"intervalProfits,omitempty"`

	// MaximumConsecutiveWins - (counter) the longest series of winning trades
	MaximumConsecutiveWins int `json:"maximumConsecutiveWins" yaml:"maximumConsecutiveWins"`

	// MaximumConsecutiveLosses - (counter) the longest series of losing trades
	MaximumConsecutiveLosses int `json:"maximumConsecutiveLosses" yaml:"maximumConsecutiveLosses"`

	// MaximumConsecutiveProfit - ($) the longest series of winning trades and their total profit;
	MaximumConsecutiveProfit fixedpoint.Value `json:"maximumConsecutiveProfit" yaml:"maximumConsecutiveProfit"`

	// MaximumConsecutiveLoss - ($) the longest series of losing trades and their total loss;
	MaximumConsecutiveLoss fixedpoint.Value `json:"maximumConsecutiveLoss" yaml:"maximumConsecutiveLoss"`
	// contains filtered or unexported fields
}

TODO: Add more stats from the reference: See https://www.metatrader5.com/en/terminal/help/algotrading/testing_report

func NewTradeStats

func NewTradeStats(symbol string) *TradeStats

func (*TradeStats) Add

func (s *TradeStats) Add(profit *Profit)

func (*TradeStats) BriefString

func (s *TradeStats) BriefString() string

Output TradeStats without Profits and Losses

func (*TradeStats) CsvHeader

func (s *TradeStats) CsvHeader() []string

func (*TradeStats) CsvRecords

func (s *TradeStats) CsvRecords() [][]string

func (*TradeStats) Recalculate

func (s *TradeStats) Recalculate()

Recalculate the trade stats fields from the orderProfits this is for live-trading, one order may have many trades, and we need to merge them.

func (*TradeStats) SetIntervalProfitCollector

func (s *TradeStats) SetIntervalProfitCollector(c *IntervalProfitCollector)

Set IntervalProfitCollector explicitly to enable the sharpe ratio calculation

func (*TradeStats) String

func (s *TradeStats) String() string

type UpdatableSeries

type UpdatableSeries interface {
	Series
	Update(float64)
}

type UpdatableSeriesExtend

type UpdatableSeriesExtend interface {
	SeriesExtend
	Update(float64)
}

type ValueMap

type ValueMap map[string]fixedpoint.Value

func (ValueMap) Add

func (m ValueMap) Add(n ValueMap) ValueMap

func (ValueMap) AddScalar

func (m ValueMap) AddScalar(x fixedpoint.Value) ValueMap

func (ValueMap) Div

func (m ValueMap) Div(n ValueMap) ValueMap

func (ValueMap) DivScalar

func (m ValueMap) DivScalar(x fixedpoint.Value) ValueMap

func (ValueMap) Eq

func (m ValueMap) Eq(n ValueMap) bool

func (ValueMap) Mul

func (m ValueMap) Mul(n ValueMap) ValueMap

func (ValueMap) MulScalar

func (m ValueMap) MulScalar(x fixedpoint.Value) ValueMap

func (ValueMap) Normalize

func (m ValueMap) Normalize() ValueMap

func (ValueMap) Sub

func (m ValueMap) Sub(n ValueMap) ValueMap

func (ValueMap) SubScalar

func (m ValueMap) SubScalar(x fixedpoint.Value) ValueMap

func (ValueMap) Sum

func (m ValueMap) Sum() fixedpoint.Value

type Withdraw

type Withdraw struct {
	GID        int64            `json:"gid" db:"gid"`
	Exchange   ExchangeName     `json:"exchange" db:"exchange"`
	Asset      string           `json:"asset" db:"asset"`
	Amount     fixedpoint.Value `json:"amount" db:"amount"`
	Address    string           `json:"address" db:"address"`
	AddressTag string           `json:"addressTag"`
	Status     string           `json:"status"`

	TransactionID          string           `json:"transactionID" db:"txn_id"`
	TransactionFee         fixedpoint.Value `json:"transactionFee" db:"txn_fee"`
	TransactionFeeCurrency string           `json:"transactionFeeCurrency" db:"txn_fee_currency"`
	WithdrawOrderID        string           `json:"withdrawOrderId"`
	ApplyTime              Time             `json:"applyTime" db:"time"`
	Network                string           `json:"network" db:"network"`
}

func (Withdraw) EffectiveTime

func (w Withdraw) EffectiveTime() time.Time

func (Withdraw) String

func (w Withdraw) String() (o string)

type WithdrawalOptions

type WithdrawalOptions struct {
	Network    string
	AddressTag string
}

type ZeroAssetError

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

func NewZeroAssetError

func NewZeroAssetError(e error) ZeroAssetError

Directories

Path Synopsis
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.

Jump to

Keyboard shortcuts

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