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

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