From 371db8e7d1cb272f1a30160dcfb21410ba0f4598 Mon Sep 17 00:00:00 2001 From: c9s Date: Fri, 30 Aug 2024 17:18:29 +0800 Subject: [PATCH] xmaker: update signal conditions to metrics --- pkg/strategy/xmaker/signal_boll.go | 13 +++++++------ pkg/strategy/xmaker/signal_book.go | 8 +++----- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/pkg/strategy/xmaker/signal_boll.go b/pkg/strategy/xmaker/signal_boll.go index c906ad709..f40cd1edc 100644 --- a/pkg/strategy/xmaker/signal_boll.go +++ b/pkg/strategy/xmaker/signal_boll.go @@ -63,15 +63,14 @@ func (s *BollingerBandTrendSignal) CalculateSignal(ctx context.Context) (float64 lastDownBand := fixedpoint.NewFromFloat(s.indicator.DownBand.Last(0)) lastUpBand := fixedpoint.NewFromFloat(s.indicator.UpBand.Last(0)) - // if the price is inside the band, do not vote - if closePrice.Compare(lastDownBand) > 0 && closePrice.Compare(lastUpBand) < 0 { - return 0.0, nil - } - maxBandWidth := s.indicator.StdDev.Last(0) * s.MaxBandWidth signal := 0.0 - if closePrice.Compare(lastDownBand) < 0 { + + // if the price is inside the band, do not vote + if closePrice.Compare(lastDownBand) > 0 && closePrice.Compare(lastUpBand) < 0 { + signal = 0.0 + } else if closePrice.Compare(lastDownBand) < 0 { signal = lastDownBand.Sub(closePrice).Float64() / maxBandWidth * -2.0 } else if closePrice.Compare(lastUpBand) > 0 { signal = closePrice.Sub(lastUpBand).Float64() / maxBandWidth * 2.0 @@ -82,5 +81,7 @@ func (s *BollingerBandTrendSignal) CalculateSignal(ctx context.Context) (float64 lastUpBand.Float64(), lastDownBand.Float64(), closePrice.Float64()) + + bollingerBandSignalMetrics.WithLabelValues(s.symbol).Set(signal) return signal, nil } diff --git a/pkg/strategy/xmaker/signal_book.go b/pkg/strategy/xmaker/signal_book.go index 0423026a7..ac7288e51 100644 --- a/pkg/strategy/xmaker/signal_book.go +++ b/pkg/strategy/xmaker/signal_book.go @@ -45,17 +45,15 @@ func (s *OrderBookBestPriceVolumeSignal) CalculateSignal(ctx context.Context) (f return 0.0, nil } - if bid.Volume.Compare(s.MinVolume) < 0 && ask.Volume.Compare(s.MinVolume) < 0 { - return 0.0, nil - } - // TODO: may use scale to define this sumVol := bid.Volume.Add(ask.Volume) bidRatio := bid.Volume.Div(sumVol) askRatio := ask.Volume.Div(sumVol) denominator := fixedpoint.One.Sub(s.RatioThreshold) signal := 0.0 - if bidRatio.Compare(s.RatioThreshold) >= 0 { + if bid.Volume.Compare(s.MinVolume) < 0 && ask.Volume.Compare(s.MinVolume) < 0 { + signal = 0.0 + } else if bidRatio.Compare(s.RatioThreshold) >= 0 { numerator := bidRatio.Sub(s.RatioThreshold) signal = numerator.Div(denominator).Float64() } else if askRatio.Compare(s.RatioThreshold) >= 0 {