Skip to content

Commit 801e078

Browse files
authored
Merge pull request #1843 from c9s/c9s/add-max-channels
REFACTOR: [max] generate privatechannel map with mapgen
2 parents ce20d10 + 8be53d9 commit 801e078

19 files changed

+323
-180
lines changed

pkg/backtest/matching.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import (
99
"github.com/pkg/errors"
1010
"github.com/sirupsen/logrus"
1111

12+
"github.com/c9s/bbgo/pkg/envvar"
1213
"github.com/c9s/bbgo/pkg/fixedpoint"
1314
"github.com/c9s/bbgo/pkg/types"
14-
"github.com/c9s/bbgo/pkg/util"
1515
)
1616

1717
var orderID uint64 = 1
@@ -35,14 +35,14 @@ var useFeeToken = true
3535

3636
func init() {
3737
logger := logrus.New()
38-
if v, ok := util.GetEnvVarBool("DEBUG_MATCHING"); ok && v {
38+
if v, ok := envvar.Bool("DEBUG_MATCHING"); ok && v {
3939
logger.SetLevel(logrus.DebugLevel)
4040
} else {
4141
logger.SetLevel(logrus.ErrorLevel)
4242
}
4343
klineMatchingLogger = logger.WithField("backtest", "klineEngine")
4444

45-
if v, ok := util.GetEnvVarBool("BACKTEST_USE_FEE_TOKEN"); ok {
45+
if v, ok := envvar.Bool("BACKTEST_USE_FEE_TOKEN"); ok {
4646
useFeeToken = v
4747
}
4848
}

pkg/bbgo/environment.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"github.com/spf13/viper"
2020
"gopkg.in/tucnak/telebot.v2"
2121

22+
"github.com/c9s/bbgo/pkg/envvar"
2223
"github.com/c9s/bbgo/pkg/exchange"
2324
"github.com/c9s/bbgo/pkg/fixedpoint"
2425
"github.com/c9s/bbgo/pkg/interact"
@@ -745,7 +746,7 @@ func (environ *Environment) setupInteraction(persistence service.PersistenceServ
745746
var keyURL string
746747
var authStore = environ.getAuthStore(persistence)
747748

748-
if v, ok := util.GetEnvVarBool("FLUSH_OTP_KEY"); v && ok {
749+
if v, ok := envvar.Bool("FLUSH_OTP_KEY"); v && ok {
749750
log.Warnf("flushing otp key...")
750751
if err := authStore.Reset(); err != nil {
751752
return err
@@ -857,7 +858,7 @@ func (environ *Environment) setupSlack(userConfig *Config, slackToken string, pe
857858
slackOpts = append(slackOpts, slack.OptionAppLevelToken(slackAppToken))
858859
}
859860

860-
if b, ok := util.GetEnvVarBool("DEBUG_SLACK"); ok {
861+
if b, ok := envvar.Bool("DEBUG_SLACK"); ok {
861862
slackOpts = append(slackOpts, slack.OptionDebug(b))
862863
}
863864

pkg/bbgo/exit.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ import (
88
"github.com/pkg/errors"
99

1010
"github.com/c9s/bbgo/pkg/dynamic"
11-
"github.com/c9s/bbgo/pkg/util"
11+
"github.com/c9s/bbgo/pkg/envvar"
1212
)
1313

1414
var enableMarketTradeStop = true
1515

1616
func init() {
17-
if v, defined := util.GetEnvVarBool("DISABLE_MARKET_TRADE_STOP"); defined && v {
17+
if v, defined := envvar.Bool("DISABLE_MARKET_TRADE_STOP"); defined && v {
1818
enableMarketTradeStop = false
1919
}
2020
}

pkg/bbgo/order_execution.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ import (
1111
"go.uber.org/multierr"
1212

1313
"github.com/c9s/bbgo/pkg/core"
14+
"github.com/c9s/bbgo/pkg/envvar"
1415
"github.com/c9s/bbgo/pkg/fixedpoint"
1516
"github.com/c9s/bbgo/pkg/types"
16-
"github.com/c9s/bbgo/pkg/util"
1717
)
1818

1919
var DefaultSubmitOrderRetryTimeout = 5 * time.Minute
2020

2121
func init() {
22-
if du, ok := util.GetEnvVarDuration("BBGO_SUBMIT_ORDER_RETRY_TIMEOUT"); ok && du > 0 {
22+
if du, ok := envvar.Duration("BBGO_SUBMIT_ORDER_RETRY_TIMEOUT", 5*time.Minute); ok && du > 0 {
2323
DefaultSubmitOrderRetryTimeout = du
2424
}
2525
}

pkg/bbgo/session.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/spf13/viper"
1515

1616
"github.com/c9s/bbgo/pkg/cache"
17+
"github.com/c9s/bbgo/pkg/envvar"
1718
"github.com/c9s/bbgo/pkg/exchange/retry"
1819
"github.com/c9s/bbgo/pkg/util/templateutil"
1920

@@ -237,7 +238,7 @@ func (session *ExchangeSession) Init(ctx context.Context, environ *Environment)
237238
var disableMarketsCache = false
238239
var markets types.MarketMap
239240
var err error
240-
if util.SetEnvVarBool("DISABLE_MARKETS_CACHE", &disableMarketsCache); disableMarketsCache {
241+
if envvar.SetBool("DISABLE_MARKETS_CACHE", &disableMarketsCache); disableMarketsCache {
241242
markets, err = session.Exchange.QueryMarkets(ctx)
242243
if err != nil {
243244
return err

pkg/bbgo/standard_indicator_set.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package bbgo
33
import (
44
"github.com/sirupsen/logrus"
55

6+
"github.com/c9s/bbgo/pkg/envvar"
67
"github.com/c9s/bbgo/pkg/indicator"
78
"github.com/c9s/bbgo/pkg/types"
8-
"github.com/c9s/bbgo/pkg/util"
99
)
1010

1111
var (
@@ -15,7 +15,7 @@ var (
1515
func init() {
1616
// when using --dotenv option, the dotenv is loaded from command.PersistentPreRunE, not init.
1717
// hence here the env var won't enable the debug flag
18-
util.SetEnvVarBool("DEBUG_BOLL", &debugBOLL)
18+
envvar.SetBool("DEBUG_BOLL", &debugBOLL)
1919
}
2020

2121
type MACDConfig struct {

pkg/cache/cache.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import (
1313
"github.com/pkg/errors"
1414
log "github.com/sirupsen/logrus"
1515

16+
"github.com/c9s/bbgo/pkg/envvar"
1617
"github.com/c9s/bbgo/pkg/types"
17-
"github.com/c9s/bbgo/pkg/util"
1818
"github.com/c9s/bbgo/pkg/util/backoff"
1919
)
2020

@@ -126,7 +126,7 @@ func WithCache(key string, obj interface{}, fetcher DataFetcher) error {
126126
}
127127

128128
func LoadExchangeMarketsWithCache(ctx context.Context, ex types.ExchangePublic) (markets types.MarketMap, err error) {
129-
inMem, ok := util.GetEnvVarBool("USE_MARKETS_CACHE_IN_MEMORY")
129+
inMem, ok := envvar.Bool("USE_MARKETS_CACHE_IN_MEMORY")
130130
if ok && inMem {
131131
return loadMarketsFromMem(ctx, ex)
132132
}

pkg/envvar/getter.go

+113
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package envvar
2+
3+
import (
4+
"os"
5+
"strconv"
6+
"time"
7+
8+
"github.com/sirupsen/logrus"
9+
)
10+
11+
func String(n string, args ...string) (string, bool) {
12+
defaultValue := ""
13+
if len(args) > 0 {
14+
defaultValue = args[0]
15+
}
16+
17+
str, ok := os.LookupEnv(n)
18+
if !ok {
19+
return defaultValue, false
20+
}
21+
22+
return str, true
23+
}
24+
25+
func Duration(n string, args ...time.Duration) (time.Duration, bool) {
26+
defaultValue := time.Duration(0)
27+
if len(args) > 0 {
28+
defaultValue = args[0]
29+
}
30+
31+
str, ok := os.LookupEnv(n)
32+
if !ok {
33+
return defaultValue, false
34+
}
35+
36+
du, err := time.ParseDuration(str)
37+
if err != nil {
38+
logrus.WithError(err).Errorf("can not parse env var %q as time.Duration, incorrect format", str)
39+
return defaultValue, false
40+
}
41+
42+
return du, true
43+
}
44+
45+
// Int64 returns the int64 value of the environment variable named n.
46+
func Int64(n string, args ...int64) (int64, bool) {
47+
defaultValue := int64(0)
48+
if len(args) > 0 {
49+
defaultValue = args[0]
50+
}
51+
52+
str, ok := os.LookupEnv(n)
53+
if !ok {
54+
return defaultValue, false
55+
}
56+
57+
num, err := strconv.ParseInt(str, 10, 64)
58+
if err != nil {
59+
logrus.WithError(err).Errorf("can not parse env var %q as int, incorrect format", str)
60+
return defaultValue, false
61+
}
62+
63+
return num, true
64+
}
65+
66+
func Int(n string, args ...int) (int, bool) {
67+
defaultValue := 0
68+
if len(args) > 0 {
69+
defaultValue = args[0]
70+
}
71+
72+
str, ok := os.LookupEnv(n)
73+
if !ok {
74+
return defaultValue, false
75+
}
76+
77+
num, err := strconv.Atoi(str)
78+
if err != nil {
79+
logrus.WithError(err).Errorf("can not parse env var %q as int, incorrect format", str)
80+
return defaultValue, false
81+
}
82+
83+
return num, true
84+
}
85+
86+
func SetBool(n string, v *bool) bool {
87+
b, ok := Bool(n)
88+
if ok {
89+
*v = b
90+
}
91+
92+
return ok
93+
}
94+
95+
func Bool(n string, args ...bool) (bool, bool) {
96+
defaultValue := false
97+
if len(args) > 0 {
98+
defaultValue = args[0]
99+
}
100+
101+
str, ok := os.LookupEnv(n)
102+
if !ok {
103+
return defaultValue, false
104+
}
105+
106+
num, err := strconv.ParseBool(str)
107+
if err != nil {
108+
logrus.WithError(err).Errorf("can not parse env var %q as bool, incorrect format", str)
109+
return defaultValue, false
110+
}
111+
112+
return num, true
113+
}

pkg/exchange/binance/exchange.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/pkg/errors"
2222
"github.com/sirupsen/logrus"
2323

24+
"github.com/c9s/bbgo/pkg/envvar"
2425
"github.com/c9s/bbgo/pkg/exchange/binance/binanceapi"
2526
"github.com/c9s/bbgo/pkg/fixedpoint"
2627
"github.com/c9s/bbgo/pkg/types"
@@ -56,17 +57,17 @@ func init() {
5657
_ = types.MarginExchange(&Exchange{})
5758
_ = types.FuturesExchange(&Exchange{})
5859

59-
if n, ok := util.GetEnvVarInt("BINANCE_ORDER_RATE_LIMITER"); ok {
60+
if n, ok := envvar.Int("BINANCE_ORDER_RATE_LIMITER"); ok {
6061
orderLimiter = rate.NewLimiter(rate.Every(time.Duration(n)*time.Minute), 2)
6162
}
6263

63-
if n, ok := util.GetEnvVarInt("BINANCE_QUERY_TRADES_RATE_LIMITER"); ok {
64+
if n, ok := envvar.Int("BINANCE_QUERY_TRADES_RATE_LIMITER"); ok {
6465
queryTradeLimiter = rate.NewLimiter(rate.Every(time.Duration(n)*time.Minute), 2)
6566
}
6667
}
6768

6869
func isBinanceUs() bool {
69-
v, ok := util.GetEnvVarBool("BINANCE_US")
70+
v, ok := envvar.Bool("BINANCE_US")
7071
return ok && v
7172
}
7273

pkg/exchange/bitget/debug.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package bitget
22

3-
import "github.com/c9s/bbgo/pkg/util"
3+
import (
4+
"github.com/c9s/bbgo/pkg/envvar"
5+
)
46

57
type LogFunction func(msg string, args ...interface{})
68

79
var debugf LogFunction
810

911
func getDebugFunction() LogFunction {
10-
if v, ok := util.GetEnvVarBool("DEBUG_BITGET"); ok && v {
12+
if v, ok := envvar.Bool("DEBUG_BITGET"); ok && v {
1113
return log.Infof
1214
}
1315

pkg/exchange/max/maxapi/restapi.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323
"github.com/pkg/errors"
2424
log "github.com/sirupsen/logrus"
2525

26-
"github.com/c9s/bbgo/pkg/util"
26+
"github.com/c9s/bbgo/pkg/envvar"
2727
"github.com/c9s/bbgo/pkg/util/backoff"
2828
"github.com/c9s/bbgo/pkg/version"
2929
)
@@ -49,19 +49,19 @@ var disableUserAgentHeader = false
4949

5050
func init() {
5151

52-
if val, ok := util.GetEnvVarInt("HTTP_TRANSPORT_MAX_IDLE_CONNS_PER_HOST"); ok {
52+
if val, ok := envvar.Int("HTTP_TRANSPORT_MAX_IDLE_CONNS_PER_HOST"); ok {
5353
httpTransportMaxIdleConnsPerHost = val
5454
}
5555

56-
if val, ok := util.GetEnvVarInt("HTTP_TRANSPORT_MAX_IDLE_CONNS"); ok {
56+
if val, ok := envvar.Int("HTTP_TRANSPORT_MAX_IDLE_CONNS"); ok {
5757
httpTransportMaxIdleConns = val
5858
}
5959

60-
if val, ok := util.GetEnvVarDuration("HTTP_TRANSPORT_IDLE_CONN_TIMEOUT"); ok {
60+
if val, ok := envvar.Duration("HTTP_TRANSPORT_IDLE_CONN_TIMEOUT"); ok {
6161
httpTransportIdleConnTimeout = val
6262
}
6363

64-
if val, ok := util.GetEnvVarBool("DISABLE_MAX_USER_AGENT_HEADER"); ok {
64+
if val, ok := envvar.Bool("DISABLE_MAX_USER_AGENT_HEADER"); ok {
6565
disableUserAgentHeader = val
6666
}
6767
}

pkg/exchange/max/maxapi/userdata.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,9 @@ func ParseUserEvent(v *fastjson.Value) (interface{}, error) {
227227
case "trade_snapshot", "mwallet_trade_snapshot":
228228
return parseTradeSnapshotEvent(v)
229229

230-
case "trade_update", "trade_fast_update", "mwallet_trade_update", "mwallet_trade_fast_update":
230+
// trade_fast_update and mwallet_trade_fast_update are deprecated
231+
case "trade_update", "fast_trade_update", "trade_fast_update",
232+
"mwallet_trade_update", "mwallet_trade_fast_update", "mwallet_fast_trade_update":
231233
return parseTradeUpdateEvent(v)
232234

233235
case "ad_ratio_snapshot", "ad_ratio_update":

pkg/exchange/max/privatechannel.go

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package max
2+
3+
//go:generate mapgen -type PrivateChannel
4+
type PrivateChannel string
5+
6+
const (
7+
PrivateChannelOrder PrivateChannel = "order"
8+
PrivateChannelOrderUpdate PrivateChannel = "order_update"
9+
PrivateChannelTrade PrivateChannel = "trade"
10+
PrivateChannelTradeUpdate PrivateChannel = "trade_update"
11+
PrivateChannelFastTradeUpdate PrivateChannel = "fast_trade_update"
12+
PrivateChannelAccount PrivateChannel = "account"
13+
PrivateChannelAccountUpdate PrivateChannel = "account_update"
14+
15+
// @group Misc
16+
PrivateChannelAveragePrice PrivateChannel = "average_price"
17+
PrivateChannelFavoriteMarket PrivateChannel = "favorite_market"
18+
19+
// @group Margin
20+
PrivateChannelMWalletOrder PrivateChannel = "mwallet_order"
21+
PrivateChannelMWalletTrade PrivateChannel = "mwallet_trade"
22+
PrivateChannelMWalletFastTradeUpdate PrivateChannel = "mwallet_fast_trade_update"
23+
PrivateChannelMWalletAccount PrivateChannel = "mwallet_account"
24+
PrivateChannelMWalletAveragePrice PrivateChannel = "mwallet_average_price"
25+
PrivateChannelBorrowing PrivateChannel = "borrowing"
26+
PrivateChannelAdRatio PrivateChannel = "ad_ratio"
27+
PrivateChannelPoolQuota PrivateChannel = "borrowing_pool_quota"
28+
)
29+
30+
var defaultMarginPrivateChannels = []PrivateChannel{
31+
PrivateChannelMWalletOrder,
32+
PrivateChannelMWalletTrade,
33+
PrivateChannelMWalletAccount,
34+
PrivateChannelBorrowing,
35+
PrivateChannelAdRatio,
36+
PrivateChannelPoolQuota,
37+
}
38+
39+
var defaultSpotPrivateChannels = []PrivateChannel{
40+
PrivateChannelOrder,
41+
PrivateChannelTrade,
42+
PrivateChannelAccount,
43+
}

0 commit comments

Comments
 (0)