github.com/diadata-org/diadata@v1.4.593/internal/pkg/filtersBlockService/FilterVOL.go (about)

     1  package filters
     2  
     3  import (
     4  	"math"
     5  	"strconv"
     6  	"time"
     7  
     8  	"github.com/diadata-org/diadata/pkg/dia"
     9  	models "github.com/diadata-org/diadata/pkg/model"
    10  	log "github.com/sirupsen/logrus"
    11  )
    12  
    13  type FilterVOL struct {
    14  	asset       dia.Asset
    15  	exchange    string
    16  	currentTime time.Time
    17  	volumeUSD   float64
    18  	value       float64
    19  	filterName  string
    20  	memory      int
    21  	modified    bool
    22  }
    23  
    24  func NewFilterVOL(asset dia.Asset, exchange string, memory int) *FilterVOL {
    25  	filter := &FilterVOL{
    26  		asset:      asset,
    27  		exchange:   exchange,
    28  		volumeUSD:  0.0,
    29  		filterName: "VOL" + strconv.Itoa(memory),
    30  		memory:     memory,
    31  	}
    32  	return filter
    33  }
    34  
    35  func (filter *FilterVOL) Compute(trade dia.Trade) {
    36  	filter.compute(trade)
    37  }
    38  func (filter *FilterVOL) FinalCompute(t time.Time) {
    39  	filter.finalCompute(t)
    40  }
    41  
    42  func (filter *FilterVOL) compute(trade dia.Trade) {
    43  	filter.modified = true
    44  	filter.volumeUSD += trade.EstimatedUSDPrice * math.Abs(trade.Volume)
    45  	filter.currentTime = trade.Time
    46  }
    47  
    48  func (filter *FilterVOL) finalCompute(time time.Time) float64 {
    49  	filter.value = filter.volumeUSD
    50  	filter.volumeUSD = 0.0
    51  	return filter.value
    52  }
    53  
    54  func (filter *FilterVOL) filterPointForBlock() *dia.FilterPoint {
    55  	return nil
    56  }
    57  
    58  func (filter *FilterVOL) FilterPointForBlock() *dia.FilterPoint {
    59  	return &dia.FilterPoint{
    60  		Asset: filter.asset,
    61  		Value: filter.value,
    62  		Name:  filter.filterName,
    63  		Time:  filter.currentTime,
    64  	}
    65  }
    66  
    67  func (filter *FilterVOL) save(ds models.Datastore) error {
    68  	if filter.modified {
    69  		filter.modified = false
    70  		err := ds.SetFilter(filter.filterName, filter.asset, filter.exchange, filter.value, filter.currentTime)
    71  		if err != nil {
    72  			log.Errorln("FilterVOL Error:", err)
    73  		}
    74  		return err
    75  	}
    76  	return nil
    77  }