volume
April 19, 2026 ยท View on GitHub
import "github.com/cinar/indicator/v2/strategy/volume"
Package volume contains the volume strategy functions.
This package belongs to the Indicator project. Indicator is a Golang module that supplies a variety of technical indicators, strategies, and a backtesting framework for analysis.
License
Copyright (c) 2021-2026 Onur Cinar.
The source code is provided under GNU AGPLv3 License.
https://github.com/cinar/indicator
Disclaimer
The information provided on this project is strictly for informational purposes and is not to be construed as advice or solicitation to buy or sell any security.
Index
- Constants
- func AllStrategies() []strategy.Strategy
- type ChaikinMoneyFlowStrategy
- func NewChaikinMoneyFlowStrategy() *ChaikinMoneyFlowStrategy
- func NewChaikinMoneyFlowStrategyWith(period int) *ChaikinMoneyFlowStrategy
- func (c *ChaikinMoneyFlowStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
- func (c *ChaikinMoneyFlowStrategy) Name() string
- func (c *ChaikinMoneyFlowStrategy) Report(snapshots <-chan *asset.Snapshot) *helper.Report
- type EaseOfMovementStrategy
- func NewEaseOfMovementStrategy() *EaseOfMovementStrategy
- func NewEaseOfMovementStrategyWith(period int) *EaseOfMovementStrategy
- func (e *EaseOfMovementStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
- func (e *EaseOfMovementStrategy) Name() string
- func (e *EaseOfMovementStrategy) Report(snapshots <-chan *asset.Snapshot) *helper.Report
- type ForceIndexStrategy
- func NewForceIndexStrategy() *ForceIndexStrategy
- func NewForceIndexStrategyWith(period int) *ForceIndexStrategy
- func (f *ForceIndexStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
- func (f *ForceIndexStrategy) Name() string
- func (f *ForceIndexStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
- type MoneyFlowIndexStrategy
- func NewMoneyFlowIndexStrategy() *MoneyFlowIndexStrategy
- func NewMoneyFlowIndexStrategyWith(sellAt, buyAt float64) *MoneyFlowIndexStrategy
- func (m *MoneyFlowIndexStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
- func (m *MoneyFlowIndexStrategy) Name() string
- func (m *MoneyFlowIndexStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
- type NegativeVolumeIndexStrategy
- func NewNegativeVolumeIndexStrategy() *NegativeVolumeIndexStrategy
- func NewNegativeVolumeIndexStrategyWith(emaPeriod int) *NegativeVolumeIndexStrategy
- func (n *NegativeVolumeIndexStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
- func (n *NegativeVolumeIndexStrategy) Name() string
- func (n *NegativeVolumeIndexStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
- type ObvStrategy
- type PercentBandMFIStrategy
- func NewPercentBandMFIStrategy() *PercentBandMFIStrategy
- func NewPercentBandMFIStrategyWith(sellPercentBAt, buyPercentBAt, sellMfiAt, buyMfiAt float64) *PercentBandMFIStrategy
- func (m *PercentBandMFIStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
- func (m *PercentBandMFIStrategy) Name() string
- func (m *PercentBandMFIStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
- type WeightedAveragePriceStrategy
- func NewWeightedAveragePriceStrategy() *WeightedAveragePriceStrategy
- func NewWeightedAveragePriceStrategyWith(period int) *WeightedAveragePriceStrategy
- func (v *WeightedAveragePriceStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
- func (v *WeightedAveragePriceStrategy) Name() string
- func (v *WeightedAveragePriceStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
Constants
const (
// DefaultMoneyFlowIndexStrategySellAt is the default sell at of 80.
DefaultMoneyFlowIndexStrategySellAt = 80
// DefaultMoneyFlowIndexStrategyBuyAt is the default buy at of 20.
DefaultMoneyFlowIndexStrategyBuyAt = 20
)
const (
// DefaultPercentBandMFIStrategyPercentBBuyAt is the default buy for %B at of 0.8.
DefaultPercentBandMFIStrategyPercentBBuyAt = 0.8
// DefaultPercentBandMFIStrategyPercentBSellAt is the default sell for %B at of 0.2.
DefaultPercentBandMFIStrategyPercentBSellAt = 0.2
// DefaultPercentBandMFIStrategyMfiBuyAt is the default buy for MFI at of 80.
DefaultPercentBandMFIStrategyMfiBuyAt = 80
// DefaultPercentBandMFIStrategyMfiSellAt is the default sell for MFI at of 20.
DefaultPercentBandMFIStrategyMfiSellAt = 20
)
const (
// DefaultNegativeVolumeIndexStrategyEmaPeriod is the default EMA period of 255.
DefaultNegativeVolumeIndexStrategyEmaPeriod = 255
)
const (
// DefaultObvStrategyPeriod is the default OBV strategy period.
DefaultObvStrategyPeriod = 10
)
func AllStrategies
func AllStrategies() []strategy.Strategy
AllStrategies returns a slice containing references to all available volume strategies.
type ChaikinMoneyFlowStrategy
ChaikinMoneyFlowStrategy represents the configuration parameters for calculating the Chaikin Money Flow strategy. Recommends a Buy action when it crosses above 0, and recommends a Sell action when it crosses below 0.
type ChaikinMoneyFlowStrategy struct {
// ChaikinMoneyFlow is the Chaikin Money Flow indicator instance.
ChaikinMoneyFlow *volume.Cmf[float64]
}
func NewChaikinMoneyFlowStrategy
func NewChaikinMoneyFlowStrategy() *ChaikinMoneyFlowStrategy
NewChaikinMoneyFlowStrategy function initializes a new Chaikin Money Flow strategy instance with the default parameters.
func NewChaikinMoneyFlowStrategyWith
func NewChaikinMoneyFlowStrategyWith(period int) *ChaikinMoneyFlowStrategy
NewChaikinMoneyFlowStrategyWith function initializes a new Chaikin Money Flow strategy instance with the given parameters.
func (*ChaikinMoneyFlowStrategy) Compute
func (c *ChaikinMoneyFlowStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
Compute function processes the provided asset snapshots and generates a stream of actionable recommendations.
func (*ChaikinMoneyFlowStrategy) Name
func (c *ChaikinMoneyFlowStrategy) Name() string
Name function returns the name of the strategy.
func (*ChaikinMoneyFlowStrategy) Report
func (c *ChaikinMoneyFlowStrategy) Report(snapshots <-chan *asset.Snapshot) *helper.Report
Report function processes the provided asset snapshots and generates a report annotated with the recommended actions.
type EaseOfMovementStrategy
EaseOfMovementStrategy represents the configuration parameters for calculating the Ease of Movement strategy. Recommends a Buy action when it crosses above 0, and recommends a Sell action when it crosses below 0.
type EaseOfMovementStrategy struct {
// EaseOfMovement is the Ease of Movement indicator instance.
EaseOfMovement *volume.Emv[float64]
}
func NewEaseOfMovementStrategy
func NewEaseOfMovementStrategy() *EaseOfMovementStrategy
NewEaseOfMovementStrategy function initializes a new Ease of Movement strategy instance with the default parameters.
func NewEaseOfMovementStrategyWith
func NewEaseOfMovementStrategyWith(period int) *EaseOfMovementStrategy
NewEaseOfMovementStrategyWith function initializes a new Ease of Movement strategy instance with the given parameters.
func (*EaseOfMovementStrategy) Compute
func (e *EaseOfMovementStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
Compute function processes the provided asset snapshots and generates a stream of actionable recommendations.
func (*EaseOfMovementStrategy) Name
func (e *EaseOfMovementStrategy) Name() string
Name function returns the name of the strategy.
func (*EaseOfMovementStrategy) Report
func (e *EaseOfMovementStrategy) Report(snapshots <-chan *asset.Snapshot) *helper.Report
Report function processes the provided asset snapshots and generates a report annotated with the recommended actions.
type ForceIndexStrategy
ForceIndexStrategy represents the configuration parameters for calculating the Force Index strategy. It recommends a Buy action when it crosses above zero, and a Sell action when it crosses below zero.
type ForceIndexStrategy struct {
// ForceIndex is the Force Index instance.
ForceIndex *volume.Fi[float64]
}
func NewForceIndexStrategy
func NewForceIndexStrategy() *ForceIndexStrategy
NewForceIndexStrategy function initializes a new Force Index strategy instance with the default parameters.
func NewForceIndexStrategyWith
func NewForceIndexStrategyWith(period int) *ForceIndexStrategy
NewForceIndexStrategyWith function initializes a new Force Index strategy instance with the given parameters.
func (*ForceIndexStrategy) Compute
func (f *ForceIndexStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
Compute processes the provided asset snapshots and generates a stream of actionable recommendations.
func (*ForceIndexStrategy) Name
func (f *ForceIndexStrategy) Name() string
Name returns the name of the strategy.
func (*ForceIndexStrategy) Report
func (f *ForceIndexStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
Report processes the provided asset snapshots and generates a report annotated with the recommended actions.
type MoneyFlowIndexStrategy
MoneyFlowIndexStrategy represents the configuration parameters for calculating the Money Flow Index strategy. Recommends a Sell action when it crosses over 80, and recommends a Buy action when it crosses below 20.
type MoneyFlowIndexStrategy struct {
// MoneyFlowIndex is the Money Flow Index indicator instance.
MoneyFlowIndex *volume.Mfi[float64]
// SellAt is the sell at value.
SellAt float64
// BuyAt is the buy at value.
BuyAt float64
}
func NewMoneyFlowIndexStrategy
func NewMoneyFlowIndexStrategy() *MoneyFlowIndexStrategy
NewMoneyFlowIndexStrategy function initializes a new Money Flow Index strategy instance with the default parameters.
func NewMoneyFlowIndexStrategyWith
func NewMoneyFlowIndexStrategyWith(sellAt, buyAt float64) *MoneyFlowIndexStrategy
NewMoneyFlowIndexStrategyWith function initializes a new Money Flow Index strategy instance with the given parameters.
func (*MoneyFlowIndexStrategy) Compute
func (m *MoneyFlowIndexStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
Compute processes the provided asset snapshots and generates a stream of actionable recommendations.
func (*MoneyFlowIndexStrategy) Name
func (m *MoneyFlowIndexStrategy) Name() string
Name returns the name of the strategy.
func (*MoneyFlowIndexStrategy) Report
func (m *MoneyFlowIndexStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
Report processes the provided asset snapshots and generates a report annotated with the recommended actions.
type NegativeVolumeIndexStrategy
NegativeVolumeIndexStrategy represents the configuration parameters for calculating the Negative Volume Index strategy. Recommends a Buy action when it crosses below its EMA, recommends a Sell action when it crosses above its EMA, and recommends a Hold action otherwise.
type NegativeVolumeIndexStrategy struct {
// NegativeVolumeIndex is the Negative Volume Index indicator instance.
NegativeVolumeIndex *volume.Nvi[float64]
// NegativeVolumeIndexEma is the Negative Volume Index EMA instance.
NegativeVolumeIndexEma *trend.Ema[float64]
}
func NewNegativeVolumeIndexStrategy
func NewNegativeVolumeIndexStrategy() *NegativeVolumeIndexStrategy
NewNegativeVolumeIndexStrategy function initializes a new Negative Volume Index strategy instance with the default parameters.
func NewNegativeVolumeIndexStrategyWith
func NewNegativeVolumeIndexStrategyWith(emaPeriod int) *NegativeVolumeIndexStrategy
NewNegativeVolumeIndexStrategyWith function initializes a new Negative Volume Index strategy instance with the given parameters.
func (*NegativeVolumeIndexStrategy) Compute
func (n *NegativeVolumeIndexStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
Compute processes the provided asset snapshots and generates a stream of actionable recommendations.
func (*NegativeVolumeIndexStrategy) Name
func (n *NegativeVolumeIndexStrategy) Name() string
Name returns the name of the strategy.
func (*NegativeVolumeIndexStrategy) Report
func (n *NegativeVolumeIndexStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
Report processes the provided asset snapshots and generates a report annotated with the recommended actions.
type ObvStrategy
ObvStrategy represents the configuration parameters for calculating the On-Balance Volume (OBV) strategy. Recommends a Buy action when OBV crosses above its SMA, and recommends a Sell action when OBV crosses below its SMA.
type ObvStrategy struct {
// Obv is the OBV indicator instance.
Obv *volume.Obv[float64]
// Sma is the SMA indicator instance.
Sma *trend.Sma[float64]
}
func NewObvStrategy
func NewObvStrategy() *ObvStrategy
NewObvStrategy function initializes a new OBV strategy instance with the default parameters.
func NewObvStrategyWith
func NewObvStrategyWith(period int) *ObvStrategy
NewObvStrategyWith function initializes a new OBV strategy instance with the given period.
func (*ObvStrategy) Compute
func (s *ObvStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
Compute function processes the provided asset snapshots and generates a stream of actionable recommendations.
func (*ObvStrategy) Name
func (s *ObvStrategy) Name() string
Name function returns the name of the strategy.
func (*ObvStrategy) Report
func (s *ObvStrategy) Report(snapshots <-chan *asset.Snapshot) *helper.Report
Report function processes the provided asset snapshots and generates a report annotated with the recommended actions.
type PercentBandMFIStrategy
PercentBandMFIStrategy represents the configuration parameters for calculating the %B combined with MFI strategy. Recommends a Buy action when %B is above 0.8 and MFI is above 80, and recommends a Sell action when %B is below 0.2 and MFI is below 20.
type PercentBandMFIStrategy struct {
// MoneyFlowIndex is the Money Flow Index indicator instance.
MoneyFlowIndex *volume.Mfi[float64]
// PercentB is the %B indicator instance.
PercentB *volatility.PercentB[float64]
// SellPercentBAt is the sell at value of %B.
SellPercentBAt float64
// BuyPercentBAt is the buy at value of %B.
BuyPercentBAt float64
// SellMfiAt is the sell at value of MFI.
SellMfiAt float64
// BuyMfiAt is the buy at value of MFI.
BuyMfiAt float64
}
func NewPercentBandMFIStrategy
func NewPercentBandMFIStrategy() *PercentBandMFIStrategy
NewPercentBandMFIStrategy function initializes a new PercentBandMFI strategy instance with the default parameters.
func NewPercentBandMFIStrategyWith
func NewPercentBandMFIStrategyWith(sellPercentBAt, buyPercentBAt, sellMfiAt, buyMfiAt float64) *PercentBandMFIStrategy
NewPercentBandMFIStrategyWith function initializes a new PercentBandMFI strategy instance with the given parameters.
func (*PercentBandMFIStrategy) Compute
func (m *PercentBandMFIStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
Compute processes the provided asset snapshots and generates a stream of actionable recommendations.
func (*PercentBandMFIStrategy) Name
func (m *PercentBandMFIStrategy) Name() string
Name returns the name of the strategy.
func (*PercentBandMFIStrategy) Report
func (m *PercentBandMFIStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
Report processes the provided asset snapshots and generates a report annotated with the recommended actions.
type WeightedAveragePriceStrategy
WeightedAveragePriceStrategy represents the configuration parameters for calculating the Weighted Average Price strategy. Recommends a Buy action when the closing crosses below the VWAP, recommends a Sell action when the closing crosses above the VWAP, and recommends a Hold action otherwise.
type WeightedAveragePriceStrategy struct {
// WeightedAveragePrice is the Weighted Average Price indicator instance.
WeightedAveragePrice *volume.Vwap[float64]
}
func NewWeightedAveragePriceStrategy
func NewWeightedAveragePriceStrategy() *WeightedAveragePriceStrategy
NewWeightedAveragePriceStrategy function initializes a new Weighted Average Price strategy instance with the default parameters.
func NewWeightedAveragePriceStrategyWith
func NewWeightedAveragePriceStrategyWith(period int) *WeightedAveragePriceStrategy
NewWeightedAveragePriceStrategyWith function initializes a new Weighted Average Price strategy instance with the given parameters.
func (*WeightedAveragePriceStrategy) Compute
func (v *WeightedAveragePriceStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
Compute processes the provided asset snapshots and generates a stream of actionable recommendations.
func (*WeightedAveragePriceStrategy) Name
func (v *WeightedAveragePriceStrategy) Name() string
Name returns the name of the strategy.
func (*WeightedAveragePriceStrategy) Report
func (v *WeightedAveragePriceStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
Report processes the provided asset snapshots and generates a report annotated with the recommended actions.
Generated by gomarkdoc