mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-10 09:11:55 +00:00
liquiditymaker: refactor profit fixer
This commit is contained in:
parent
e293ec5c70
commit
d982524824
|
@ -4,6 +4,7 @@ import (
|
|||
"context"
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
|
@ -27,6 +28,41 @@ func init() {
|
|||
bbgo.RegisterStrategy(ID, &Strategy{})
|
||||
}
|
||||
|
||||
type ProfitFixer struct {
|
||||
ProfitFixerConfig *common.ProfitFixerConfig `json:"profitFixer,omitempty"`
|
||||
}
|
||||
|
||||
func (f *ProfitFixer) Fix(
|
||||
ctx context.Context,
|
||||
symbol string,
|
||||
position *types.Position,
|
||||
profitStats *types.ProfitStats,
|
||||
sessions ...*bbgo.ExchangeSession,
|
||||
) error {
|
||||
bbgo.Notify("Fixing %s profitStats and position...", symbol)
|
||||
|
||||
log.Infof("profitFixer is enabled, checking checkpoint: %+v", f.ProfitFixerConfig.TradesSince)
|
||||
|
||||
if f.ProfitFixerConfig.TradesSince.Time().IsZero() {
|
||||
return fmt.Errorf("tradesSince time can not be zero")
|
||||
}
|
||||
|
||||
fixer := common.NewProfitFixer()
|
||||
for _, session := range sessions {
|
||||
if ss, ok := session.Exchange.(types.ExchangeTradeHistoryService); ok {
|
||||
log.Infof("adding makerSession %s to profitFixer", session.Name)
|
||||
fixer.AddExchange(session.Name, ss)
|
||||
}
|
||||
}
|
||||
|
||||
return fixer.Fix(ctx,
|
||||
symbol,
|
||||
f.ProfitFixerConfig.TradesSince.Time(),
|
||||
time.Now(),
|
||||
profitStats,
|
||||
position)
|
||||
}
|
||||
|
||||
// Strategy is the strategy struct of LiquidityMaker
|
||||
// liquidity maker does not care about the current price, it tries to place liquidity orders (limit maker orders)
|
||||
// around the current mid price
|
||||
|
@ -63,6 +99,8 @@ type Strategy struct {
|
|||
|
||||
MinProfit fixedpoint.Value `json:"minProfit"`
|
||||
|
||||
ProfitFixer
|
||||
|
||||
liquidityOrderBook, adjustmentOrderBook *bbgo.ActiveOrderBook
|
||||
|
||||
liquidityScale bbgo.Scale
|
||||
|
@ -91,6 +129,19 @@ func (s *Strategy) Subscribe(session *bbgo.ExchangeSession) {
|
|||
}
|
||||
|
||||
func (s *Strategy) Run(ctx context.Context, _ bbgo.OrderExecutor, session *bbgo.ExchangeSession) error {
|
||||
if s.ProfitFixer.ProfitFixerConfig != nil {
|
||||
market, _ := session.Market(s.Symbol)
|
||||
s.Position = types.NewPositionFromMarket(market)
|
||||
s.ProfitStats = types.NewProfitStats(market)
|
||||
|
||||
if err := s.ProfitFixer.Fix(ctx, s.Symbol, s.Position, s.ProfitStats, session); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
bbgo.Notify("Fixed %s position", s.Symbol, s.Position)
|
||||
bbgo.Notify("Fixed %s profitStats", s.Symbol, s.ProfitStats)
|
||||
}
|
||||
|
||||
s.Strategy.Initialize(ctx, s.Environment, session, s.Market, ID, s.InstanceID())
|
||||
|
||||
s.orderGenerator = &LiquidityOrderGenerator{
|
||||
|
|
|
@ -196,7 +196,7 @@ type Strategy struct {
|
|||
// Pips is the pips of the layer prices
|
||||
Pips fixedpoint.Value `json:"pips"`
|
||||
|
||||
ProfitFixerConfig *common.ProfitFixerConfig `json:"profitFixer"`
|
||||
ProfitFixerConfig *common.ProfitFixerConfig `json:"profitFixer,omitempty"`
|
||||
|
||||
// --------------------------------
|
||||
// private fields
|
||||
|
|
Loading…
Reference in New Issue
Block a user