techan

package module
Version: v0.12.1 Latest Latest
Warning

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

Go to latest
Published: Jul 17, 2021 License: MIT Imports: 11 Imported by: 8

README

Techan

codecov

TechAn is a technical analysis library for Go! It provides a suite of tools and frameworks to analyze financial data and make trading decisions.

Features

  • Basic and advanced technical analysis indicators
  • Profit and trade analysis
  • Strategy building

Installation

$ go get github.com/sdcoffey/techan

Quickstart

series := techan.NewTimeSeries()

// fetch this from your preferred exchange
dataset := [][]string{
	// Timestamp, Open, Close, High, Low, volume
	{"1234567", "1", "2", "3", "5", "6"},
}

for _, datum := range dataset {
	start, _ := strconv.ParseInt(datum[0], 10, 64)
	period := techan.NewTimePeriod(time.Unix(start, 0), time.Hour*24)

	candle := techan.NewCandle(period)
	candle.OpenPrice = big.NewFromString(datum[1])
	candle.ClosePrice = big.NewFromString(datum[2])
	candle.MaxPrice = big.NewFromString(datum[3])
	candle.MinPrice = big.NewFromString(datum[4])

	series.AddCandle(candle)
}

closePrices := techan.NewClosePriceIndicator(series)
movingAverage := techan.NewEMAIndicator(closePrices, 10) // Create an exponential moving average with a window of 10

fmt.Println(movingAverage.Calculate(0).FormattedString(2))

Creating trading strategies

indicator := techan.NewClosePriceIndicator(series)

// record trades on this object
record := techan.NewTradingRecord()

entryConstant := techan.NewConstantIndicator(30)
exitConstant := techan.NewConstantIndicator(10)

// Is satisfied when the price ema moves above 30 and the current position is new
entryRule := techan.And(
	techan.NewCrossUpIndicatorRule(entryConstant, indicator),
	techan.PositionNewRule{})
	
// Is satisfied when the price ema moves below 10 and the current position is open
exitRule := techan.And(
	techan.NewCrossDownIndicatorRule(indicator, exitConstant),
	techan.PositionOpenRule{})

strategy := techan.RuleStrategy{
	UnstablePeriod: 10, // Period before which ShouldEnter and ShouldExit will always return false
	EntryRule:      entryRule,
	ExitRule:       exitRule,
}

strategy.ShouldEnter(0, record) // returns false

Credits

Techan is heavily influenced by the great ta4j. Many of the ideas and frameworks in this library owe their genesis to the great work done over there.

License

Techan is released under the MIT license. See LICENSE for details.

Documentation

Index

Examples

Constants

View Source
const (
	SimpleDateTimeFormat = "01/02/2006T15:04:05"
	SimpleDateFormat     = "01/02/2006"

	SimpleTimeFormat   = "15:04:05"
	SimpleDateFormatV2 = "2006-01-02"
)

Constants representing basic, human-readable and writable date formats

Variables

View Source
var (
	SimpleTimeFomatRegex    = regexp.MustCompile(`T\d{2}:\d{2}:\d{2}`)
	SimpleDateFormatV2Regex = regexp.MustCompile(`\d{4}-\d{2}-\d{2}`)
)

Constants representing regexes for parsing datetimes

Functions

func Abs

func Abs(b int) int

Abs returns the absolute value of the passed-in integer

func Max

func Max(i, j int) int

Max returns the larger of the two integers passed in

func Min

func Min(i, j int) int

Min returns the smaller integer of the two integers passed in

func Pow

func Pow(i, j int) int

Pow returns the first integer to the power of the second integer

Types

type Analysis

type Analysis interface {
	Analyze(*TradingRecord) float64
}

Analysis is an interface that describes a methodology for taking a TradingRecord as input, and giving back some float value that describes it's performance with respect to that methodology.

type AverageProfitAnalysis

type AverageProfitAnalysis struct{}

AverageProfitAnalysis returns the average profit for the trading record. Average profit is represented as the total profit divided by the number of trades executed.

func (AverageProfitAnalysis) Analyze

func (apa AverageProfitAnalysis) Analyze(record *TradingRecord) float64

Analyze returns the average profit of the trading record

type BuyAndHoldAnalysis

type BuyAndHoldAnalysis struct {
	TimeSeries    *TimeSeries
	StartingMoney float64
}

