holdings

package
v0.0.0-...-83dca6d Latest Latest
Warning

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

Go to latest
Published: May 23, 2022 License: MIT Imports: 9 Imported by: 0

README

GoCryptoTrader Backtester: Holdings package

Build Status Software License GoDoc Coverage Status Go Report Card

This holdings package is part of the GoCryptoTrader codebase.

This is still in active development

You can track ideas, planned features and what's in progress on this Trello board: https://trello.com/b/ZAhMhpOy/gocryptotrader.

Join our slack to discuss all things related to GoCryptoTrader! GoCryptoTrader Slack

Holdings package overview

Holdings are used to calculate the holdings at any given time for a given exchange, asset, currency pair. If an order is placed, funds are removed from funding and placed under assets. Every data event will update and calculate holdings value based on the new price. This will allow for statistics to be easily calculated at the end of a backtesting run

Please click GoDocs chevron above to view current GoDoc information for this package

Contribution

Please feel free to submit any pull requests or suggest any desired features to be added.

When submitting a PR, please abide by our coding guidelines:

  • Code must adhere to the official Go formatting guidelines (i.e. uses gofmt).
  • Code must be documented adhering to the official Go commentary guidelines.
  • Code must adhere to our coding style.
  • Pull requests need to be based on and opened against the master branch.

Donations

If this framework helped you in any way, or you would like to support the developers working on it, please donate Bitcoin to:

bc1qk0jareu4jytc0cfrhr5wgshsq8282awpavfahc

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrInitialFundsZero = errors.New("initial funds < 0")

ErrInitialFundsZero is an error when initial funds are zero or less

Functions

This section is empty.

Types

type ClosePriceReader

type ClosePriceReader interface {
	common.EventHandler
	GetClosePrice() decimal.Decimal
}

ClosePriceReader is used for holdings calculations without needing to consider event types

type Holding

type Holding struct {
	Offset            int64
	Item              currency.Code
	Pair              currency.Pair
	Asset             asset.Item      `json:"asset"`
	Exchange          string          `json:"exchange"`
	Timestamp         time.Time       `json:"timestamp"`
	BaseInitialFunds  decimal.Decimal `json:"base-initial-funds"`
	BaseSize          decimal.Decimal `json:"base-size"`
	BaseValue         decimal.Decimal `json:"base-value"`
	QuoteInitialFunds decimal.Decimal `json:"quote-initial-funds"`
	TotalInitialValue decimal.Decimal `json:"total-initial-value"`
	QuoteSize         decimal.Decimal `json:"quote-size"`
	SoldAmount        decimal.Decimal `json:"sold-amount"`
	SoldValue         decimal.Decimal `json:"sold-value"`
	BoughtAmount      decimal.Decimal `json:"bought-amount"`
	BoughtValue       decimal.Decimal `json:"bought-value"`

	TotalValueDifference      decimal.Decimal
	ChangeInTotalValuePercent decimal.Decimal
	BoughtValueDifference     decimal.Decimal
	SoldValueDifference       decimal.Decimal
	PositionsValueDifference  decimal.Decimal

	TotalValue                   decimal.Decimal `json:"total-value"`
	TotalFees                    decimal.Decimal `json:"total-fees"`
	TotalValueLostToVolumeSizing decimal.Decimal `json:"total-value-lost-to-volume-sizing"`
	TotalValueLostToSlippage     decimal.Decimal `json:"total-value-lost-to-slippage"`
	TotalValueLost               decimal.Decimal `json:"total-value-lost"`
}

Holding contains pricing statistics for a given time for a given exchange asset pair

func Create

func Create(ev ClosePriceReader, funding funding.IPairReader) (Holding, error)

Create makes a Holding struct to track total values of strategy holdings over the course of a backtesting run

func (*Holding) HasFunds

func (h *Holding) HasFunds() bool

HasFunds determines whether there are any holdings in the quote funds

func (*Holding) HasInvestments

func (h *Holding) HasInvestments() bool

HasInvestments determines whether there are any holdings in the base funds

func (*Holding) Update

func (h *Holding) Update(e fill.Event, f funding.IPairReader)

Update calculates holding statistics for the events time

func (*Holding) UpdateValue

func (h *Holding) UpdateValue(d common.DataEventHandler)

UpdateValue calculates the holding's value for a data event's time and price

Jump to

Keyboard shortcuts

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