trade_knife

package module
v0.0.16 Latest Latest
Warning

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

Go to latest
Published: Aug 27, 2021 License: Apache-2.0 Imports: 24 Imported by: 0

README

Trade Knife

Switzer knife on your trading times

More info to come soon.

Documentation

Overview

Package trade_knife will provide fundamental concept and utils to operate with financial time-series data.

Index

Constants

View Source
const (
	// Intervals
	Interval1m  = Interval("1m")
	Interval3m  = Interval("3m")
	Interval5m  = Interval("5m")
	Interval15m = Interval("15m")
	Interval30m = Interval("30m")
	Interval1h  = Interval("1h")
	Interval2h  = Interval("2h")
	Interval4h  = Interval("4h")
	Interval6h  = Interval("6h")
	Interval8h  = Interval("8h")
	Interval12h = Interval("12h")
	Interval1d  = Interval("1d")
	Interval3d  = Interval("3d")
	Interval1w  = Interval("1w")
	Interval1M  = Interval("1M")

	// single sources
	SourceOpen   = Source("open")
	SourceHigh   = Source("high")
	SourceLow    = Source("low")
	SourceClose  = Source("close")
	SourceVolume = Source("volume")

	// double sources
	SourceOpenHigh  = Source("oh2")
	SourceOpenLow   = Source("ol2")
	SourceOpenClose = Source("oc2")
	SourceHighLow   = Source("hl2")
	SourceHighClose = Source("hc2")
	SourceLowClose  = Source("lc2")

	// triple sources
	SourceOpenHighLow   = Source("ohl3")
	SourceOpenHighClose = Source("ohc3")
	SourceOpenLowClose  = Source("olc3")
	SourceHighLowClose  = Source("hlc3")

	// all together
	SourceOpenHighLowClose = Source("ohlc4")

	// Position types
	PositionBuy  = PositionType("Buy")
	PositionSell = PositionType("Sell")

	// Trade statuses
	TradeStatusOpen  = TradeStatus("Open")
	TradeStatusClose = TradeStatus("Close")

	// Exit signals
	ExitCauseStopLossTriggered   = ExitCause("Stop loss")
	ExitCauseTakeProfitTriggered = ExitCause("Take profit")
	ExitCauseMarket              = ExitCause("Market")

	// Market types
	MarketSpot     = MarketType("Spot")
	MarketFutures  = MarketType("Futures")
	MarketDelivery = MarketType("Delivery")
)

Variables

View Source
var (
	ErrInvalidCandleData = errors.New("invalid data provided for candle").(CandleError)
	ErrNotEnoughCandles  = errors.New("not enough candles to operate").(CandleError)
	ErrInvalidSource     = errors.New("invalid source provided").(SourceError)
)

Functions

func AutoFiboRectracement added in v0.0.11

func AutoFiboRectracement(inHigh, inLow, inClose, ratios []float64, depth int, deviation float64) []map[float64]float64

func NewCandle

func NewCandle(open, high, low, close, volume float64, openTime, closeTime time.Time, previous, next *Candle) (candle *Candle, err CandleError)

Returns a pointer to a fresh candle with provided data.

func Plot

func Plot(quote Quote, width, height vg.Length, extension string, tags []IndicatorTag) (io.WriterTo, error)

Returns a writer of candlestick plot image.

Types

type AutoFibo

type AutoFibo struct {
	Tag       IndicatorTag `mapstructure:"tag"`
	Ratios    []float64    `mapstructure:"ratios"`
	Deviation float64      `mapstructure:"deviation"`
	Depth     int          `mapstructure:"depth"`
}

func (*AutoFibo) Add added in v0.0.11

func (af *AutoFibo) Add(q *Quote, c *Candle) (ok bool)

func (*AutoFibo) Is added in v0.0.12

func (af *AutoFibo) Is(tag IndicatorTag) bool

type BollingerBandsB added in v0.0.14

type BollingerBandsB struct {
	Tag IndicatorTag      `mapstructure:"tag"`
	Std StandardDeviation `mapstructure:"standardDeviation"`
}

func (*BollingerBandsB) Add added in v0.0.14

func (bbb *BollingerBandsB) Add(q *Quote, c *Candle) (ok bool)

func (*BollingerBandsB) Is added in v0.0.14

func (bbb *BollingerBandsB) Is(tag IndicatorTag) bool

type Candle

type Candle struct {
	Open       float64                  `json:"open"`
	High       float64                  `json:"high"`
	Low        float64                  `json:"low"`
	Close      float64                  `json:"close"`
	Volume     float64                  `json:"volume"`
	Score      float64                  `json:"score"`
	Indicators map[IndicatorTag]float64 `json:"indicators"`
	Opentime   time.Time                `json:"open_time"`
	Closetime  time.Time                `json:"close_time"`
	Next       *Candle                  `json:"-"`
	Previous   *Candle                  `json:"-"`
}