BuyAndHoldAnalysis returns the profit based on a hypothetical where a purchase order was made on the first period available and held until the date on the last trade of the trading record. It's useful for comparing the performance of your strategy against a simple long position.

func (BuyAndHoldAnalysis) Analyze

func (baha BuyAndHoldAnalysis) Analyze(record *TradingRecord) float64

Analyze returns the profit based on a simple buy and hold strategy

type Candle

type Candle struct {
	Period     TimePeriod
	OpenPrice  big.Decimal
	ClosePrice big.Decimal
	MaxPrice   big.Decimal
	MinPrice   big.Decimal
	Volume     big.Decimal
	TradeCount uint
}

Candle represents basic market information for a security over a given time period

func NewCandle

func NewCandle(period TimePeriod) (c *Candle)

NewCandle returns a new *Candle for a given time period

func (*Candle) AddTrade

func (c *Candle) AddTrade(tradeAmount, tradePrice big.Decimal)

AddTrade adds a trade to this candle. It will determine if the current price is higher or lower than the min or max price and increment the tradecount.

func (*Candle) String

func (c *Candle) String() string

type DecreaseRule

type DecreaseRule struct {
	Indicator
}

DecreaseRule is satisfied when the given Indicator at the given index is less than the value at the previous index.

func (DecreaseRule) IsSatisfied

func (dr DecreaseRule) IsSatisfied(index int, record *TradingRecord) bool

IsSatisfied returns true when the given Indicator at the given index is less than the value at the previous index.

type DerivativeIndicator

type DerivativeIndicator struct {
	Indicator Indicator
}

DerivativeIndicator returns an indicator that calculates the derivative of the underlying Indicator. The derivative is defined as the difference between the value at the previous index and the value at the current index. Eg series [1, 1, 2, 3, 5, 8] -> [0, 0, 1, 1, 2, 3]

func (DerivativeIndicator) Calculate

func (di DerivativeIndicator) Calculate(index int) big.Decimal

Calculate returns the derivative of the underlying indicator. At index 0, it will always return 0.

type IncreaseRule

type IncreaseRule struct {
	Indicator
}

IncreaseRule is satisfied when the given Indicator at the given index is greater than the value at the previous index.

func (IncreaseRule) IsSatisfied

func (ir IncreaseRule) IsSatisfied(index int, record *TradingRecord) bool

IsSatisfied returns true when the given Indicator at the given index is greater than the value at the previous index.

type Indicator

type Indicator interface {
	Calculate(int) big.Decimal
}

Indicator is an interface that describes a methodology by which to analyze a trading record for a specific property or trend. For example. MovingAverageIndicator implements the Indicator interface and, for a given index in the timeSeries, returns the current moving average of the prices in that series.

func NewAroonDownIndicator

func NewAroonDownIndicator(indicator Indicator, window int) Indicator

NewAroonDownIndicator returns a derivative indicator that will return a value based on the number of ticks since the lowest price in the window https://www.investopedia.com/terms/a/aroon.asp

Note: this indicator should be constructed with a either a LowPriceIndicator or a derivative thereof

func NewAroonUpIndicator

func NewAroonUpIndicator(indicator Indicator, window int) Indicator

NewAroonUpIndicator returns a derivative indicator that will return a value based on the number of ticks since the highest price in the window https://www.investopedia.com/terms/a/aroon.asp

Note: this indicator should be constructed with a either a HighPriceIndicator or a derivative thereof

func NewAverageGainsIndicator

func NewAverageGainsIndicator(indicator Indicator, window int) Indicator

NewAverageGainsIndicator Returns a new average gains indicator, which returns the average gains in the given window based on the given indicator.

func NewAverageLossesIndicator

func NewAverageLossesIndicator(indicator Indicator, window int) Indicator

NewAverageLossesIndicator Returns a new average losses indicator, which returns the average losses in the given window based on the given indicator.

func NewAverageTrueRangeIndicator

func NewAverageTrueRangeIndicator(series *TimeSeries, window int) Indicator

NewAverageTrueRangeIndicator returns a base indicator that calculates the average true range of the underlying over a window https://www.investopedia.com/terms/a/atr.asp

func NewBollingerLowerBandIndicator

func NewBollingerLowerBandIndicator(indicator Indicator, window int, sigma float64) Indicator

NewBollingerLowerBandIndicator returns a a derivative indicator which returns the lower bound of a bollinger band on the underlying indicator

func NewBollingerUpperBandIndicator

