Merge pull request #1655 from c9s/c9s/xgap-vol-target

FEATURE: [xgap] add dailyTargetVolume option
This commit is contained in:
c9s 2024-06-18 17:10:49 +08:00 committed by GitHub
commit e953a04638
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -72,6 +72,7 @@ type Strategy struct {
DailyFeeBudgets map[string]fixedpoint.Value `json:"dailyFeeBudgets,omitempty"` DailyFeeBudgets map[string]fixedpoint.Value `json:"dailyFeeBudgets,omitempty"`
DailyMaxVolume fixedpoint.Value `json:"dailyMaxVolume,omitempty"` DailyMaxVolume fixedpoint.Value `json:"dailyMaxVolume,omitempty"`
DailyTargetVolume fixedpoint.Value `json:"dailyTargetVolume,omitempty"`
UpdateInterval types.Duration `json:"updateInterval"` UpdateInterval types.Duration `json:"updateInterval"`
SimulateVolume bool `json:"simulateVolume"` SimulateVolume bool `json:"simulateVolume"`
SimulatePrice bool `json:"simulatePrice"` SimulatePrice bool `json:"simulatePrice"`
@ -380,10 +381,13 @@ func (s *Strategy) placeOrders(ctx context.Context) {
} }
} }
s.mu.Unlock() s.mu.Unlock()
} else if s.DailyTargetVolume.Sign() > 0 {
numOfTicks := (24 * time.Hour) / s.UpdateInterval.Duration()
quantity = fixedpoint.NewFromFloat(s.DailyTargetVolume.Float64() / float64(numOfTicks))
quantity = quantityJitter(quantity, 0.02)
} else { } else {
// plus a 2% quantity jitter // plus a 2% quantity jitter
jitter := 1.0 + math.Max(0.02, rand.Float64()) quantity = quantityJitter(quantity, 0.02)
quantity = quantity.Mul(fixedpoint.NewFromFloat(jitter))
} }
log.Infof("%s quantity: %f", s.Symbol, quantity.Float64()) log.Infof("%s quantity: %f", s.Symbol, quantity.Float64())
@ -430,3 +434,8 @@ func (s *Strategy) cancelOrders(ctx context.Context) {
log.WithError(err).Error("cancel order error") log.WithError(err).Error("cancel order error")
} }
} }
func quantityJitter(q fixedpoint.Value, rg float64) fixedpoint.Value {
jitter := 1.0 + math.Max(rg, rand.Float64())
return q.Mul(fixedpoint.NewFromFloat(jitter))
}