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 }