func NewBollingerUpperBandIndicator(indicator Indicator, window int, sigma float64) Indicator

NewBollingerUpperBandIndicator a a derivative indicator which returns the upper bound of a bollinger band on the underlying indicator

func NewCCIIndicator

func NewCCIIndicator(ts *TimeSeries, window int) Indicator

NewCCIIndicator Returns a new Commodity Channel Index Indicator http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:commodity_channel_index_cci

func NewClosePriceIndicator

func NewClosePriceIndicator(series *TimeSeries) Indicator

NewClosePriceIndicator returns an Indicator which returns the close price of a candle for a given index

func NewConstantIndicator

func NewConstantIndicator(constant float64) Indicator

NewConstantIndicator returns an indicator which always returns the same value for any index. It's useful when combined with other, fluxuating indicators to determine when an indicator has crossed a threshold.

func NewCumulativeGainsIndicator

func NewCumulativeGainsIndicator(indicator Indicator, window int) Indicator

NewCumulativeGainsIndicator returns a derivative indicator which returns all gains made in a base indicator for a given window.

func NewCumulativeLossesIndicator

func NewCumulativeLossesIndicator(indicator Indicator, window int) Indicator

NewCumulativeLossesIndicator returns a derivative indicator which returns all losses in a base indicator for a given window.

func NewDifferenceIndicator

func NewDifferenceIndicator(minuend, subtrahend Indicator) Indicator

NewDifferenceIndicator returns an indicator which returns the difference between one indicator (minuend) and a second indicator (subtrahend).

func NewEMAIndicator

func NewEMAIndicator(indicator Indicator, window int) Indicator

NewEMAIndicator returns a derivative indicator which returns the average of the current and preceding values in the given windowSize, with values closer to current index given more weight. A more in-depth explanation can be found here: http://www.investopedia.com/terms/e/ema.asp

func NewFastStochasticIndicator

func NewFastStochasticIndicator(series *TimeSeries, timeframe int) Indicator

NewFastStochasticIndicator returns a derivative Indicator which returns the fast stochastic indicator (%K) for the given window. https://www.investopedia.com/terms/s/stochasticoscillator.asp

func NewFixedIndicator

func NewFixedIndicator(vals ...float64) Indicator

NewFixedIndicator returns an indicator with a fixed set of values that are returned when an index is passed in

func NewGainIndicator

func NewGainIndicator(indicator Indicator) Indicator

NewGainIndicator returns a derivative indicator that returns the gains in the underlying indicator in the last bar, if any. If the delta is negative, zero is returned

func NewHighPriceIndicator

func NewHighPriceIndicator(series *TimeSeries) Indicator

NewHighPriceIndicator returns an Indicator which returns the high price of a candle for a given index

func NewKeltnerChannelLowerIndicator

func NewKeltnerChannelLowerIndicator(series *TimeSeries, window int) Indicator

func NewKeltnerChannelUpperIndicator

func NewKeltnerChannelUpperIndicator(series *TimeSeries, window int) Indicator

func NewLossIndicator

func NewLossIndicator(indicator Indicator) Indicator

NewLossIndicator returns a derivative indicator that returns the losses in the underlying indicator in the last bar, if any. If the delta is positive, zero is returned

func NewLowPriceIndicator

func NewLowPriceIndicator(series *TimeSeries) Indicator

NewLowPriceIndicator returns an Indicator which returns the low price of a candle for a given index

func NewMACDHistogramIndicator

func NewMACDHistogramIndicator(macdIdicator Indicator, signalLinewindow int) Indicator

NewMACDHistogramIndicator returns a derivative Indicator based on the MACDIndicator, the result of which is the macd indicator minus it's signalLinewindow EMA. A more in-depth explanation can be found here: http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:macd-histogram

func NewMACDIndicator

func NewMACDIndicator(baseIndicator Indicator, shortwindow, longwindow int) Indicator

NewMACDIndicator returns a derivative Indicator which returns the difference between two EMAIndicators with long and short windows. It's useful for gauging the strength of price movements. A more in-depth explanation can be found here: http://www.investopedia.com/terms/m/macd.asp

func NewMMAIndicator

func NewMMAIndicator(indicator Indicator, window int) Indicator

NewMMAIndicator returns a derivative indciator which returns the modified moving average of the underlying indictator. An in-depth explanation can be found here: https://en.wikipedia.org/wiki/Moving_average#Modified_moving_average

