xgap: add dailyTargetVolume option

This commit is contained in:
c9s 2024-06-18 16:49:47 +08:00
parent 468f928142
commit 589a8b6eb2
No known key found for this signature in database
GPG Key ID: 7385E7E464CB0A54

View File

@ -70,11 +70,12 @@ type Strategy struct {
Quantity fixedpoint.Value `json:"quantity"`
DryRun bool `json:"dryRun"`
DailyFeeBudgets map[string]fixedpoint.Value `json:"dailyFeeBudgets,omitempty"`
DailyMaxVolume fixedpoint.Value `json:"dailyMaxVolume,omitempty"`
UpdateInterval types.Duration `json:"updateInterval"`
SimulateVolume bool `json:"simulateVolume"`
SimulatePrice bool `json:"simulatePrice"`
DailyFeeBudgets map[string]fixedpoint.Value `json:"dailyFeeBudgets,omitempty"`
DailyMaxVolume fixedpoint.Value `json:"dailyMaxVolume,omitempty"`
DailyTargetVolume fixedpoint.Value `json:"dailyTargetVolume,omitempty"`
UpdateInterval types.Duration `json:"updateInterval"`
SimulateVolume bool `json:"simulateVolume"`
SimulatePrice bool `json:"simulatePrice"`
sourceSession, tradingSession *bbgo.ExchangeSession
sourceMarket, tradingMarket types.Market
@ -380,10 +381,13 @@ func (s *Strategy) placeOrders(ctx context.Context) {
}
}
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 {
// plus a 2% quantity jitter
jitter := 1.0 + math.Max(0.02, rand.Float64())
quantity = quantity.Mul(fixedpoint.NewFromFloat(jitter))
quantity = quantityJitter(quantity, 0.02)
}
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")
}
}
func quantityJitter(q fixedpoint.Value, rg float64) fixedpoint.Value {
jitter := 1.0 + math.Max(rg, rand.Float64())
return q.Mul(fixedpoint.NewFromFloat(jitter))
}