mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-10 09:11:55 +00:00
Compare commits
4 Commits
4d1c357c3d
...
294e529a98
Author | SHA1 | Date | |
---|---|---|---|
|
294e529a98 | ||
|
f30aca1b5a | ||
|
f9b9832fff | ||
|
2bf1072977 |
|
@ -426,10 +426,10 @@ func (s *Strategy) updateQuote(ctx context.Context) {
|
|||
if s.CircuitBreaker != nil {
|
||||
now := time.Now()
|
||||
if reason, halted := s.CircuitBreaker.IsHalted(now); halted {
|
||||
s.logger.Warnf("[arbWorker] strategy is halted, reason: %s", reason)
|
||||
s.logger.Warnf("strategy %s is halted, reason: %s", ID, reason)
|
||||
|
||||
if s.circuitBreakerAlertLimiter.AllowN(now, 1) {
|
||||
bbgo.Notify("Strategy is halted, reason: %s", reason)
|
||||
bbgo.Notify("Strategy %s is halted, reason: %s", ID, reason)
|
||||
}
|
||||
|
||||
return
|
||||
|
@ -438,6 +438,7 @@ func (s *Strategy) updateQuote(ctx context.Context) {
|
|||
|
||||
bestBid, bestAsk, hasPrice := s.book.BestBidAndAsk()
|
||||
if !hasPrice {
|
||||
s.logger.Warnf("no valid price, skip quoting")
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -474,15 +475,21 @@ func (s *Strategy) updateQuote(ctx context.Context) {
|
|||
// check maker's balance quota
|
||||
// we load the balances from the account while we're generating the orders,
|
||||
// the balance may have a chance to be deducted by other strategies or manual orders submitted by the user
|
||||
makerBalances := s.makerSession.GetAccount().Balances()
|
||||
makerBalances := s.makerSession.GetAccount().Balances().NotZero()
|
||||
|
||||
s.logger.Infof("maker balances: %+v", makerBalances)
|
||||
|
||||
makerQuota := &bbgo.QuotaTransaction{}
|
||||
if b, ok := makerBalances[s.makerMarket.BaseCurrency]; ok {
|
||||
if b.Available.Compare(s.makerMarket.MinQuantity) > 0 {
|
||||
makerQuota.BaseAsset.Add(b.Available)
|
||||
} else {
|
||||
if s.makerMarket.IsDustQuantity(b.Available, s.lastPrice) {
|
||||
disableMakerAsk = true
|
||||
s.logger.Infof("%s maker ask disabled: insufficient base balance %s", s.Symbol, b.String())
|
||||
} else {
|
||||
makerQuota.BaseAsset.Add(b.Available)
|
||||
}
|
||||
} else {
|
||||
disableMakerAsk = true
|
||||
s.logger.Infof("%s maker ask disabled: base balance %s not found", s.Symbol, b.String())
|
||||
}
|
||||
|
||||
if b, ok := makerBalances[s.makerMarket.QuoteCurrency]; ok {
|
||||
|
@ -492,6 +499,9 @@ func (s *Strategy) updateQuote(ctx context.Context) {
|
|||
disableMakerBid = true
|
||||
s.logger.Infof("%s maker bid disabled: insufficient quote balance %s", s.Symbol, b.String())
|
||||
}
|
||||
} else {
|
||||
disableMakerBid = true
|
||||
s.logger.Infof("%s maker bid disabled: quote balance %s not found", s.Symbol, b.String())
|
||||
}
|
||||
|
||||
// if
|
||||
|
@ -511,6 +521,7 @@ func (s *Strategy) updateQuote(ctx context.Context) {
|
|||
hedgeAccount.MarginLevel.String(),
|
||||
s.MinMarginLevel.String())
|
||||
|
||||
// TODO: should consider base asset debt as well.
|
||||
if quote, ok := hedgeAccount.Balance(s.sourceMarket.QuoteCurrency); ok {
|
||||
quoteDebt := quote.Debt()
|
||||
if quoteDebt.Sign() > 0 {
|
||||
|
@ -840,6 +851,7 @@ func (s *Strategy) updateQuote(ctx context.Context) {
|
|||
createdOrders, errIdx, err := bbgo.BatchPlaceOrder(ctx, s.makerSession.Exchange, orderCreateCallback, formattedOrders...)
|
||||
if err != nil {
|
||||
log.WithError(err).Errorf("unable to place maker orders: %+v", formattedOrders)
|
||||
return
|
||||
}
|
||||
|
||||
openOrderBidExposureInUsdMetrics.With(s.metricsLabels).Set(bidExposureInUsd.Float64())
|
||||
|
@ -1240,7 +1252,7 @@ func (s *Strategy) CrossRun(
|
|||
|
||||
// restore state
|
||||
s.groupID = util.FNV32(instanceID)
|
||||
log.Infof("using group id %d from fnv(%s)", s.groupID, instanceID)
|
||||
s.logger.Infof("using group id %d from fnv(%s)", s.groupID, instanceID)
|
||||
|
||||
configLabels := prometheus.Labels{"strategy_id": s.InstanceID(), "strategy_type": ID, "symbol": s.Symbol}
|
||||
configNumOfLayersMetrics.With(configLabels).Set(float64(s.NumLayers))
|
||||
|
@ -1252,8 +1264,12 @@ func (s *Strategy) CrossRun(
|
|||
s.Position = types.NewPositionFromMarket(s.makerMarket)
|
||||
s.Position.Strategy = ID
|
||||
s.Position.StrategyInstanceID = instanceID
|
||||
} else {
|
||||
s.Position.Strategy = ID
|
||||
s.Position.StrategyInstanceID = instanceID
|
||||
}
|
||||
|
||||
s.Position.UpdateMetrics()
|
||||
bbgo.Notify("xmaker: %s position is restored", s.Symbol, s.Position)
|
||||
|
||||
if s.ProfitStats == nil {
|
||||
|
|
|
@ -656,6 +656,12 @@ func (p *Position) AddTrade(td Trade) (profit fixedpoint.Value, netProfit fixedp
|
|||
return fixedpoint.Zero, fixedpoint.Zero, false
|
||||
}
|
||||
|
||||
func (p *Position) UpdateMetrics() {
|
||||
p.Lock()
|
||||
p.updateMetrics()
|
||||
p.Unlock()
|
||||
}
|
||||
|
||||
func (p *Position) updateMetrics() {
|
||||
// update the position metrics only if the position defines the strategy ID
|
||||
if p.StrategyInstanceID == "" || p.Strategy == "" {
|
||||
|
|
Loading…
Reference in New Issue
Block a user