func NewMaximumDrawdownIndicator

func NewMaximumDrawdownIndicator(ind Indicator, window int) Indicator

NewMaximumDrawdownIndicator returns a derivative Indicator which returns the maximum drawdown of the underlying indicator over a window. Maximum drawdown is defined as the maximum observed loss from peak of an underlying indicator in a given timeframe. Maximum drawdown is given as a percentage of the peak. Use a window value of -1 to include all values present in the underlying indicator. See: https://www.investopedia.com/terms/m/maximum-drawdown-mdd.asp

func NewMaximumValueIndicator

func NewMaximumValueIndicator(ind Indicator, window int) Indicator

NewMaximumValueIndicator returns a derivative Indicator which returns the maximum value present in a given window. Use a window value of -1 to include all values in the underlying indicator.

func NewMeanDeviationIndicator

func NewMeanDeviationIndicator(indicator Indicator, window int) Indicator

NewMeanDeviationIndicator returns a derivative Indicator which returns the mean deviation of a base indicator in a given window. Mean deviation is an average of all values on the base indicator from the mean of that indicator.

func NewMinimumValueIndicator

func NewMinimumValueIndicator(ind Indicator, window int) Indicator

NewMinimumValueIndicator returns a derivative Indicator which returns the minimum value present in a given window. Use a window value of -1 to include all values in the underlying indicator.

func NewOpenPriceIndicator

func NewOpenPriceIndicator(series *TimeSeries) Indicator

NewOpenPriceIndicator returns an Indicator which returns the open price of a candle for a given index

func NewPercentChangeIndicator

func NewPercentChangeIndicator(indicator Indicator) Indicator

NewPercentChangeIndicator returns a derivative indicator which returns the percent change (positive or negative) made in a base indicator up until the given indicator

func NewRelativeStrengthIndexIndicator

func NewRelativeStrengthIndexIndicator(indicator Indicator, timeframe int) Indicator

NewRelativeStrengthIndexIndicator returns a derivative Indicator which returns the relative strength index of the base indicator in a given time frame. A more in-depth explanation of relative strength index can be found here: https://www.investopedia.com/terms/r/rsi.asp

func NewRelativeStrengthIndicator

func NewRelativeStrengthIndicator(indicator Indicator, timeframe int) Indicator

NewRelativeStrengthIndicator returns a derivative Indicator which returns the relative strength of the base indicator in a given time frame. Relative strength is the average again of up periods during the time frame divided by the average loss of down period during the same time frame

func NewRelativeVigorIndexIndicator

func NewRelativeVigorIndexIndicator(series *TimeSeries) Indicator

NewRelativeVigorIndexIndicator returns an Indicator which returns the index of the relative vigor of the prices of a sercurity. Relative Vigor Index is simply the difference of the previous four days' close and open prices divided by the difference between the previous four days high and low prices. A more in-depth explanation of relative vigor index can be found here: https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/relative-vigor-index

func NewRelativeVigorSignalLine

func NewRelativeVigorSignalLine(series *TimeSeries) Indicator

NewRelativeVigorSignalLine returns an Indicator intended to be used in conjunction with Relative vigor index, which returns the average value of the last 4 indices of the RVI indicator.

func NewSimpleMovingAverage

func NewSimpleMovingAverage(indicator Indicator, window int) Indicator

NewSimpleMovingAverage returns a derivative Indicator which returns the average of the current value and preceding values in the given windowSize.

func NewSlowStochasticIndicator

func NewSlowStochasticIndicator(k Indicator, window int) Indicator

NewSlowStochasticIndicator returns a derivative Indicator which returns the slow stochastic indicator (%D) for the given window. https://www.investopedia.com/terms/s/stochasticoscillator.asp

func NewStandardDeviationIndicator

func NewStandardDeviationIndicator(ind Indicator) Indicator

NewStandardDeviationIndicator calculates the standard deviation of a base indicator. See https://www.investopedia.com/terms/s/standarddeviation.asp

func NewTrendlineIndicator

func NewTrendlineIndicator(indicator Indicator, window int) Indicator

NewTrendlineIndicator returns an indicator whose output is the slope of the trend line given by the values in the window.

func NewTrueRangeIndicator

func NewTrueRangeIndicator(series *TimeSeries) Indicator

NewTrueRangeIndicator returns a base indicator which calculates the true range at the current point in time for a series https://www.investopedia.com/terms/a/atr.asp