Candle is the main structure which contains a group of useful candlestick data.

func (*Candle) AddIndicator

func (c *Candle) AddIndicator(tag IndicatorTag, value float64)

Add indicator value by the given name into the candle.

func (*Candle) CrossedOver added in v0.0.15

func (c *Candle) CrossedOver(fastSource, slowSource Source) bool

Check if fast source crossed over the slow source.

fastSource > slowSource prevfastSource <= prevslowSource

func (*Candle) CrossedUnder added in v0.0.15

func (c *Candle) CrossedUnder(fastSource, slowSource Source) bool

Check if fast source crossed under the slow source.

fastSource < slowSource prevFastSource >= prevSlowSource

func (*Candle) Csv

func (c *Candle) Csv(indicators ...IndicatorTag) (csv string)

Returns csv row of the candle.

func (*Candle) Get

func (c *Candle) Get(source Source) float64

Retrieve the value of the target field on the candle.

func (*Candle) IsAbove added in v0.0.15

func (c *Candle) IsAbove(source Source) bool

Check if candle is above of the source

O,H,L,C > source

func (*Candle) IsBearish added in v0.0.15

func (c *Candle) IsBearish() bool

Check if candle is bearish

O < C,

func (*Candle) IsBelow added in v0.0.15

func (c *Candle) IsBelow(source Source) bool

Check if candle is below of the source.

O,H,L,C < source

func (*Candle) IsBullish added in v0.0.15

func (c *Candle) IsBullish() bool

Check if candle is bullish

O > C,

func (*Candle) IsMiddle added in v0.0.15

func (c *Candle) IsMiddle(source Source) bool

Check if source is passed through middle of the candle

O >= source, H > source, L < source, C <= source,

func (*Candle) TouchedDown added in v0.0.15

func (c *Candle) TouchedDown(source Source) bool

Check if candle closed above the source but the Low shadow touched the source.

O,H,C > source L <= source

func (*Candle) TouchedUp added in v0.0.15

func (c *Candle) TouchedUp(source Source) bool

Check if candle close above the source but the High shadow touched the source.

H >= source O,L,C < source

type CandleChannel

type CandleChannel chan *Candle

type CandleError

type CandleError error

type EnterCause

type EnterCause string

type EnterChannel

type EnterChannel chan EnterSignal

type EnterSignal

type EnterSignal struct {
	Score      float64
	Cause      EnterCause
	Symbol     string
	Candle     Candle
	Quote      float64
	TakeProfit float64
	Stoploss   float64
}

type ExitCause

type ExitCause string

type ExitChannel

type ExitChannel chan ExitSignal

type ExitSignal

type ExitSignal struct {
	Trade  *Trade
	Candle *Candle
	Cause  ExitCause
}

type Hp added in v0.0.11

type Hp struct {
	Tag    IndicatorTag `mapstructure:"tag"`
	Source Source       `mapstructure:"source"`
	Lambda float64      `mapstructure:"lambda"`
	Length int          `mapstructure:"length"`
}

func (*Hp) Add added in v0.0.11

func (hp *Hp) Add(q *Quote, c *Candle) (ok bool)

func (*Hp) Is added in v0.0.12

func (hp *Hp) Is(tag IndicatorTag) bool

type Indicator added in v0.0.11

type Indicator interface {
	Add(q *Quote, c *Candle) (ok bool)
	Is(tag IndicatorTag) bool
}

type IndicatorTag added in v0.0.11

type IndicatorTag string

type Interval

type Interval string

Interval is the timeframe concept and determines duration of each candle.

func (Interval) Duration

func (i Interval) Duration() time.Duration

Returns actual duration of the interval.

func (Interval) GetPeriod

func (i Interval) GetPeriod(ts int64) (ot *time.Time, ct *time.Time, err error)

Returns the open and close time which the interval can fit in.

type LinearRegression added in v0.0.14

type LinearRegression struct {
	Tag          IndicatorTag `mapstructure:"tag"`
	Source       Source       `mapstructure:"source"`
	InTimePeriod int          `mapstructure:"period"`
}

func (*LinearRegression) Add added in v0.0.14

func (lr *LinearRegression) Add(q *Quote, c *Candle) (ok bool)

func (*LinearRegression) Is added in v0.0.14

func (lr *LinearRegression) Is(tag IndicatorTag) bool

type Ma added in v0.0.11

type Ma struct {
	Tag          IndicatorTag `mapstructure:"tag"`
	Source       Source       `mapstructure:"source"`
	Type         talib.MaType `mapstructure:"type"`
	InTimePeriod int          `mapstructure:"period"`
}

