Skip to content

Commit

Permalink
xmaker: fix aggregatePrice function
Browse files Browse the repository at this point in the history
  • Loading branch information
c9s committed Aug 28, 2024
1 parent e187614 commit 8de0c67
Showing 1 changed file with 6 additions and 12 deletions.
18 changes: 6 additions & 12 deletions pkg/strategy/xmaker/strategy.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,29 +167,23 @@ func (s *Strategy) CrossSubscribe(sessions map[string]*bbgo.ExchangeSession) {
}

func aggregatePrice(pvs types.PriceVolumeSlice, requiredQuantity fixedpoint.Value) (price fixedpoint.Value) {
q := requiredQuantity
totalAmount := fixedpoint.Zero

if len(pvs) == 0 {
price = fixedpoint.Zero
return price
} else if pvs[0].Volume.Compare(requiredQuantity) >= 0 {
return pvs[0].Price
}

sumAmount := fixedpoint.Zero
sumQty := fixedpoint.Zero
for i := 0; i < len(pvs); i++ {
pv := pvs[i]
if pv.Volume.Compare(q) >= 0 {
totalAmount = totalAmount.Add(q.Mul(pv.Price))
sumQty = sumQty.Add(pv.Volume)
sumAmount = sumAmount.Add(pv.Volume.Mul(pv.Price))
if sumQty.Compare(requiredQuantity) >= 0 {
break
}

q = q.Sub(pv.Volume)
totalAmount = totalAmount.Add(pv.Volume.Mul(pv.Price))
}

price = totalAmount.Div(requiredQuantity)
return price
return sumAmount.Div(sumQty)
}

func (s *Strategy) Initialize() error {
Expand Down

0 comments on commit 8de0c67

Please sign in to comment.