func NewTypicalPriceIndicator

func NewTypicalPriceIndicator(series *TimeSeries) Indicator

NewTypicalPriceIndicator returns an Indicator which returns the typical price of a candle for a given index. The typical price is an average of the high, low, and close prices for a given candle.

func NewVarianceIndicator

func NewVarianceIndicator(ind Indicator) Indicator

NewVarianceIndicator provides a way to find the variance in a base indicator, where variances is the sum of squared deviations from the mean at any given index in the time series.

func NewVolumeIndicator

func NewVolumeIndicator(series *TimeSeries) Indicator

NewVolumeIndicator returns an indicator which returns the volume of a candle for a given index

func NewWindowedStandardDeviationIndicator

func NewWindowedStandardDeviationIndicator(ind Indicator, window int) Indicator

NewWindowedStandardDeviationIndicator returns a indicator which calculates the standard deviation of the underlying indicator over a window

type LogTradesAnalysis

type LogTradesAnalysis struct {
	io.Writer
}

LogTradesAnalysis is a wrapper around an io.Writer, which logs every trade executed to that writer

func (LogTradesAnalysis) Analyze

func (lta LogTradesAnalysis) Analyze(record *TradingRecord) float64

Analyze logs trades to provided io.Writer

type NumTradesAnalysis

type NumTradesAnalysis string

NumTradesAnalysis analyzes the trading record for the number of trades executed

func (NumTradesAnalysis) Analyze

func (nta NumTradesAnalysis) Analyze(record *TradingRecord) float64

Analyze analyzes the trading record for the number of trades executed

type Order

type Order struct {
	Side          OrderSide
	Security      string
	Price         big.Decimal
	Amount        big.Decimal
	ExecutionTime time.Time
}

Order represents a trade execution (buy or sell) with associated metadata.

type OrderSide

type OrderSide int

OrderSide is a simple enumeration representing the side of an Order (buy or sell)

const (
	BUY OrderSide = iota
	SELL
)

BUY and SELL enumerations

type OverIndicatorRule

type OverIndicatorRule struct {
	First  Indicator
	Second Indicator
}

OverIndicatorRule is a rule where the First Indicator must be greater than the Second Indicator to be Satisfied

func (OverIndicatorRule) IsSatisfied

func (oir OverIndicatorRule) IsSatisfied(index int, record *TradingRecord) bool

IsSatisfied returns true when the First Indicator is greater than the Second Indicator

type PercentGainAnalysis

type PercentGainAnalysis struct{}

PercentGainAnalysis analyzes the trading record for the percentage profit gained relative to start

func (PercentGainAnalysis) Analyze

func (pga PercentGainAnalysis) Analyze(record *TradingRecord) float64

Analyze analyzes the trading record for the percentage profit gained relative to start

type PeriodProfitAnalysis

type PeriodProfitAnalysis struct {
	Period time.Duration
}

PeriodProfitAnalysis analyzes the trading record for the average profit based on the time period provided. i.e., if the trading record spans a year of trading, and PeriodProfitAnalysis wraps one month, Analyze will return the total profit for the whole time period divided by 12.

func (PeriodProfitAnalysis) Analyze

func (ppa PeriodProfitAnalysis) Analyze(record *TradingRecord) float64

Analyze returns the average profit for the trading record based on the given duration

type Position

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

Position is a pair of two Order objects

func NewPosition

func NewPosition(openOrder Order) (t *Position)

NewPosition returns a new Position with the passed-in order as the open order

func (*Position) CostBasis

func (p *Position) CostBasis() big.Decimal

CostBasis returns the price to enter this order

func (*Position) Enter

func (p *Position) Enter(order Order)

Enter sets the open order to the order passed in

func (*Position) EntranceOrder

func (p *Position) EntranceOrder() *Order

EntranceOrder returns the entrance order of this position

func (*Position) Exit

func (p *Position) Exit(order Order)

Exit sets the exit order to the order passed in

func (*Position) ExitOrder

func (p *Position) ExitOrder() *Order

ExitOrder returns the exit order of this position

func (*Position) ExitValue

func (p *Position) ExitValue() big.Decimal

ExitValue returns the value accrued by closing the position

func (*Position) IsClosed

func (p *Position) IsClosed() bool

IsClosed returns true of there are both entrance and exit orders

func (*Position) IsLong