func (*Ma) Add added in v0.0.11

func (ma *Ma) Add(q *Quote, c *Candle) (ok bool)

func (*Ma) Is added in v0.0.12

func (ma *Ma) Is(tag IndicatorTag) bool

type MarketType

type MarketType string

type PaperTrader

type PaperTrader struct {
	Trades Trades

	BuyScoreTrigger  float64
	SellScoreTrigger float64
	CloseOnOpposite  bool
	Cross            bool
	Debug            bool
	// contains filtered or unexported fields
}

PaperTrader exchange papertrade driver.

func NewPaperTrader

func NewPaperTrader(candleChannel CandleChannel, entryChannel EnterChannel, buyscoreTrigger, sellscoreTrigger float64, closeOnOpposite, cross bool) *PaperTrader

Returns a pointer to fresh binance papertrade driver.

func (*PaperTrader) Close

func (pt *PaperTrader) Close(id string, exit float64, closeCandle *Candle)

func (*PaperTrader) CloseWatcher

func (pt *PaperTrader) CloseWatcher()

Watch for close signals and close the trade immediately.

func (*PaperTrader) EntryWatcher

func (pt *PaperTrader) EntryWatcher()

Watch for entry signals and open proper positions.

func (*PaperTrader) ExitWatcher

func (pt *PaperTrader) ExitWatcher()

Watch for exit signals and and fire proper close signals.

func (*PaperTrader) Open

func (pt *PaperTrader) Open(id, symbol, base string, position PositionType, quote, entry, sl, tp float64, openCandle *Candle) *Trade

Create a new trade immediately.

func (*PaperTrader) Start

func (pt *PaperTrader) Start() TradeError

Launch all watchers of the driver.

type PositionType

type PositionType string

type Quote

type Quote struct {
	Market   MarketType
	Symbol   string
	Interval Interval
	Candles  []*Candle
}

Quote is the group of candles and make time-series.

func NewQuoteFromBinance

func NewQuoteFromBinance(apiKey, secretKey, symbol string, market MarketType, interval Interval, openTimestamp ...int64) (*Quote, error)

Fetches quote from binance market.

func NewQuoteFromCsv

func NewQuoteFromCsv(filename string, market MarketType, symbol string, interval Interval) (*Quote, error)

Read quote from csv file.

func (*Quote) AddIndicator

func (q *Quote) AddIndicator(tag IndicatorTag, values []float64) error

Add indicator values by the given tag into the quote.

func (Quote) Csv

func (q Quote) Csv(indicators ...IndicatorTag) (csv string)

Returns csv formated string of whole quote.

func (*Quote) Find

func (q *Quote) Find(timestamp int64) (*Candle, int)

Search for a candle and it's index amoung Quote by it's symbol and provided timestamp.

func (*Quote) Get

func (q *Quote) Get(source Source) []float64

Retrieve value of target field on all candles.

func (*Quote) IndicatorTags added in v0.0.11

func (q *Quote) IndicatorTags() []IndicatorTag

Returns a list of indicators used in quote.

func (*Quote) Merge

func (q *Quote) Merge(target *Quote)

Merge target quote into the current quote, rewrite duplicates and sort it.

func (*Quote) RefreshBinance

func (q *Quote) RefreshBinance(apiKey, secretKey string) error

Fetch all candles after last candle including itself.

func (*Quote) ScoreByAbove added in v0.0.16

func (q *Quote) ScoreByAbove(score float64, source Source)

Score candles by checking if candles are above source.

func (*Quote) ScoreByBands added in v0.0.15

func (q *Quote) ScoreByBands(score float64, source Source)

Score candles by checking touching and turning back into the band.

func (*Quote) ScoreByBearish added in v0.0.16

func (q *Quote) ScoreByBearish(score float64)

Score candles by if candle is bearish

func (*Quote) ScoreByBelow added in v0.0.16

func (q *Quote) ScoreByBelow(score float64, source Source)

Score candles by checking if candles are below source.

func (*Quote) ScoreByBullish added in v0.0.16

func (q *Quote) ScoreByBullish(score float64)

Score candles by checking if candles are bullish.

func (*Quote) ScoreByCross added in v0.0.15

func (q *Quote) ScoreByCross(score float64, fastSource, slowSource Source)

Score candles by checking sources cross over/under condition on each of them.

func (*Quote) ScoreByCrossDown added in v0.0.16

func (q *Quote) ScoreByCrossDown(score float64, fastSource, slowSource Source)

Score candles by checking sources cross under condition on each of them.

func (*Quote) ScoreByCrossOver added in v0.0.16

