mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-13 02:23:51 +00:00
bbgo: add environment config for disabling some klines defaults
This commit is contained in:
parent
28c8fda2db
commit
b28b5e4097
|
@ -326,6 +326,11 @@ type ServiceConfig struct {
|
||||||
GoogleSpreadSheetService *GoogleSpreadSheetServiceConfig `json:"googleSpreadSheet" yaml:"googleSpreadSheet"`
|
GoogleSpreadSheetService *GoogleSpreadSheetServiceConfig `json:"googleSpreadSheet" yaml:"googleSpreadSheet"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type EnvironmentConfig struct {
|
||||||
|
DisableDefaultKLineSubscription bool `json:"disableDefaultKLineSubscription"`
|
||||||
|
DisableHistoryKLinePreload bool `json:"disableHistoryKLinePreload"`
|
||||||
|
}
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Build *BuildConfig `json:"build,omitempty" yaml:"build,omitempty"`
|
Build *BuildConfig `json:"build,omitempty" yaml:"build,omitempty"`
|
||||||
|
|
||||||
|
@ -343,6 +348,8 @@ type Config struct {
|
||||||
|
|
||||||
Service *ServiceConfig `json:"services,omitempty" yaml:"services,omitempty"`
|
Service *ServiceConfig `json:"services,omitempty" yaml:"services,omitempty"`
|
||||||
|
|
||||||
|
Environment *EnvironmentConfig `json:"environment,omitempty" yaml:"environment,omitempty"`
|
||||||
|
|
||||||
Sessions map[string]*ExchangeSession `json:"sessions,omitempty" yaml:"sessions,omitempty"`
|
Sessions map[string]*ExchangeSession `json:"sessions,omitempty" yaml:"sessions,omitempty"`
|
||||||
|
|
||||||
RiskControls *RiskControls `json:"riskControls,omitempty" yaml:"riskControls,omitempty"`
|
RiskControls *RiskControls `json:"riskControls,omitempty" yaml:"riskControls,omitempty"`
|
||||||
|
|
|
@ -108,13 +108,13 @@ type Environment struct {
|
||||||
syncStatus SyncStatus
|
syncStatus SyncStatus
|
||||||
syncConfig *SyncConfig
|
syncConfig *SyncConfig
|
||||||
|
|
||||||
loggingConfig *LoggingConfig
|
loggingConfig *LoggingConfig
|
||||||
|
environmentConfig *EnvironmentConfig
|
||||||
|
|
||||||
sessions map[string]*ExchangeSession
|
sessions map[string]*ExchangeSession
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewEnvironment() *Environment {
|
func NewEnvironment() *Environment {
|
||||||
|
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
return &Environment{
|
return &Environment{
|
||||||
// default trade scan time
|
// default trade scan time
|
||||||
|
|
|
@ -472,49 +472,53 @@ func (session *ExchangeSession) initSymbol(ctx context.Context, environ *Environ
|
||||||
}
|
}
|
||||||
|
|
||||||
if sub.Symbol == symbol {
|
if sub.Symbol == symbol {
|
||||||
klineSubscriptions[types.Interval(sub.Options.Interval)] = struct{}{}
|
klineSubscriptions[sub.Options.Interval] = struct{}{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// always subscribe the 1m kline so we can make sure the connection persists.
|
if !(environ.environmentConfig != nil && environ.environmentConfig.DisableDefaultKLineSubscription) {
|
||||||
klineSubscriptions[minInterval] = struct{}{}
|
// subscribe the 1m kline by default so we can make sure the connection persists.
|
||||||
|
klineSubscriptions[minInterval] = struct{}{}
|
||||||
for interval := range klineSubscriptions {
|
|
||||||
// avoid querying the last unclosed kline
|
|
||||||
endTime := environ.startTime
|
|
||||||
var i int64
|
|
||||||
for i = 0; i < KLinePreloadLimit; i += 1000 {
|
|
||||||
var duration time.Duration = time.Duration(-i * int64(interval.Duration()))
|
|
||||||
e := endTime.Add(duration)
|
|
||||||
|
|
||||||
kLines, err := session.Exchange.QueryKLines(ctx, symbol, interval, types.KLineQueryOptions{
|
|
||||||
EndTime: &e,
|
|
||||||
Limit: 1000, // indicators need at least 100
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(kLines) == 0 {
|
|
||||||
log.Warnf("no kline data for %s %s (end time <= %s)", symbol, interval, e)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// update last prices by the given kline
|
|
||||||
lastKLine := kLines[len(kLines)-1]
|
|
||||||
if interval == minInterval {
|
|
||||||
session.lastPrices[symbol] = lastKLine.Close
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, k := range kLines {
|
|
||||||
// let market data store trigger the update, so that the indicator could be updated too.
|
|
||||||
marketDataStore.AddKLine(k)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("%s last price: %v", symbol, session.lastPrices[symbol])
|
if !(environ.environmentConfig != nil && environ.environmentConfig.DisableHistoryKLinePreload) {
|
||||||
|
for interval := range klineSubscriptions {
|
||||||
|
// avoid querying the last unclosed kline
|
||||||
|
endTime := environ.startTime
|
||||||
|
var i int64
|
||||||
|
for i = 0; i < KLinePreloadLimit; i += 1000 {
|
||||||
|
var duration time.Duration = time.Duration(-i * int64(interval.Duration()))
|
||||||
|
e := endTime.Add(duration)
|
||||||
|
|
||||||
|
kLines, err := session.Exchange.QueryKLines(ctx, symbol, interval, types.KLineQueryOptions{
|
||||||
|
EndTime: &e,
|
||||||
|
Limit: 1000, // indicators need at least 100
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(kLines) == 0 {
|
||||||
|
log.Warnf("no kline data for %s %s (end time <= %s)", symbol, interval, e)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// update last prices by the given kline
|
||||||
|
lastKLine := kLines[len(kLines)-1]
|
||||||
|
if interval == minInterval {
|
||||||
|
session.lastPrices[symbol] = lastKLine.Close
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, k := range kLines {
|
||||||
|
// let market data store trigger the update, so that the indicator could be updated too.
|
||||||
|
marketDataStore.AddKLine(k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Infof("%s last price: %v", symbol, session.lastPrices[symbol])
|
||||||
|
}
|
||||||
|
|
||||||
session.initializedSymbols[symbol] = struct{}{}
|
session.initializedSymbols[symbol] = struct{}{}
|
||||||
return nil
|
return nil
|
||||||
|
|
Loading…
Reference in New Issue
Block a user