bbgo_origin/pkg/strategy/xfunding/profitstats.go

65 lines
1.7 KiB
Go
Raw Normal View History

package xfunding
2023-03-25 17:54:39 +00:00
import (
"fmt"
2023-03-26 06:42:13 +00:00
"time"
2023-03-25 17:54:39 +00:00
"github.com/slack-go/slack"
2023-03-25 17:54:39 +00:00
"github.com/c9s/bbgo/pkg/fixedpoint"
"github.com/c9s/bbgo/pkg/style"
2023-03-25 17:54:39 +00:00
"github.com/c9s/bbgo/pkg/types"
)
type ProfitStats struct {
*types.ProfitStats
FundingFeeCurrency string `json:"fundingFeeCurrency"`
TotalFundingFee fixedpoint.Value `json:"totalFundingFee"`
FundingFeeRecords []FundingFee `json:"fundingFeeRecords"`
2024-03-07 05:32:50 +00:00
// Fees map[string]
Last *FundingFee `json:"last"`
LastFundingFeeTime time.Time `json:"lastFundingFeeTime"`
txns map[int64]struct{}
2023-03-25 17:54:39 +00:00
}
func (s *ProfitStats) SlackAttachment() slack.Attachment {
var fields []slack.AttachmentField
var totalProfit = fmt.Sprintf("Total Funding Fee Profit: %s %s", style.PnLSignString(s.TotalFundingFee), s.FundingFeeCurrency)
return slack.Attachment{
Title: totalProfit,
Color: style.PnLColor(s.TotalFundingFee),
// Pretext: "",
// Text: text,
Fields: fields,
2024-03-07 05:32:50 +00:00
Footer: fmt.Sprintf("Last Funding Fee Transation ID: %d Last Funding Fee Time %s", s.Last.Txn, s.Last.Time.Format(time.RFC822)),
}
}
2023-03-25 17:54:39 +00:00
func (s *ProfitStats) AddFundingFee(fee FundingFee) error {
2024-03-07 05:32:50 +00:00
if s.txns == nil {
s.txns = make(map[int64]struct{})
}
2023-03-25 17:54:39 +00:00
if s.FundingFeeCurrency == "" {
s.FundingFeeCurrency = fee.Asset
} else if s.FundingFeeCurrency != fee.Asset {
return fmt.Errorf("unexpected error, funding fee currency is not matched, given: %s, wanted: %s", fee.Asset, s.FundingFeeCurrency)
}
2024-03-07 05:32:50 +00:00
if _, ok := s.txns[fee.Txn]; ok {
return errDuplicatedFundingFeeTxnId
}
s.FundingFeeRecords = append(s.FundingFeeRecords, fee)
s.TotalFundingFee = s.TotalFundingFee.Add(fee.Amount)
2024-03-07 05:32:50 +00:00
s.Last = &fee
s.txns[fee.Txn] = struct{}{}
2023-03-25 17:54:39 +00:00
return nil
}