44 lines
905 B
Go
44 lines
905 B
Go
package surge
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/banbox/banbot/config"
|
|
"github.com/banbox/banbot/strat"
|
|
ta "github.com/banbox/banta"
|
|
)
|
|
|
|
type volSta struct {
|
|
rate float64
|
|
}
|
|
|
|
func goMaxVol(pol *config.RunPolicyConfig) *strat.TradeStrat {
|
|
return &strat.TradeStrat{
|
|
WarmupNum: 100,
|
|
BatchInOut: true,
|
|
OnStartUp: func(s *strat.StratJob) {
|
|
s.More = &volSta{}
|
|
},
|
|
OnBar: func(s *strat.StratJob) {
|
|
e := s.Env
|
|
more, _ := s.More.(*volSta)
|
|
bigVolMa := ta.SMA(e.Volume, 100).Get(0)
|
|
more.rate = e.Volume.Get(0)/bigVolMa - 1
|
|
},
|
|
OnBatchJobs: func(jobs []*strat.StratJob) {
|
|
var maxIn, maxOut *strat.StratJob
|
|
var inVal, outVal float64
|
|
for _, j := range jobs {
|
|
sta, _ := j.More.(*volSta)
|
|
if sta.rate < outVal {
|
|
outVal = sta.rate
|
|
maxOut = j
|
|
} else if sta.rate > inVal {
|
|
inVal = sta.rate
|
|
maxIn = j
|
|
}
|
|
}
|
|
fmt.Printf("%v %v", maxIn, maxOut)
|
|
},
|
|
}
|
|
}
|