func (p *Position) IsLong() bool

IsLong returns true if the entrance order is a buy order

func (*Position) IsNew

func (p *Position) IsNew() bool

IsNew returns true if there is neither an entrance or exit order

func (*Position) IsOpen

func (p *Position) IsOpen() bool

IsOpen returns true if there is an entrance order but no exit order

func (*Position) IsShort

func (p *Position) IsShort() bool

IsShort returns true if the entrance order is a sell order

type PositionNewRule

type PositionNewRule struct{}

PositionNewRule is satisfied when the current position in the trading record is new (no open positions).

func (PositionNewRule) IsSatisfied

func (pnr PositionNewRule) IsSatisfied(index int, record *TradingRecord) bool

IsSatisfied returns true if the current position in the record is new

type PositionOpenRule

type PositionOpenRule struct{}

PositionOpenRule is satisfied when the current position in the trading record is open (position has been entered but not exited).

func (PositionOpenRule) IsSatisfied

func (pnr PositionOpenRule) IsSatisfied(index int, record *TradingRecord) bool

IsSatisfied returns true if the current position in the record is Open

type ProfitableTradesAnalysis

type ProfitableTradesAnalysis struct{}

ProfitableTradesAnalysis analyzes the trading record for the number of profitable trades

func (ProfitableTradesAnalysis) Analyze

func (pta ProfitableTradesAnalysis) Analyze(record *TradingRecord) float64

Analyze returns the number of profitable trades in a trading record

type Rule

type Rule interface {
	IsSatisfied(index int, record *TradingRecord) bool
}

Rule is an interface describing an algorithm by which a set of criteria may be satisfied

func And

func And(r1, r2 Rule) Rule

And returns a new rule whereby BOTH of the passed-in rules must be satisfied for the rule to be satisfied

func NewCrossDownIndicatorRule

func NewCrossDownIndicatorRule(upper, lower Indicator) Rule

NewCrossDownIndicatorRule returns a new rule that is satisfied when the upper indicator has crossed below the lower indicator.

func NewCrossUpIndicatorRule

func NewCrossUpIndicatorRule(upper, lower Indicator) Rule

NewCrossUpIndicatorRule returns a new rule that is satisfied when the lower indicator has crossed above the upper indicator.

func NewPercentChangeRule

func NewPercentChangeRule(indicator Indicator, percent float64) Rule

NewPercentChangeRule returns a rule whereby the given Indicator must have changed by a given percentage to be satisfied. You should specify percent as a float value between -1 and 1

func NewStopLossRule

func NewStopLossRule(series *TimeSeries, lossTolerance float64) Rule

NewStopLossRule returns a new rule that is satisfied when the given loss tolerance (a percentage) is met or exceeded. Loss tolerance should be a value between -1 and 1.

func Or

func Or(r1, r2 Rule) Rule

Or returns a new rule whereby ONE OF the passed-in rules must be satisfied for the rule to be satisfied

type RuleStrategy

type RuleStrategy struct {
	EntryRule      Rule
	ExitRule       Rule
	UnstablePeriod int
}

RuleStrategy is a strategy based on rules and an unstable period. The two rules determine whether a position should be created or closed, and the unstable period is an index before no positions should be created or exited

func (RuleStrategy) ShouldEnter

func (rs RuleStrategy) ShouldEnter(index int, record *TradingRecord) bool

ShouldEnter will return true when the index is less than the unstable period and the entry rule is satisfied

func (RuleStrategy) ShouldExit

func (rs RuleStrategy) ShouldExit(index int, record *TradingRecord) bool

ShouldExit will return true when the index is less than the unstable period and the exit rule is satisfied

type Strategy

type Strategy interface {
	ShouldEnter(index int, record *TradingRecord) bool
	ShouldExit(index int, record *TradingRecord) bool
}

Strategy is an interface that describes desired entry and exit trading behavior

type TimePeriod

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

TimePeriod is a simple struct that describes a period of time with a Start and End time

func NewTimePeriod

func NewTimePeriod(start time.Time, period time.Duration) TimePeriod

NewTimePeriod returns a TimePeriod starting at the given time and ending at the given time plus the given duration

func Parse deprecated

This function has been deprecated.
func Parse(timerange string) (tr TimePeriod, err error)

Parse takes a string in one of the following formats and returns a new TimePeriod, and optionally, an error

Deprecated: Please use ParseTimePeriod instead

