Skip to content

Commit 16e145f

Browse files
committed
Adds additional_collateral_used field, renders orig currency
1 parent f692f1c commit 16e145f

File tree

6 files changed

+794
-756
lines changed

6 files changed

+794
-756
lines changed

engine/rpcserver.go

+22-7
Original file line numberDiff line numberDiff line change
@@ -4416,6 +4416,9 @@ func (s *RPCServer) GetCollateral(ctx context.Context, r *gctrpc.GetCollateralRe
44164416
if !collateral.UsedBreakdown.UsedInPositions.IsZero() {
44174417
result.UsedBreakdown.UsedInFutures = collateral.UsedBreakdown.UsedInPositions.String() + collateralDisplayCurrency
44184418
}
4419+
if !collateral.UsedBreakdown.UsedInSpotMarginBorrows.IsZero() {
4420+
result.UsedBreakdown.UsedInSpotMargin = collateral.UsedBreakdown.UsedInSpotMarginBorrows.String() + collateralDisplayCurrency
4421+
}
44194422
}
44204423
if r.IncludeBreakdown {
44214424
for i := range collateral.BreakdownOfPositions {
@@ -4444,34 +4447,46 @@ func (s *RPCServer) GetCollateral(ctx context.Context, r *gctrpc.GetCollateralRe
44444447
CollateralContribution: collateral.BreakdownByCurrency[i].CollateralContribution.String() + collateralDisplayCurrency,
44454448
ScaledToCurrency: collateral.BreakdownByCurrency[i].ScaledCurrency.String(),
44464449
}
4450+
if !collateral.BreakdownByCurrency[i].AdditionalCollateralUsed.IsZero() {
4451+
cb.AdditionalCollateralUsed = collateral.BreakdownByCurrency[i].AdditionalCollateralUsed.String() + collateralDisplayCurrency
4452+
}
4453+
44474454
if !collateral.BreakdownByCurrency[i].ScaledUsed.IsZero() {
44484455
cb.FundsInUse = collateral.BreakdownByCurrency[i].ScaledUsed.String() + collateralDisplayCurrency
44494456
}
44504457
if !collateral.BreakdownByCurrency[i].UnrealisedPNL.IsZero() {
44514458
cb.UnrealisedPNL = collateral.BreakdownByCurrency[i].UnrealisedPNL.String() + collateralDisplayCurrency
44524459
}
44534460
if collateral.BreakdownByCurrency[i].ScaledUsedBreakdown != nil {
4461+
breakDownDisplayCurrency := collateralDisplayCurrency
4462+
if collateral.BreakdownByCurrency[i].Weighting.IsZero() && collateral.BreakdownByCurrency[i].FairMarketValue.IsZero() {
4463+
// cannot determine value, show in like currency instead
4464+
breakDownDisplayCurrency = originalDisplayCurrency
4465+
}
44544466
cb.UsedBreakdown = &gctrpc.CollateralUsedBreakdown{}
44554467
if !collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInStakes.IsZero() {
4456-
cb.UsedBreakdown.LockedInStakes = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInStakes.String() + collateralDisplayCurrency
4468+
cb.UsedBreakdown.LockedInStakes = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInStakes.String() + breakDownDisplayCurrency
44574469
}
44584470
if !collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInNFTBids.IsZero() {
4459-
cb.UsedBreakdown.LockedInNFTBids = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInNFTBids.String() + collateralDisplayCurrency
4471+
cb.UsedBreakdown.LockedInNFTBids = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInNFTBids.String() + breakDownDisplayCurrency
44604472
}
44614473
if !collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInFeeVoucher.IsZero() {
4462-
cb.UsedBreakdown.LockedInFeeVoucher = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInFeeVoucher.String() + collateralDisplayCurrency
4474+
cb.UsedBreakdown.LockedInFeeVoucher = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInFeeVoucher.String() + breakDownDisplayCurrency
44634475
}
44644476
if !collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInSpotMarginFundingOffers.IsZero() {
4465-
cb.UsedBreakdown.LockedInSpotMarginFundingOffers = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInSpotMarginFundingOffers.String() + collateralDisplayCurrency
4477+
cb.UsedBreakdown.LockedInSpotMarginFundingOffers = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInSpotMarginFundingOffers.String() + breakDownDisplayCurrency
44664478
}
44674479
if !collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInSpotOrders.IsZero() {
4468-
cb.UsedBreakdown.LockedInSpotOrders = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInSpotOrders.String() + collateralDisplayCurrency
4480+
cb.UsedBreakdown.LockedInSpotOrders = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedInSpotOrders.String() + breakDownDisplayCurrency
44694481
}
44704482
if !collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedAsCollateral.IsZero() {
4471-
cb.UsedBreakdown.LockedAsCollateral = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedAsCollateral.String() + collateralDisplayCurrency
4483+
cb.UsedBreakdown.LockedAsCollateral = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.LockedAsCollateral.String() + breakDownDisplayCurrency
44724484
}
44734485
if !collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.UsedInPositions.IsZero() {
4474-
cb.UsedBreakdown.UsedInFutures = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.UsedInPositions.String() + collateralDisplayCurrency
4486+
cb.UsedBreakdown.UsedInFutures = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.UsedInPositions.String() + breakDownDisplayCurrency
4487+
}
4488+
if !collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.UsedInSpotMarginBorrows.IsZero() {
4489+
cb.UsedBreakdown.UsedInSpotMargin = collateral.BreakdownByCurrency[i].ScaledUsedBreakdown.UsedInSpotMarginBorrows.String() + breakDownDisplayCurrency
44754490
}
44764491
}
44774492
if collateral.BreakdownByCurrency[i].Error != nil {

exchanges/ftx/ftx_wrapper.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -1524,6 +1524,7 @@ func (f *FTX) calculateTotalCollateralOnline(ctx context.Context, calc *order.To
15241524
currencyBreakdown.Weighting = c.PositiveBalances[y].CollateralWeight
15251525
currencyBreakdown.FairMarketValue = c.PositiveBalances[y].ApproximateFairMarketValue
15261526
currencyBreakdown.CollateralContribution = c.PositiveBalances[y].AvailableIgnoringCollateral.Mul(c.PositiveBalances[y].ApproximateFairMarketValue).Mul(currencyBreakdown.Weighting)
1527+
currencyBreakdown.AdditionalCollateralUsed = c.PositiveBalances[y].CollateralUsed
15271528
currencyBreakdown.FairMarketValue = c.PositiveBalances[y].ApproximateFairMarketValue
15281529
currencyBreakdown.AvailableForUseAsCollateral = c.PositiveBalances[y].AvailableIgnoringCollateral
15291530
}
@@ -1534,6 +1535,7 @@ func (f *FTX) calculateTotalCollateralOnline(ctx context.Context, calc *order.To
15341535
currencyBreakdown.Weighting = c.NegativeBalances[y].CollateralWeight
15351536
currencyBreakdown.FairMarketValue = c.NegativeBalances[y].ApproximateFairMarketValue
15361537
currencyBreakdown.CollateralContribution = c.NegativeBalances[y].AvailableIgnoringCollateral.Mul(c.NegativeBalances[y].ApproximateFairMarketValue).Mul(currencyBreakdown.Weighting)
1538+
currencyBreakdown.AdditionalCollateralUsed = c.NegativeBalances[y].CollateralUsed
15371539
currencyBreakdown.FairMarketValue = c.NegativeBalances[y].ApproximateFairMarketValue
15381540
currencyBreakdown.AvailableForUseAsCollateral = c.NegativeBalances[y].AvailableIgnoringCollateral
15391541
}
@@ -1553,7 +1555,8 @@ func (f *FTX) calculateTotalCollateralOnline(ctx context.Context, calc *order.To
15531555
lockedN := decimal.NewFromFloat(balances[y].LockedBreakdown.LockedInNFTBids)
15541556
lockedO := decimal.NewFromFloat(balances[y].LockedBreakdown.LockedInSpotOrders)
15551557
lockedFO := decimal.NewFromFloat(balances[y].LockedBreakdown.LockedInSpotMarginFundingOffers)
1556-
locked := decimal.Sum(lockedS, lockedC, lockedF, lockedN, lockedO, lockedFO)
1558+
lockedSMB := decimal.NewFromFloat(balances[y].SpotBorrow)
1559+
locked := decimal.Sum(lockedS, lockedC, lockedF, lockedN, lockedO, lockedFO, lockedSMB)
15571560
if !locked.IsZero() {
15581561
if result.UsedBreakdown == nil {
15591562
result.UsedBreakdown = &order.UsedCollateralBreakdown{}
@@ -1579,6 +1582,7 @@ func (f *FTX) calculateTotalCollateralOnline(ctx context.Context, calc *order.To
15791582
LockedInSpotMarginFundingOffers: lockedFO.Mul(currencyBreakdown.FairMarketValue).Mul(currencyBreakdown.Weighting),
15801583
LockedInSpotOrders: lockedO.Mul(currencyBreakdown.FairMarketValue).Mul(currencyBreakdown.Weighting),
15811584
LockedAsCollateral: lockedC.Mul(currencyBreakdown.FairMarketValue).Mul(currencyBreakdown.Weighting),
1585+
UsedInSpotMarginBorrows: lockedSMB.Mul(currencyBreakdown.FairMarketValue).Mul(currencyBreakdown.Weighting),
15821586
}
15831587
if resetWeightingToZero {
15841588
currencyBreakdown.Weighting = decimal.Zero
@@ -1596,6 +1600,7 @@ func (f *FTX) calculateTotalCollateralOnline(ctx context.Context, calc *order.To
15961600
result.UsedBreakdown.LockedInNFTBids = result.UsedBreakdown.LockedInNFTBids.Add(currencyBreakdown.ScaledUsedBreakdown.LockedInNFTBids)
15971601
result.UsedBreakdown.LockedInSpotOrders = result.UsedBreakdown.LockedInSpotOrders.Add(currencyBreakdown.ScaledUsedBreakdown.LockedInSpotOrders)
15981602
result.UsedBreakdown.LockedInSpotMarginFundingOffers = result.UsedBreakdown.LockedInSpotMarginFundingOffers.Add(currencyBreakdown.ScaledUsedBreakdown.LockedInSpotMarginFundingOffers)
1603+
result.UsedBreakdown.UsedInSpotMarginBorrows = result.UsedBreakdown.UsedInSpotMarginBorrows.Add(currencyBreakdown.ScaledUsedBreakdown.UsedInSpotMarginBorrows)
15991604
}
16001605
}
16011606
}

exchanges/order/futures_types.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,10 @@ type CollateralByCurrency struct {
9393
SkipContribution bool
9494
TotalFunds decimal.Decimal
9595
AvailableForUseAsCollateral decimal.Decimal
96+
CollateralContribution decimal.Decimal
97+
AdditionalCollateralUsed decimal.Decimal
9698
FairMarketValue decimal.Decimal
9799
Weighting decimal.Decimal
98-
CollateralContribution decimal.Decimal
99100
ScaledCurrency currency.Code
100101
UnrealisedPNL decimal.Decimal
101102
ScaledUsed decimal.Decimal
@@ -113,6 +114,7 @@ type UsedCollateralBreakdown struct {
113114
LockedInSpotOrders decimal.Decimal
114115
LockedAsCollateral decimal.Decimal
115116
UsedInPositions decimal.Decimal
117+
UsedInSpotMarginBorrows decimal.Decimal
116118
}
117119

118120
// PositionController manages all futures orders

0 commit comments

Comments
 (0)