func (q *Quote) ScoreByCrossOver(score float64, fastSource, slowSource Source)

Score candles by checking sources cross over condition on each of them.

func (*Quote) ScoreByMiddle added in v0.0.16

func (q *Quote) ScoreByMiddle(score float64, source Source)

Score candles by checking if candles are middle of the source.

func (*Quote) ScoreBySupportResistance added in v0.0.15

func (q *Quote) ScoreBySupportResistance(score float64, source Source)

Score candles by checking support/resistance line reaction.

func (*Quote) ScoreByTouchDown added in v0.0.16

func (q *Quote) ScoreByTouchDown(score float64, source Source)

Score candles by checking if candles are touching down source.

func (*Quote) ScoreByTouchUp added in v0.0.16

func (q *Quote) ScoreByTouchUp(score float64, source Source)

Score candles by checking if candles are touching up source.

func (*Quote) Sort

func (q *Quote) Sort()

Run through the quote and reorder candles by the open time.

func (*Quote) Sync

func (q *Quote) Sync(open, high, low, close, volume float64, openTime, closeTime time.Time, sCandle ...*Candle) (candle *Candle, err CandleError)

Search the quote for provided candle and update it if it exists, otherwise it will append to end of the quote.

If you want to update a candle directly then pass sCandle

func (*Quote) SyncBinance

func (q *Quote) SyncBinance(update CandleChannel) (doneC chan struct{}, err error)

Will sync quote with latest binance kline info.

func (Quote) WriteToCsv

func (q Quote) WriteToCsv(filename string, indicators ...IndicatorTag) error

Writes down whole quote into a csv file.

type Source

type Source string

Source is a target field on candle.

type SourceError

type SourceError error

type StandardDeviation added in v0.0.14

type StandardDeviation struct {
	Tag          IndicatorTag `mapstructure:"tag"`
	Source       Source       `mapstructure:"source"`
	InTimePeriod int          `mapstructure:"period"`
	Deviation    float64      `mapstructure:"deviation"`
}

func (*StandardDeviation) Add added in v0.0.14

func (sd *StandardDeviation) Add(q *Quote, c *Candle) (ok bool)

func (*StandardDeviation) Is added in v0.0.14

func (sd *StandardDeviation) Is(tag IndicatorTag) bool

type Stoch added in v0.0.11

type Stoch struct {
	Tag           IndicatorTag `mapstructure:"tag"`
	KTag          IndicatorTag `mapstructure:"kTag"`
	DTag          IndicatorTag `mapstructure:"dTag"`
	InFastKPeriod int          `mapstructure:"kLength"`
	InSlowKPeriod int          `mapstructure:"kSmoothing"`
	InKMaType     talib.MaType `mapstructure:"kMaType"`
	InSlowDPeriod int          `mapstructure:"dSmoothing"`
	InDMaType     talib.MaType `mapstructure:"dMaType"`
}

func (*Stoch) Add added in v0.0.11

func (s *Stoch) Add(q *Quote, c *Candle) (ok bool)

func (*Stoch) Is added in v0.0.12

func (s *Stoch) Is(tag IndicatorTag) bool

type Trade

type Trade struct {
	Id                string
	Driver            string
	Symbol            string
	Base              string
	Quote             float64
	Amount            float64
	Entry             float64
	Exit              float64
	ProfitPrice       float64
	ProfitPercentage  float64
	StopLossPercent   float64
	StopLossPrice     float64
	TakeProfitPercent float64
	TakeProfitPrice   float64
	Position          PositionType
	Status            TradeStatus
	OpenCandle        *Candle
	CloseCandle       *Candle
	OpenAt            *time.Time
	CloseAt           *time.Time
}

func NewTrade

func NewTrade(id, driver, symbol, base string, position PositionType, quote, entry float64, sl, tp float64, openCandle *Candle) *Trade

returns a pointer to a fresh trade.

func (*Trade) Close

func (t *Trade) Close(price float64, candle *Candle)

Close an active trade.

func (Trade) String

func (t Trade) String() string

Stringify the trade.

type TradeError

type TradeError error

type TradeStatus

type TradeStatus string

type Trader

type Trader interface {
	Open(id, symbol, base string, position PositionType, quote, entry float64, sl, tp float64, openCandle *Candle) *Trade
	Close(id, exit float64, closeCandle *Candle)
	EntryWatcher()
	ExitWatcher()
	CloseWatcher()
}

Interface to determine how a trader should implements.

type Trades

type Trades []*Trade

func (Trades) Find

func (t Trades) Find(id string) (*Trade, int)

Search for a trade and it's index amoung all trades.

type TradesChannel

type TradesChannel chan *Trade

Jump to

Keyboard shortcuts

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