Skip to content

Commit d5cb8c7

Browse files
convert to using decimal
1 parent b58d5f9 commit d5cb8c7

18 files changed

+604
-576
lines changed

accounts_models.go

+95-93
Large diffs are not rendered by default.

accounts_test.go

+94-93
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"testing"
77
"time"
88

9+
"github.com/shopspring/decimal"
910
"github.com/stretchr/testify/require"
1011
)
1112

@@ -73,7 +74,7 @@ func TestGetAccountTradingStatus(t *testing.T) {
7374
require.Equal(t, 0, resp.DayTradeCount)
7475
require.Equal(t, "IRA Margin", resp.EquitiesMarginCalculationType)
7576
require.Equal(t, "default", resp.FeeScheduleName)
76-
require.Equal(t, StringToFloat32(0.0), resp.FuturesMarginRateMultiplier)
77+
require.True(t, decimal.Zero.Equal(resp.FuturesMarginRateMultiplier))
7778
require.False(t, resp.HasIntradayEquitiesMargin)
7879
require.Equal(t, 447096, resp.ID)
7980
require.False(t, resp.IsAggregatedAtClearing)
@@ -96,7 +97,7 @@ func TestGetAccountTradingStatus(t *testing.T) {
9697
require.True(t, resp.AreFarOtmNetOptionsRestricted)
9798
require.Equal(t, "Defined Risk Spreads", resp.OptionsLevel)
9899
require.False(t, resp.ShortCallsEnabled)
99-
require.Equal(t, StringToFloat32(0.0), resp.SmallNotionalFuturesMarginRateMultiplier)
100+
require.True(t, decimal.Zero.Equal(resp.SmallNotionalFuturesMarginRateMultiplier))
100101
require.False(t, resp.IsEquityOfferingEnabled)
101102
require.False(t, resp.IsEquityOfferingClosingOnly)
102103
require.Equal(t, "2022-10-27T20:49:52.928Z", resp.EnhancedFraudSafeguardsEnabledAt.Format(time.RFC3339Nano))
@@ -132,40 +133,40 @@ func TestGetAccountBalances(t *testing.T) {
132133
require.Nil(t, err)
133134

134135
require.Equal(t, "5YZ55555", resp.AccountNumber)
135-
require.Equal(t, StringToFloat32(51600.762), resp.CashBalance)
136-
require.Equal(t, StringToFloat32(281983.415), resp.LongEquityValue)
137-
require.Equal(t, StringToFloat32(0.0), resp.ShortEquityValue)
138-
require.Equal(t, StringToFloat32(0.0), resp.LongDerivativeValue)
139-
require.Equal(t, StringToFloat32(82680.5), resp.ShortDerivativeValue)
140-
require.Equal(t, StringToFloat32(0.0), resp.LongFuturesValue)
141-
require.Equal(t, StringToFloat32(0.0), resp.ShortFuturesValue)
142-
require.Equal(t, StringToFloat32(0.0), resp.LongFuturesDerivativeValue)
143-
require.Equal(t, StringToFloat32(0.0), resp.ShortFuturesDerivativeValue)
144-
require.Equal(t, StringToFloat32(0.0), resp.LongMargineableValue)
145-
require.Equal(t, StringToFloat32(0.0), resp.ShortMargineableValue)
146-
require.Equal(t, StringToFloat32(452284.177), resp.MarginEquity)
147-
require.Equal(t, StringToFloat32(20078.762), resp.EquityBuyingPower)
148-
require.Equal(t, StringToFloat32(20078.762), resp.DerivativeBuyingPower)
149-
require.Equal(t, StringToFloat32(0.0), resp.DayTradingBuyingPower)
150-
require.Equal(t, StringToFloat32(0.0), resp.FuturesMarginRequirement)
151-
require.Equal(t, StringToFloat32(0.0), resp.AvailableTradingFunds)
152-
require.Equal(t, StringToFloat32(432279.234), resp.MaintenanceRequirement)
153-
require.Equal(t, StringToFloat32(0.0), resp.MaintenanceCallValue)
154-
require.Equal(t, StringToFloat32(0.0), resp.RegTCallValue)
155-
require.Equal(t, StringToFloat32(0.0), resp.DayTradingCallValue)
156-
require.Equal(t, StringToFloat32(0.0), resp.DayEquityCallValue)
157-
require.Equal(t, StringToFloat32(543557.677), resp.NetLiquidatingValue)
158-
require.Equal(t, StringToFloat32(20078.76), resp.CashAvailableToWithdraw)
159-
require.Equal(t, StringToFloat32(0.0), resp.EquityOfferingMarginRequirement)
160-
require.Equal(t, StringToFloat32(0.0), resp.LongBondValue)
161-
require.Equal(t, StringToFloat32(0.0), resp.BondMarginRequirement)
136+
require.Equal(t, decimal.NewFromFloat(51600.762), resp.CashBalance)
137+
require.Equal(t, decimal.NewFromFloat(281983.415), resp.LongEquityValue)
138+
require.True(t, decimal.Zero.Equal(resp.ShortEquityValue))
139+
require.True(t, decimal.Zero.Equal(resp.LongDerivativeValue))
140+
require.Equal(t, decimal.NewFromFloat(82680.5), resp.ShortDerivativeValue)
141+
require.True(t, decimal.Zero.Equal(resp.LongFuturesValue))
142+
require.True(t, decimal.Zero.Equal(resp.ShortFuturesValue))
143+
require.True(t, decimal.Zero.Equal(resp.LongFuturesDerivativeValue))
144+
require.True(t, decimal.Zero.Equal(resp.ShortFuturesDerivativeValue))
145+
require.True(t, decimal.Zero.Equal(resp.LongMargineableValue))
146+
require.True(t, decimal.Zero.Equal(resp.ShortMargineableValue))
147+
require.Equal(t, decimal.NewFromFloat(452284.177), resp.MarginEquity)
148+
require.Equal(t, decimal.NewFromFloat(20078.762), resp.EquityBuyingPower)
149+
require.Equal(t, decimal.NewFromFloat(20078.762), resp.DerivativeBuyingPower)
150+
require.True(t, decimal.Zero.Equal(resp.DayTradingBuyingPower))
151+
require.True(t, decimal.Zero.Equal(resp.FuturesMarginRequirement))
152+
require.True(t, decimal.Zero.Equal(resp.AvailableTradingFunds))
153+
require.Equal(t, decimal.NewFromFloat(432279.234), resp.MaintenanceRequirement)
154+
require.True(t, decimal.Zero.Equal(resp.MaintenanceCallValue))
155+
require.True(t, decimal.Zero.Equal(resp.RegTCallValue))
156+
require.True(t, decimal.Zero.Equal(resp.DayTradingCallValue))
157+
require.True(t, decimal.Zero.Equal(resp.DayEquityCallValue))
158+
require.Equal(t, decimal.NewFromFloat(543557.677), resp.NetLiquidatingValue)
159+
require.Equal(t, decimal.NewFromFloat(20078.76), resp.CashAvailableToWithdraw)
160+
require.True(t, decimal.Zero.Equal(resp.EquityOfferingMarginRequirement))
161+
require.True(t, decimal.Zero.Equal(resp.LongBondValue))
162+
require.True(t, decimal.Zero.Equal(resp.BondMarginRequirement))
162163
require.Equal(t, "2023-06-08", resp.SnapshotDate)
163-
require.Equal(t, StringToFloat32(432279.2338), resp.RegTMarginRequirement)
164-
require.Equal(t, StringToFloat32(0.0), resp.FuturesOvernightMarginRequirement)
165-
require.Equal(t, StringToFloat32(0.0), resp.FuturesIntradayMarginRequirement)
166-
require.Equal(t, StringToFloat32(20078.762), resp.MaintenanceExcess)
167-
require.Equal(t, StringToFloat32(0.0), resp.PendingMarginInterest)
168-
require.Equal(t, StringToFloat32(20078.76), resp.EffectiveCryptocurrencyBuyingPower)
164+
require.Equal(t, decimal.NewFromFloat(432279.2338), resp.RegTMarginRequirement)
165+
require.True(t, decimal.Zero.Equal(resp.FuturesOvernightMarginRequirement))
166+
require.True(t, decimal.Zero.Equal(resp.FuturesIntradayMarginRequirement))
167+
require.Equal(t, decimal.NewFromFloat(20078.762), resp.MaintenanceExcess)
168+
require.True(t, decimal.Zero.Equal(resp.PendingMarginInterest))
169+
require.Equal(t, decimal.NewFromFloat(20078.76), resp.EffectiveCryptocurrencyBuyingPower)
169170
require.Equal(t, "2023-06-08T16:30:18.889Z", resp.UpdatedAt.Format(time.RFC3339Nano))
170171
}
171172

@@ -206,20 +207,20 @@ func TestGetAccountPositions(t *testing.T) {
206207
require.Equal(t, "RIVN", rivn.UnderlyingSymbol)
207208
require.Equal(t, 40, rivn.Quantity)
208209
require.Equal(t, Short, rivn.QuantityDirection)
209-
require.Equal(t, StringToFloat32(0.41), rivn.ClosePrice)
210-
require.Equal(t, StringToFloat32(0.79), rivn.AverageOpenPrice)
211-
require.Equal(t, StringToFloat32(0.79), rivn.AverageYearlyMarketClosePrice)
212-
require.Equal(t, StringToFloat32(0.41), rivn.AverageDailyMarketClosePrice)
210+
require.Equal(t, decimal.NewFromFloat(0.41), rivn.ClosePrice)
211+
require.Equal(t, decimal.NewFromFloat(0.79), rivn.AverageOpenPrice)
212+
require.Equal(t, decimal.NewFromFloat(0.79), rivn.AverageYearlyMarketClosePrice)
213+
require.Equal(t, decimal.NewFromFloat(0.41), rivn.AverageDailyMarketClosePrice)
213214
require.Equal(t, 100, rivn.Multiplier)
214215
require.Equal(t, Debit, rivn.CostEffect)
215216
require.False(t, rivn.IsSuppressed)
216217
require.False(t, rivn.IsFrozen)
217218
require.Equal(t, 0, rivn.RestrictedQuantity)
218219
require.Equal(t, "2023-06-09T20:00:00Z", rivn.ExpiresAt.Format(time.RFC3339))
219-
require.Equal(t, StringToFloat32(0.0), rivn.RealizedDayGain)
220+
require.True(t, decimal.Zero.Equal(rivn.RealizedDayGain))
220221
require.Equal(t, None, rivn.RealizedDayGainEffect)
221222
require.Equal(t, "2023-05-24", rivn.RealizedDayGainDate)
222-
require.Equal(t, StringToFloat32(0.0), rivn.RealizedToday)
223+
require.True(t, decimal.Zero.Equal(rivn.RealizedToday))
223224
require.Equal(t, None, rivn.RealizedTodayEffect)
224225
require.Equal(t, "2023-05-24", rivn.RealizedTodayDate)
225226
require.Equal(t, "2023-05-24T17:17:57.615Z", rivn.CreatedAt.Format(time.RFC3339Nano))
@@ -259,49 +260,49 @@ func TestGetAccountBalanceSnapshots(t *testing.T) {
259260
snap := resp[0]
260261

261262
require.Equal(t, "5YZ55555", snap.AccountNumber)
262-
require.Equal(t, StringToFloat32(51600.762), snap.CashBalance)
263-
require.Equal(t, StringToFloat32(281983.965), snap.LongEquityValue)
264-
require.Equal(t, StringToFloat32(0.0), snap.ShortEquityValue)
265-
require.Equal(t, StringToFloat32(0.0), snap.LongDerivativeValue)
266-
require.Equal(t, StringToFloat32(82680.0), snap.ShortDerivativeValue)
267-
require.Equal(t, StringToFloat32(0.0), snap.LongFuturesValue)
268-
require.Equal(t, StringToFloat32(0.0), snap.ShortFuturesValue)
269-
require.Equal(t, StringToFloat32(0.0), snap.LongFuturesDerivativeValue)
270-
require.Equal(t, StringToFloat32(0.0), snap.ShortFuturesDerivativeValue)
271-
require.Equal(t, StringToFloat32(0.0), snap.LongMargineableValue)
272-
require.Equal(t, StringToFloat32(0.0), snap.ShortMargineableValue)
273-
require.Equal(t, StringToFloat32(452284.727), snap.MarginEquity)
274-
require.Equal(t, StringToFloat32(20078.762), snap.EquityBuyingPower)
275-
require.Equal(t, StringToFloat32(20078.762), snap.DerivativeBuyingPower)
276-
require.Equal(t, StringToFloat32(0.0), snap.DayTradingBuyingPower)
277-
require.Equal(t, StringToFloat32(0.0), snap.FuturesMarginRequirement)
278-
require.Equal(t, StringToFloat32(0.0), snap.AvailableTradingFunds)
279-
require.Equal(t, StringToFloat32(432279.047), snap.MaintenanceRequirement)
280-
require.Equal(t, StringToFloat32(0.0), snap.MaintenanceCallValue)
281-
require.Equal(t, StringToFloat32(0.0), snap.RegTCallValue)
282-
require.Equal(t, StringToFloat32(0.0), snap.DayTradingCallValue)
283-
require.Equal(t, StringToFloat32(0.0), snap.DayEquityCallValue)
284-
require.Equal(t, StringToFloat32(4544.727), snap.NetLiquidatingValue)
285-
require.Equal(t, StringToFloat32(20078.76), snap.CashAvailableToWithdraw)
286-
require.Equal(t, StringToFloat32(20078.76), snap.DayTradeExcess)
287-
require.Equal(t, StringToFloat32(0.0), snap.PendingCash)
263+
require.Equal(t, decimal.NewFromFloat(51600.762), snap.CashBalance)
264+
require.Equal(t, decimal.NewFromFloat(281983.965), snap.LongEquityValue)
265+
require.True(t, decimal.Zero.Equal(snap.ShortEquityValue))
266+
require.True(t, decimal.Zero.Equal(snap.LongDerivativeValue))
267+
require.True(t, snap.ShortDerivativeValue.Equal(decimal.NewFromInt(82680)))
268+
require.True(t, decimal.Zero.Equal(snap.LongFuturesValue))
269+
require.True(t, decimal.Zero.Equal(snap.ShortFuturesValue))
270+
require.True(t, decimal.Zero.Equal(snap.LongFuturesDerivativeValue))
271+
require.True(t, decimal.Zero.Equal(snap.ShortFuturesDerivativeValue))
272+
require.True(t, decimal.Zero.Equal(snap.LongMargineableValue))
273+
require.True(t, decimal.Zero.Equal(snap.ShortMargineableValue))
274+
require.Equal(t, decimal.NewFromFloat(452284.727), snap.MarginEquity)
275+
require.Equal(t, decimal.NewFromFloat(20078.762), snap.EquityBuyingPower)
276+
require.Equal(t, decimal.NewFromFloat(20078.762), snap.DerivativeBuyingPower)
277+
require.True(t, decimal.Zero.Equal(snap.DayTradingBuyingPower))
278+
require.True(t, decimal.Zero.Equal(snap.FuturesMarginRequirement))
279+
require.True(t, decimal.Zero.Equal(snap.AvailableTradingFunds))
280+
require.Equal(t, decimal.NewFromFloat(432279.047), snap.MaintenanceRequirement)
281+
require.True(t, decimal.Zero.Equal(snap.MaintenanceCallValue))
282+
require.True(t, decimal.Zero.Equal(snap.RegTCallValue))
283+
require.True(t, decimal.Zero.Equal(snap.DayTradingCallValue))
284+
require.True(t, decimal.Zero.Equal(snap.DayEquityCallValue))
285+
require.Equal(t, decimal.NewFromFloat(4544.727), snap.NetLiquidatingValue)
286+
require.Equal(t, decimal.NewFromFloat(20078.76), snap.CashAvailableToWithdraw)
287+
require.Equal(t, decimal.NewFromFloat(20078.76), snap.DayTradeExcess)
288+
require.True(t, decimal.Zero.Equal(snap.PendingCash))
288289
require.Equal(t, None, snap.PendingCashEffect)
289-
require.Equal(t, StringToFloat32(0.0), snap.LongCryptocurrencyValue)
290-
require.Equal(t, StringToFloat32(0.0), snap.ShortCryptocurrencyValue)
291-
require.Equal(t, StringToFloat32(0.0), snap.CryptocurrencyMarginRequirement)
292-
require.Equal(t, StringToFloat32(0.0), snap.UnsettledCryptocurrencyFiatAmount)
290+
require.True(t, decimal.Zero.Equal(snap.LongCryptocurrencyValue))
291+
require.True(t, decimal.Zero.Equal(snap.ShortCryptocurrencyValue))
292+
require.True(t, decimal.Zero.Equal(snap.CryptocurrencyMarginRequirement))
293+
require.True(t, decimal.Zero.Equal(snap.UnsettledCryptocurrencyFiatAmount))
293294
require.Equal(t, None, snap.UnsettledCryptocurrencyFiatEffect)
294-
require.Equal(t, StringToFloat32(20078.76), snap.ClosedLoopAvailableBalance)
295-
require.Equal(t, StringToFloat32(0.0), snap.EquityOfferingMarginRequirement)
296-
require.Equal(t, StringToFloat32(0.0), snap.LongBondValue)
297-
require.Equal(t, StringToFloat32(0.0), snap.BondMarginRequirement)
295+
require.Equal(t, decimal.NewFromFloat(20078.76), snap.ClosedLoopAvailableBalance)
296+
require.True(t, decimal.Zero.Equal(snap.EquityOfferingMarginRequirement))
297+
require.True(t, decimal.Zero.Equal(snap.LongBondValue))
298+
require.True(t, decimal.Zero.Equal(snap.BondMarginRequirement))
298299
require.Equal(t, "2023-06-08", snap.SnapshotDate)
299-
require.Equal(t, StringToFloat32(432279.0465), snap.RegTMarginRequirement)
300-
require.Equal(t, StringToFloat32(0.0), snap.FuturesOvernightMarginRequirement)
301-
require.Equal(t, StringToFloat32(0.0), snap.FuturesIntradayMarginRequirement)
302-
require.Equal(t, StringToFloat32(20078.762), snap.MaintenanceExcess)
303-
require.Equal(t, StringToFloat32(0.0), snap.PendingMarginInterest)
304-
require.Equal(t, StringToFloat32(20078.76), snap.EffectiveCryptocurrencyBuyingPower)
300+
require.Equal(t, decimal.NewFromFloat(432279.0465), snap.RegTMarginRequirement)
301+
require.True(t, decimal.Zero.Equal(snap.FuturesOvernightMarginRequirement))
302+
require.True(t, decimal.Zero.Equal(snap.FuturesIntradayMarginRequirement))
303+
require.Equal(t, decimal.NewFromFloat(20078.762), snap.MaintenanceExcess)
304+
require.True(t, decimal.Zero.Equal(snap.PendingMarginInterest))
305+
require.Equal(t, decimal.NewFromFloat(20078.76), snap.EffectiveCryptocurrencyBuyingPower)
305306
require.Equal(t, "2023-06-08T18:37:39.568Z", snap.UpdatedAt.Format(time.RFC3339Nano))
306307
}
307308

@@ -339,18 +340,18 @@ func TestGetAccountNetLiqHistory(t *testing.T) {
339340

340341
liq := resp[0]
341342

342-
require.Equal(t, StringToFloat32(4498.667), liq.Open)
343-
require.Equal(t, StringToFloat32(4498.667), liq.High)
344-
require.Equal(t, StringToFloat32(4498.667), liq.Low)
345-
require.Equal(t, StringToFloat32(4498.667), liq.Close)
346-
require.Equal(t, StringToFloat32(0.0), liq.PendingCashOpen)
347-
require.Equal(t, StringToFloat32(0.0), liq.PendingCashHigh)
348-
require.Equal(t, StringToFloat32(0.0), liq.PendingCashLow)
349-
require.Equal(t, StringToFloat32(0.0), liq.PendingCashClose)
350-
require.Equal(t, StringToFloat32(4498.667), liq.TotalOpen)
351-
require.Equal(t, StringToFloat32(4498.667), liq.TotalHigh)
352-
require.Equal(t, StringToFloat32(4498.667), liq.TotalLow)
353-
require.Equal(t, StringToFloat32(4498.667), liq.TotalClose)
343+
require.Equal(t, decimal.NewFromFloat(4498.667), liq.Open)
344+
require.Equal(t, decimal.NewFromFloat(4498.667), liq.High)
345+
require.Equal(t, decimal.NewFromFloat(4498.667), liq.Low)
346+
require.Equal(t, decimal.NewFromFloat(4498.667), liq.Close)
347+
require.True(t, decimal.Zero.Equal(liq.PendingCashOpen))
348+
require.True(t, decimal.Zero.Equal(liq.PendingCashHigh))
349+
require.True(t, decimal.Zero.Equal(liq.PendingCashLow))
350+
require.True(t, decimal.Zero.Equal(liq.PendingCashClose))
351+
require.Equal(t, decimal.NewFromFloat(4498.667), liq.TotalOpen)
352+
require.Equal(t, decimal.NewFromFloat(4498.667), liq.TotalHigh)
353+
require.Equal(t, decimal.NewFromFloat(4498.667), liq.TotalLow)
354+
require.Equal(t, decimal.NewFromFloat(4498.667), liq.TotalClose)
354355
require.Equal(t, "2023-06-08 13:30:00+00", liq.Time)
355356
}
356357

cryptocurrencies_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"net/http"
66
"testing"
77

8+
"github.com/shopspring/decimal"
89
"github.com/stretchr/testify/require"
910
)
1011

@@ -30,7 +31,7 @@ func TestGetCryptocurrencies(t *testing.T) {
3031
require.Equal(t, "Bitcoin to USD", btc.Description)
3132
require.False(t, btc.IsClosingOnly)
3233
require.True(t, btc.Active)
33-
require.Equal(t, StringToFloat32(0.01), btc.TickSize)
34+
require.Equal(t, decimal.NewFromFloat(0.01), btc.TickSize)
3435
require.Equal(t, "BTC/USD:CXTALP", btc.StreamerSymbol)
3536

3637
venueSymbol := btc.DestinationVenueSymbols[0]
@@ -74,7 +75,7 @@ func TestGetCryptocurrency(t *testing.T) {
7475
require.Equal(t, "Bitcoin to USD", btc.Description)
7576
require.False(t, btc.IsClosingOnly)
7677
require.True(t, btc.Active)
77-
require.Equal(t, StringToFloat32(0.01), btc.TickSize)
78+
require.Equal(t, decimal.NewFromFloat(0.01), btc.TickSize)
7879
require.Equal(t, "BTC/USD:CXTALP", btc.StreamerSymbol)
7980

8081
venueSymbol := btc.DestinationVenueSymbols[0]

0 commit comments

Comments
 (0)