mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-10 09:11:55 +00:00
strategy: move risk control to common.Strategy
This commit is contained in:
parent
12bb22ae87
commit
3b6cff8dc7
|
@ -16,7 +16,7 @@ exchangeStrategies:
|
||||||
rsicross:
|
rsicross:
|
||||||
symbol: BTCUSDT
|
symbol: BTCUSDT
|
||||||
interval: 5m
|
interval: 5m
|
||||||
fastWindow: 7
|
fastWindow: 3
|
||||||
slowWindow: 12
|
slowWindow: 12
|
||||||
|
|
||||||
quantity: 0.1
|
quantity: 0.1
|
||||||
|
|
|
@ -3,7 +3,11 @@ package common
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/c9s/bbgo/pkg/bbgo"
|
"github.com/c9s/bbgo/pkg/bbgo"
|
||||||
|
"github.com/c9s/bbgo/pkg/fixedpoint"
|
||||||
|
"github.com/c9s/bbgo/pkg/risk/riskcontrol"
|
||||||
"github.com/c9s/bbgo/pkg/types"
|
"github.com/c9s/bbgo/pkg/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -18,6 +22,14 @@ type Strategy struct {
|
||||||
Environ *bbgo.Environment
|
Environ *bbgo.Environment
|
||||||
Session *bbgo.ExchangeSession
|
Session *bbgo.ExchangeSession
|
||||||
OrderExecutor *bbgo.GeneralOrderExecutor
|
OrderExecutor *bbgo.GeneralOrderExecutor
|
||||||
|
|
||||||
|
PositionHardLimit fixedpoint.Value `json:"positionHardLimit"`
|
||||||
|
MaxPositionQuantity fixedpoint.Value `json:"maxPositionQuantity"`
|
||||||
|
CircuitBreakLossThreshold fixedpoint.Value `json:"circuitBreakLossThreshold"`
|
||||||
|
CircuitBreakEMA types.IntervalWindow `json:"circuitBreakEMA"`
|
||||||
|
|
||||||
|
positionRiskControl *riskcontrol.PositionRiskControl
|
||||||
|
circuitBreakRiskControl *riskcontrol.CircuitBreakRiskControl
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Strategy) Initialize(ctx context.Context, environ *bbgo.Environment, session *bbgo.ExchangeSession, market types.Market, strategyID, instanceID string) {
|
func (s *Strategy) Initialize(ctx context.Context, environ *bbgo.Environment, session *bbgo.ExchangeSession, market types.Market, strategyID, instanceID string) {
|
||||||
|
@ -55,4 +67,18 @@ func (s *Strategy) Initialize(ctx context.Context, environ *bbgo.Environment, se
|
||||||
s.OrderExecutor.TradeCollector().OnPositionUpdate(func(position *types.Position) {
|
s.OrderExecutor.TradeCollector().OnPositionUpdate(func(position *types.Position) {
|
||||||
// bbgo.Sync(ctx, s)
|
// bbgo.Sync(ctx, s)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if !s.PositionHardLimit.IsZero() && !s.MaxPositionQuantity.IsZero() {
|
||||||
|
log.Infof("positionHardLimit and maxPositionQuantity are configured, setting up PositionRiskControl...")
|
||||||
|
s.positionRiskControl = riskcontrol.NewPositionRiskControl(s.OrderExecutor, s.PositionHardLimit, s.MaxPositionQuantity)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !s.CircuitBreakLossThreshold.IsZero() {
|
||||||
|
log.Infof("circuitBreakLossThreshold is configured, setting up CircuitBreakRiskControl...")
|
||||||
|
s.circuitBreakRiskControl = riskcontrol.NewCircuitBreakRiskControl(
|
||||||
|
s.Position,
|
||||||
|
session.Indicators(market.Symbol).EWMA(s.CircuitBreakEMA),
|
||||||
|
s.CircuitBreakLossThreshold,
|
||||||
|
s.ProfitStats)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,6 @@ import (
|
||||||
"github.com/c9s/bbgo/pkg/bbgo"
|
"github.com/c9s/bbgo/pkg/bbgo"
|
||||||
"github.com/c9s/bbgo/pkg/fixedpoint"
|
"github.com/c9s/bbgo/pkg/fixedpoint"
|
||||||
"github.com/c9s/bbgo/pkg/indicator"
|
"github.com/c9s/bbgo/pkg/indicator"
|
||||||
"github.com/c9s/bbgo/pkg/risk/riskcontrol"
|
|
||||||
"github.com/c9s/bbgo/pkg/strategy/common"
|
"github.com/c9s/bbgo/pkg/strategy/common"
|
||||||
"github.com/c9s/bbgo/pkg/types"
|
"github.com/c9s/bbgo/pkg/types"
|
||||||
)
|
)
|
||||||
|
@ -33,15 +32,6 @@ type Strategy struct {
|
||||||
FastWindow int `json:"fastWindow"`
|
FastWindow int `json:"fastWindow"`
|
||||||
|
|
||||||
bbgo.OpenPositionOptions
|
bbgo.OpenPositionOptions
|
||||||
|
|
||||||
// risk related parameters
|
|
||||||
PositionHardLimit fixedpoint.Value `json:"positionHardLimit"`
|
|
||||||
MaxPositionQuantity fixedpoint.Value `json:"maxPositionQuantity"`
|
|
||||||
CircuitBreakLossThreshold fixedpoint.Value `json:"circuitBreakLossThreshold"`
|
|
||||||
CircuitBreakEMA types.IntervalWindow `json:"circuitBreakEMA"`
|
|
||||||
|
|
||||||
positionRiskControl *riskcontrol.PositionRiskControl
|
|
||||||
circuitBreakRiskControl *riskcontrol.CircuitBreakRiskControl
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Strategy) ID() string {
|
func (s *Strategy) ID() string {
|
||||||
|
@ -60,20 +50,6 @@ func (s *Strategy) Run(ctx context.Context, orderExecutor bbgo.OrderExecutor, se
|
||||||
s.Strategy = &common.Strategy{}
|
s.Strategy = &common.Strategy{}
|
||||||
s.Strategy.Initialize(ctx, s.Environment, session, s.Market, ID, s.InstanceID())
|
s.Strategy.Initialize(ctx, s.Environment, session, s.Market, ID, s.InstanceID())
|
||||||
|
|
||||||
if !s.PositionHardLimit.IsZero() && !s.MaxPositionQuantity.IsZero() {
|
|
||||||
log.Infof("positionHardLimit and maxPositionQuantity are configured, setting up PositionRiskControl...")
|
|
||||||
s.positionRiskControl = riskcontrol.NewPositionRiskControl(s.OrderExecutor, s.PositionHardLimit, s.MaxPositionQuantity)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !s.CircuitBreakLossThreshold.IsZero() {
|
|
||||||
log.Infof("circuitBreakLossThreshold is configured, setting up CircuitBreakRiskControl...")
|
|
||||||
s.circuitBreakRiskControl = riskcontrol.NewCircuitBreakRiskControl(
|
|
||||||
s.Position,
|
|
||||||
session.Indicators(s.Symbol).EWMA(s.CircuitBreakEMA),
|
|
||||||
s.CircuitBreakLossThreshold,
|
|
||||||
s.ProfitStats)
|
|
||||||
}
|
|
||||||
|
|
||||||
fastRsi := session.Indicators(s.Symbol).RSI(types.IntervalWindow{Interval: s.Interval, Window: s.FastWindow})
|
fastRsi := session.Indicators(s.Symbol).RSI(types.IntervalWindow{Interval: s.Interval, Window: s.FastWindow})
|
||||||
slowRsi := session.Indicators(s.Symbol).RSI(types.IntervalWindow{Interval: s.Interval, Window: s.SlowWindow})
|
slowRsi := session.Indicators(s.Symbol).RSI(types.IntervalWindow{Interval: s.Interval, Window: s.SlowWindow})
|
||||||
rsiCross := indicator.Cross(fastRsi, slowRsi)
|
rsiCross := indicator.Cross(fastRsi, slowRsi)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user