mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-26 00:35:15 +00:00
add notification config
This commit is contained in:
parent
284a0676f7
commit
c315b79bd7
|
@ -24,6 +24,27 @@ type ExchangeStrategyMount struct {
|
|||
Strategy SingleExchangeStrategy
|
||||
}
|
||||
|
||||
type SlackNotification struct {
|
||||
DefaultChannel string `json:"defaultChannel,omitempty" yaml:"defaultChannel,omitempty"`
|
||||
ErrorChannel string `json:"errorChannel,omitempty" yaml:"errorChannel,omitempty"`
|
||||
}
|
||||
|
||||
type NotificationRouting struct {
|
||||
Trade string `json:"trade,omitempty" yaml:"trade,omitempty"`
|
||||
Order string `json:"order,omitempty" yaml:"order,omitempty"`
|
||||
SubmitOrder string `json:"submitOrder,omitempty" yaml:"submitOrder,omitempty"`
|
||||
PnL string `json:"pnL,omitempty" yaml:"pnL,omitempty"`
|
||||
}
|
||||
|
||||
type Notifications struct {
|
||||
Slack *SlackNotification `json:"slack,omitempty" yaml:"slack,omitempty"`
|
||||
|
||||
SymbolChannels map[string]string `json:"symbolChannels,omitempty" yaml:"symbolChannels,omitempty"`
|
||||
SessionChannels map[string]string `json:"sessionChannels,omitempty" yaml:"sessionChannels,omitempty"`
|
||||
|
||||
Routing *NotificationRouting `json:"routing,omitempty" yaml:"routing,omitempty"`
|
||||
}
|
||||
|
||||
type Session struct {
|
||||
ExchangeName string `json:"exchange" yaml:"exchange"`
|
||||
EnvVarPrefix string `json:"envVarPrefix" yaml:"envVarPrefix"`
|
||||
|
@ -32,6 +53,8 @@ type Session struct {
|
|||
type Config struct {
|
||||
Imports []string `json:"imports" yaml:"imports"`
|
||||
|
||||
Notifications *Notifications `json:"notifications,omitempty" yaml:"notifications,omitempty"`
|
||||
|
||||
Sessions map[string]Session `json:"sessions,omitempty" yaml:"sessions,omitempty"`
|
||||
|
||||
RiskControls *RiskControls `json:"riskControls,omitempty" yaml:"riskControls,omitempty"`
|
||||
|
|
|
@ -34,6 +34,23 @@ func TestLoadConfig(t *testing.T) {
|
|||
wantErr bool
|
||||
f func(t *testing.T, config *Config)
|
||||
}{
|
||||
{
|
||||
name: "notification",
|
||||
args: args{configFile: "testdata/notification.yaml"},
|
||||
wantErr: false,
|
||||
f: func(t *testing.T, config *Config) {
|
||||
assert.NotNil(t, config.Notifications)
|
||||
assert.NotNil(t, config.Notifications.SessionChannels)
|
||||
assert.NotNil(t, config.Notifications.SymbolChannels)
|
||||
assert.Equal(t, map[string]string{
|
||||
"^BTC": "#btc",
|
||||
"^ETH": "#eth",
|
||||
}, config.Notifications.SymbolChannels)
|
||||
assert.NotNil(t, config.Notifications.Routing)
|
||||
assert.Equal(t, "#dev-bbgo", config.Notifications.Slack.DefaultChannel)
|
||||
assert.Equal(t, "#error", config.Notifications.Slack.ErrorChannel)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "strategy",
|
||||
args: args{configFile: "testdata/strategy.yaml"},
|
||||
|
|
|
@ -83,11 +83,11 @@ func (reporter *AverageCostPnLReporter) Run() {
|
|||
}
|
||||
}
|
||||
|
||||
type SymbolChannelRouter struct {
|
||||
type PatternChannelRouter struct {
|
||||
routes map[*regexp.Regexp]string
|
||||
}
|
||||
|
||||
func (router *SymbolChannelRouter) RouteSymbols(routes map[string]string) *SymbolChannelRouter {
|
||||
func (router *PatternChannelRouter) RouteSymbols(routes map[string]string) *PatternChannelRouter {
|
||||
for pattern, channel := range routes {
|
||||
router.routes[regexp.MustCompile(pattern)] = channel
|
||||
}
|
||||
|
@ -95,9 +95,9 @@ func (router *SymbolChannelRouter) RouteSymbols(routes map[string]string) *Symbo
|
|||
return router
|
||||
}
|
||||
|
||||
func (router *SymbolChannelRouter) Dispatch(symbol string) (channel string, ok bool) {
|
||||
func (router *PatternChannelRouter) Dispatch(text string) (channel string, ok bool) {
|
||||
for pattern, channel := range router.routes {
|
||||
if pattern.MatchString(symbol) {
|
||||
if pattern.MatchString(text) {
|
||||
ok = true
|
||||
return channel, ok
|
||||
}
|
||||
|
|
40
pkg/bbgo/testdata/notification.yaml
vendored
Normal file
40
pkg/bbgo/testdata/notification.yaml
vendored
Normal file
|
@ -0,0 +1,40 @@
|
|||
---
|
||||
notifications:
|
||||
slack:
|
||||
defaultChannel: "#dev-bbgo"
|
||||
errorChannel: "#error"
|
||||
|
||||
# if you want to route channel by symbol
|
||||
symbolChannels:
|
||||
"^BTC": "#btc"
|
||||
"^ETH": "#eth"
|
||||
|
||||
# if you want to route channel by exchange session
|
||||
sessionChannels:
|
||||
max: "#bbgo-max"
|
||||
binance: "#bbgo-binance"
|
||||
|
||||
# routing rules
|
||||
routing:
|
||||
trade: bySymbol
|
||||
order: bySymbol
|
||||
submitOrder: byExchange
|
||||
pnL: "#bbgo-pnl"
|
||||
|
||||
sessions:
|
||||
max:
|
||||
exchange: max
|
||||
envVarPrefix: max
|
||||
|
||||
binance:
|
||||
exchange: binance
|
||||
envVarPrefix: binance
|
||||
|
||||
exchangeStrategies:
|
||||
- on: binance
|
||||
test:
|
||||
symbol: "BTCUSDT"
|
||||
interval: "1m"
|
||||
baseQuantity: 0.1
|
||||
minDropPercentage: -0.05
|
||||
|
Loading…
Reference in New Issue
Block a user