func ParseTimePeriod

func ParseTimePeriod(period string) (TimePeriod, error)

ParseTimePeriod parses two datetimes as one string and returns it as a TimePeriod.

Note that if you were previously using Parse, the date format has changed to something more rfc3339-like (yyyy-mm-dd) Will accept any combination of date and time for either side. Omitting the right hand side will result in a time period ending in time.Now()

Example
// Any separator between two times is valid
parseable := "2009-01-20T12:00:00 -- 2017-01-20T12:00:00"
timePeriod, err := ParseTimePeriod(parseable)
if err != nil {
	return
}

fmt.Println(timePeriod.Start.Year(), timePeriod.End.Year())
Output:

2009 2017

func (TimePeriod) Advance

func (tp TimePeriod) Advance(iterations int) TimePeriod

Advance will return a new TimePeriod with the start and end periods moved forwards or backwards in time in accordance with the number of iterations given.

Example: A timePeriod that is one hour long, starting at unix time 0 and ending at unix time 3600, and advanced by one, will return a time period starting at unix time 3600 and ending at unix time 7200

func (TimePeriod) Format

func (tp TimePeriod) Format(layout string) string

Format returns the string representation of this timePeriod in the given format

func (TimePeriod) In

func (tp TimePeriod) In(location *time.Location) TimePeriod

In returns a copy of TimePeriod tp with both start and end times' location set to the specified location

func (TimePeriod) Length

func (tp TimePeriod) Length() time.Duration

Length returns the length of the period as a time.Duration value

func (TimePeriod) Since

func (tp TimePeriod) Since(other TimePeriod) time.Duration

Since returns the amount of time elapsed since the end of another TimePeriod as a time.Duration value

func (TimePeriod) String

func (tp TimePeriod) String() string

func (TimePeriod) UTC

func (tp TimePeriod) UTC() TimePeriod

UTC returns a copy of TimePeriod tp with both start and end times' location set to UTC

type TimeSeries

type TimeSeries struct {
	Candles []*Candle
}

TimeSeries represents an array of candles

func NewTimeSeries

func NewTimeSeries() (t *TimeSeries)

NewTimeSeries returns a new, empty, TimeSeries

func (*TimeSeries) AddCandle

func (ts *TimeSeries) AddCandle(candle *Candle) bool

AddCandle adds the given candle to this TimeSeries if it is not nil and after the last candle in this timeseries. If the candle is added, AddCandle will return true, otherwise it will return false.

func (*TimeSeries) LastCandle

func (ts *TimeSeries) LastCandle() *Candle

LastCandle will return the lastCandle in this series, or nil if this series is empty

func (*TimeSeries) LastIndex

func (ts *TimeSeries) LastIndex() int

LastIndex will return the index of the last candle in this series

type TotalProfitAnalysis

type TotalProfitAnalysis struct{}

TotalProfitAnalysis analyzes the trading record for total profit.

func (TotalProfitAnalysis) Analyze

func (tps TotalProfitAnalysis) Analyze(record *TradingRecord) float64

Analyze analyzes the trading record for total profit.

type TradingRecord

type TradingRecord struct {
	Trades []*Position
	// contains filtered or unexported fields
}

TradingRecord is an object describing a series of trades made and a current position

func NewTradingRecord

func NewTradingRecord() (t *TradingRecord)

NewTradingRecord returns a new TradingRecord

func (*TradingRecord) CurrentPosition

func (tr *TradingRecord) CurrentPosition() *Position

CurrentPosition returns the current position in this record

func (*TradingRecord) LastTrade

func (tr *TradingRecord) LastTrade() *Position

LastTrade returns the last trade executed in this record

func (*TradingRecord) Operate

func (tr *TradingRecord) Operate(order Order)

Operate takes an order and adds it to the current TradingRecord. It will only add the order if: - The current position is open and the passed order was executed after the entrance order - The current position is new and the passed order was executed after the last exit order

type UnderIndicatorRule

type UnderIndicatorRule struct {
	First  Indicator
	Second Indicator
}

UnderIndicatorRule is a rule where the First Indicator must be less than the Second Indicator to be Satisfied

func (UnderIndicatorRule) IsSatisfied

func (uir UnderIndicatorRule) IsSatisfied(index int, record *TradingRecord) bool

IsSatisfied returns true when the First Indicator is less than the Second Indicator

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
t or T : Toggle theme light dark auto