Skip to content

Commit

Permalink
xmaker: initialize bollinger band signal
Browse files Browse the repository at this point in the history
  • Loading branch information
c9s committed Aug 30, 2024
1 parent 9ebab4f commit b8abc06
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 22 deletions.
11 changes: 5 additions & 6 deletions pkg/strategy/xmaker/signal_boll.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,6 @@ func (s *BollingerBandTrendSignal) CalculateSignal(ctx context.Context) (float64
lastDownBand := fixedpoint.NewFromFloat(s.indicator.DownBand.Last(0))
lastUpBand := fixedpoint.NewFromFloat(s.indicator.UpBand.Last(0))

log.Infof("bollinger band: up/down = %f/%f, close price = %f",
lastUpBand.Float64(),
lastDownBand.Float64(),
closePrice.Float64())

// if the price is inside the band, do not vote
if closePrice.Compare(lastDownBand) > 0 && closePrice.Compare(lastUpBand) < 0 {
return 0.0, nil
Expand All @@ -82,6 +77,10 @@ func (s *BollingerBandTrendSignal) CalculateSignal(ctx context.Context) (float64
signal = closePrice.Sub(lastUpBand).Float64() / maxBandWidth * 2.0
}

log.Infof("bollinger signal: %f", signal)
log.Infof("[BollingerBandTrendSignal] %f up/down = %f/%f, close price = %f",
signal,
lastUpBand.Float64(),
lastDownBand.Float64(),
closePrice.Float64())
return signal, nil
}
4 changes: 2 additions & 2 deletions pkg/strategy/xmaker/signal_book.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,6 @@ func (s *OrderBookBestPriceVolumeSignal) CalculateSignal(ctx context.Context) (f
return 0.0, nil
}

log.Infof("OrderBookBestPriceVolumeSignal: bid/ask = %f/%f", bid.Volume.Float64(), ask.Volume.Float64())

// TODO: may use scale to define this
sumVol := bid.Volume.Add(ask.Volume)
bidRatio := bid.Volume.Div(sumVol)
Expand All @@ -65,6 +63,8 @@ func (s *OrderBookBestPriceVolumeSignal) CalculateSignal(ctx context.Context) (f
signal = -numerator.Div(denominator).Float64()
}

log.Infof("[OrderBookBestPriceVolumeSignal] %f bid/ask = %f/%f", signal, bid.Volume.Float64(), ask.Volume.Float64())

orderBookSignalMetrics.WithLabelValues(s.symbol).Set(signal)
return signal, nil
}
22 changes: 8 additions & 14 deletions pkg/strategy/xmaker/strategy.go
Original file line number Diff line number Diff line change
Expand Up @@ -1247,20 +1247,14 @@ func (s *Strategy) CrossRun(
s.book.BindStream(s.sourceSession.MarketDataStream)

for _, signalConfig := range s.SignalConfigList {
var sigAny any
switch {
case signalConfig.OrderBookBestPriceSignal != nil:
sig := signalConfig.OrderBookBestPriceSignal
sig.book = s.book
sigAny = sig

case signalConfig.BollingerBandTrendSignal != nil:

}

if sigAny != nil {
if binder, ok := sigAny.(SessionBinder); ok {
binder.Bind(ctx, s.sourceSession, s.Symbol)
if signalConfig.OrderBookBestPriceSignal != nil {
signalConfig.OrderBookBestPriceSignal.book = s.book
if err := signalConfig.OrderBookBestPriceSignal.Bind(ctx, s.sourceSession, s.Symbol); err != nil {
return err
}
} else if signalConfig.BollingerBandTrendSignal != nil {
if err := signalConfig.BollingerBandTrendSignal.Bind(ctx, s.sourceSession, s.Symbol); err != nil {
return err
}
}
}
Expand Down

0 comments on commit b8abc06

Please sign in to comment.