connecting strategies with session name

This commit is contained in:
c9s 2020-10-20 15:54:32 +08:00
parent 324a493aad
commit 606c59ad4d
3 changed files with 31 additions and 23 deletions

View File

@ -12,8 +12,8 @@ import (
)
type Config struct {
ExchangeStrategies []bbgo.SingleExchangeStrategy
CrossExchangeStrategies []bbgo.CrossExchangeStrategy
ExchangeStrategies map[string][]bbgo.SingleExchangeStrategy
CrossExchangeStrategies map[string][]bbgo.CrossExchangeStrategy
}
type Stash map[string]interface{}
@ -49,32 +49,41 @@ func Load(configFile string) (*Config, error) {
return &config, nil
}
func loadExchangeStrategies(stash Stash) (strategies []bbgo.SingleExchangeStrategy, err error) {
func loadExchangeStrategies(stash Stash) (strategies map[string][]bbgo.SingleExchangeStrategy, err error) {
exchangeStrategiesConf, ok := stash["exchangeStrategies"]
if !ok {
return nil, errors.New("exchangeStrategies is not defined")
}
list, ok := exchangeStrategiesConf.([]interface{})
sessionToConfigList, ok := exchangeStrategiesConf.(Stash)
if !ok {
return nil, errors.New("exchangeStrategies should be a list")
return nil, errors.New("expecting session name at the first level")
}
for _, entry := range list {
configStash, ok := entry.(Stash)
strategies = make(map[string][]bbgo.SingleExchangeStrategy)
for sessionName, configList := range sessionToConfigList {
list, ok := configList.([]interface{})
if !ok {
return nil, errors.Errorf("strategy config should be a map, given: %T %+v", entry, entry)
return nil, errors.New("exchangeStrategies should be a list")
}
for id, conf := range configStash {
// look up the real struct type
if st, ok := bbgo.LoadedExchangeStrategies[id]; ok {
val, err := reUnmarshal(conf, st)
if err != nil {
return nil, err
}
for _, entry := range list {
configStash, ok := entry.(Stash)
if !ok {
return nil, errors.Errorf("strategy config should be a map, given: %T %+v", entry, entry)
}
strategies = append(strategies, val.(bbgo.SingleExchangeStrategy))
for id, conf := range configStash {
// look up the real struct type
if st, ok := bbgo.LoadedExchangeStrategies[id]; ok {
val, err := reUnmarshal(conf, st)
if err != nil {
return nil, err
}
strategies[sessionName] = append(strategies[sessionName], val.(bbgo.SingleExchangeStrategy))
}
}
}
}

View File

@ -45,8 +45,6 @@ func TestLoadStrategies(t *testing.T) {
assert.NotNil(t, config)
assert.Len(t, config.ExchangeStrategies, tt.length)
t.Logf("%+v", config.ExchangeStrategies[0])
})
}
}

View File

@ -9,8 +9,9 @@ sessions:
keyVar: BINANCE_API_KEY
secretVar: BINANCE_API_SECRET
exchangeStrategies:
- buyandhold:
symbol: "BTCUSDT"
interval: "1m"
baseQuantity: 0.1
minDropPercentage: -0.05
binance:
- buyandhold:
symbol: "BTCUSDT"
interval: "1m"
baseQuantity: 0.1
minDropPercentage: -0.05