xmaker: call signalConfig.TradeVolumeWindowSignal.Bind
This commit is contained in:
parent
d8153361ff
commit
744ab2ebbe
|
@ -2,6 +2,7 @@ package xmaker
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
@ -27,10 +28,14 @@ type TradeVolumeWindowSignal struct {
|
||||||
|
|
||||||
trades []types.Trade
|
trades []types.Trade
|
||||||
symbol string
|
symbol string
|
||||||
|
|
||||||
|
mu sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *TradeVolumeWindowSignal) handleTrade(trade types.Trade) {
|
func (s *TradeVolumeWindowSignal) handleTrade(trade types.Trade) {
|
||||||
|
s.mu.Lock()
|
||||||
s.trades = append(s.trades, trade)
|
s.trades = append(s.trades, trade)
|
||||||
|
s.mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *TradeVolumeWindowSignal) Bind(ctx context.Context, session *bbgo.ExchangeSession, symbol string) error {
|
func (s *TradeVolumeWindowSignal) Bind(ctx context.Context, session *bbgo.ExchangeSession, symbol string) error {
|
||||||
|
@ -52,6 +57,9 @@ func (s *TradeVolumeWindowSignal) filterTrades(now time.Time) []types.Trade {
|
||||||
startTime := now.Add(-time.Duration(s.Window))
|
startTime := now.Add(-time.Duration(s.Window))
|
||||||
startIdx := 0
|
startIdx := 0
|
||||||
|
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
|
|
||||||
for idx, td := range s.trades {
|
for idx, td := range s.trades {
|
||||||
// skip trades before the start time
|
// skip trades before the start time
|
||||||
if td.Time.Before(startTime) {
|
if td.Time.Before(startTime) {
|
||||||
|
@ -62,8 +70,9 @@ func (s *TradeVolumeWindowSignal) filterTrades(now time.Time) []types.Trade {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
s.trades = s.trades[startIdx:]
|
trades := s.trades[startIdx:]
|
||||||
return s.trades
|
s.trades = trades
|
||||||
|
return trades
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *TradeVolumeWindowSignal) calculateTradeVolume(trades []types.Trade) (buyVolume, sellVolume float64) {
|
func (s *TradeVolumeWindowSignal) calculateTradeVolume(trades []types.Trade) (buyVolume, sellVolume float64) {
|
||||||
|
@ -95,7 +104,7 @@ func (s *TradeVolumeWindowSignal) CalculateSignal(ctx context.Context) (float64,
|
||||||
sig = -(sellRatio - threshold) / 2.0
|
sig = -(sellRatio - threshold) / 2.0
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("[TradeVolumeWindowSignal] sig: %f buy/sell = %f/%f", sig, buyVolume, sellVolume)
|
log.Infof("[TradeVolumeWindowSignal] %f buy/sell = %f/%f", sig, buyVolume, sellVolume)
|
||||||
|
|
||||||
tradeVolumeWindowSignalMetrics.WithLabelValues(s.symbol).Set(sig)
|
tradeVolumeWindowSignalMetrics.WithLabelValues(s.symbol).Set(sig)
|
||||||
return sig, nil
|
return sig, nil
|
||||||
|
|
|
@ -1373,6 +1373,10 @@ func (s *Strategy) CrossRun(
|
||||||
if err := signalConfig.BollingerBandTrendSignal.Bind(ctx, s.sourceSession, s.Symbol); err != nil {
|
if err := signalConfig.BollingerBandTrendSignal.Bind(ctx, s.sourceSession, s.Symbol); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
} else if signalConfig.TradeVolumeWindowSignal != nil {
|
||||||
|
if err := signalConfig.TradeVolumeWindowSignal.Bind(ctx, s.sourceSession, s.Symbol); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user