mirror of
https://github.com/lukewilson2002/autotrader.git
synced 2025-08-03 05:29:32 +00:00
Add indexed frame shifting
This commit is contained in:
26
series.go
26
series.go
@@ -400,6 +400,32 @@ func (s *Series) Rolling(period int) *RollingSeries {
|
||||
return NewRollingSeries(s, period)
|
||||
}
|
||||
|
||||
func (s *Series) Shift(periods int, nilVal any) *Series {
|
||||
if periods == 0 {
|
||||
return s
|
||||
} else if periods > 0 {
|
||||
// Shift values forward.
|
||||
for i := s.Len() - 1; i >= periods; i-- {
|
||||
s.data[i] = s.data[i-periods]
|
||||
}
|
||||
// Fill in nil values.
|
||||
for i := 0; i < periods; i++ {
|
||||
s.data[i] = nilVal
|
||||
}
|
||||
} else {
|
||||
periods = -periods
|
||||
// Shift values backward.
|
||||
for i := 0; i < periods; i++ {
|
||||
s.data[i] = s.data[periods-i]
|
||||
}
|
||||
// Fill in nil values.
|
||||
for i := periods; i < s.Len(); i++ {
|
||||
s.data[i] = nilVal
|
||||
}
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
type RollingSeries struct {
|
||||
series *Series
|
||||
period int
|
||||
|
Reference in New Issue
Block a user