From 51578b7eecb242d74f4f66828f2df1adf4f76fdc Mon Sep 17 00:00:00 2001 From: Erich Birngruber Date: Tue, 25 Feb 2014 00:22:56 +0100 Subject: [PATCH] refactor TickerValue to use CurrencyValue instead BigDecimal, fix ExchangeClient accordingly --- .../exchange/api/client/ExchangeClient.java | 4 +- .../exchange/api/currency/CurrencyValue.java | 14 +++- .../exchange/api/market/TickerValue.java | 65 ++++++++++--------- .../api/track/TickerTrackCollection.java | 3 - .../exchange/bitcurex/BitcurexApiClient.java | 4 +- .../bitcurex/jaxb/BitcurexTickerValue.java | 22 ++++--- .../exchange/bitkonan/BitkonanApiClient.java | 3 +- .../bitkonan/BitkonanTickerValue.java | 22 ++++--- .../exchange/bitstamp/BitstampClient.java | 3 +- .../bitstamp/BitstampTickerValue.java | 20 +++--- .../bitcoin/exchange/btce/BtcEApiClient.java | 4 +- .../exchange/btce/BtcETickerValue.java | 21 +++--- .../bitcoin/exchange/bter/BterApiClient.java | 6 +- .../bitcoin/exchange/bter/BterTicker.java | 19 ++++-- .../exchange/coinse/CoinseApiClient.java | 16 ++--- .../exchange/cryptsy/CryptsyApiClient.java | 11 ++-- .../bitcoin/exchange/kraken/KrakenClient.java | 18 ++--- .../kraken/jaxb/KrakenTickerValue.java | 22 ++++--- .../exchange/mtgox/TickerResponse.java | 16 ++--- .../outdated/bitcoin/exchange/MarketTest.java | 14 ++++ .../exchange/vircurex/VircurexTicker.java | 23 +++---- 21 files changed, 193 insertions(+), 137 deletions(-) diff --git a/api/src/main/java/at/outdated/bitcoin/exchange/api/client/ExchangeClient.java b/api/src/main/java/at/outdated/bitcoin/exchange/api/client/ExchangeClient.java index 6e98a93..bbef299 100644 --- a/api/src/main/java/at/outdated/bitcoin/exchange/api/client/ExchangeClient.java +++ b/api/src/main/java/at/outdated/bitcoin/exchange/api/client/ExchangeClient.java @@ -43,10 +43,10 @@ public BigDecimal getQuote(Currency base, Currency quote) { TickerValue ticker = getTicker(asset); if(asset.getBase() == base) { - rate = ticker.getBid(); + rate = ticker.getBid().getValue(); } else { - rate = BigDecimal.ONE.divide(ticker.getAsk()); + rate = BigDecimal.ONE.divide(ticker.getAsk().getValue()); } } diff --git a/api/src/main/java/at/outdated/bitcoin/exchange/api/currency/CurrencyValue.java b/api/src/main/java/at/outdated/bitcoin/exchange/api/currency/CurrencyValue.java index 6db8c10..00fc9ce 100644 --- a/api/src/main/java/at/outdated/bitcoin/exchange/api/currency/CurrencyValue.java +++ b/api/src/main/java/at/outdated/bitcoin/exchange/api/currency/CurrencyValue.java @@ -18,7 +18,17 @@ */ public class CurrencyValue implements Cloneable, Comparable { - public static final MathContext CURRENCY_MATH_CONTEXT = new MathContext(7, RoundingMode.HALF_UP); + public static final MathContext CURRENCY_MATH_CONTEXT = new MathContext(8, RoundingMode.HALF_UP); + + public static final CurrencyValue EMPTY = new CurrencyValue((Currency) null); + + public static BigDecimal createZero() { + return new BigDecimal(0L, CURRENCY_MATH_CONTEXT); + } + + private void scaleValue(BigDecimal value) { + value.setScale(CURRENCY_MATH_CONTEXT.getPrecision(), CURRENCY_MATH_CONTEXT.getRoundingMode()); + } private BigDecimal value; private Currency currency; @@ -40,7 +50,7 @@ public CurrencyValue(long value, Currency curr) { public CurrencyValue(BigDecimal value, Currency curr) { - value.setScale(CURRENCY_MATH_CONTEXT.getPrecision(), CURRENCY_MATH_CONTEXT.getRoundingMode()); + scaleValue(value); this.value = value; this.currency = curr; } diff --git a/api/src/main/java/at/outdated/bitcoin/exchange/api/market/TickerValue.java b/api/src/main/java/at/outdated/bitcoin/exchange/api/market/TickerValue.java index cc50deb..6c8c086 100644 --- a/api/src/main/java/at/outdated/bitcoin/exchange/api/market/TickerValue.java +++ b/api/src/main/java/at/outdated/bitcoin/exchange/api/market/TickerValue.java @@ -1,5 +1,8 @@ package at.outdated.bitcoin.exchange.api.market; +import at.outdated.bitcoin.exchange.api.currency.Currency; +import at.outdated.bitcoin.exchange.api.currency.CurrencyValue; + import java.math.BigDecimal; import java.util.Date; @@ -12,23 +15,29 @@ */ public class TickerValue extends TimedValue { - private BigDecimal last, bid, ask, high, low, volume; + private CurrencyValue last, bid, ask, high, low, volume; public static final int DIMENSIONS = 4; private AssetPair asset = null; - public TickerValue() { - this.timestamp = new Date(); - } - public TickerValue(AssetPair asset) { this.timestamp = new Date(); this.asset = asset; + last = new CurrencyValue(asset.getQuote()); + bid = new CurrencyValue(asset.getQuote()); + ask = new CurrencyValue(asset.getQuote()); + high = new CurrencyValue(asset.getQuote()); + low = new CurrencyValue(asset.getQuote()); + + volume = new CurrencyValue(asset.getBase()); } - public static final TickerValue createNanInstance(AssetPair curr) { - TickerValue ticker = new TickerValue(null, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, curr); + public static final TickerValue createNanInstance(AssetPair asset) { + + Currency quote = asset.getQuote(); + + TickerValue ticker = new TickerValue(null, new CurrencyValue(quote), new CurrencyValue(quote), new CurrencyValue(quote), new CurrencyValue(quote), new CurrencyValue(quote), new CurrencyValue(quote), asset); return ticker; } @@ -48,7 +57,7 @@ public TickerValue(TickerValue other) { this.asset = other.asset; } - public TickerValue(Date timestamp, BigDecimal last, BigDecimal bid, BigDecimal ask, BigDecimal volume, BigDecimal high, BigDecimal low, AssetPair asset) { + public TickerValue(Date timestamp, CurrencyValue last, CurrencyValue bid, CurrencyValue ask, CurrencyValue volume, CurrencyValue high, CurrencyValue low, AssetPair asset) { this.timestamp = timestamp; this.last = last; this.bid = bid; @@ -71,51 +80,51 @@ public void setTimestamp(Date timestamp) { this.timestamp = timestamp; } - public BigDecimal getLast() { + public CurrencyValue getLast() { return last; } - public void setLast(BigDecimal last) { + public void setLast(CurrencyValue last) { this.last = last; } - public BigDecimal getBid() { + public CurrencyValue getBid() { return bid; } - public void setBid(BigDecimal bid) { + public void setBid(CurrencyValue bid) { this.bid = bid; } - public BigDecimal getAsk() { + public CurrencyValue getAsk() { return ask; } - public void setAsk(BigDecimal ask) { + public void setAsk(CurrencyValue ask) { this.ask = ask; } - public BigDecimal getHigh() { + public CurrencyValue getHigh() { return high; } - public void setHigh(BigDecimal high) { + public void setHigh(CurrencyValue high) { this.high = high; } - public BigDecimal getLow() { + public CurrencyValue getLow() { return low; } - public void setLow(BigDecimal low) { + public void setLow(CurrencyValue low) { this.low = low; } - public BigDecimal getVolume() { + public CurrencyValue getVolume() { return volume; } - public void setVolume(BigDecimal volume) { + public void setVolume(CurrencyValue volume) { this.volume = volume; } @@ -127,22 +136,18 @@ public AssetPair getAsset() { return asset; } - public BigDecimal getBidAskSpread() { + public CurrencyValue getBidAskSpread() { return bid.subtract(ask); } - public BigDecimal getMiddle() { - return bid.add(ask).divide(new BigDecimal(2.0)); + public CurrencyValue getMiddle() { + CurrencyValue middle = new CurrencyValue(bid); + + return middle.add(ask).divide(new BigDecimal(2.0)); } @Override public String toString() { - - String quote = ""; - if(asset != null) { - quote = asset.getQuote().name(); - } - - return "Ticker: " + getMiddle() + " " + quote; + return "Ticker("+asset.getBase()+"): " + getMiddle(); } } diff --git a/api/src/main/java/at/outdated/bitcoin/exchange/api/track/TickerTrackCollection.java b/api/src/main/java/at/outdated/bitcoin/exchange/api/track/TickerTrackCollection.java index 023fe50..1d7fea4 100644 --- a/api/src/main/java/at/outdated/bitcoin/exchange/api/track/TickerTrackCollection.java +++ b/api/src/main/java/at/outdated/bitcoin/exchange/api/track/TickerTrackCollection.java @@ -22,9 +22,6 @@ public TickerTrackCollection() { for(TrackInterval interval : TrackInterval.values()) { tracks.put(interval, new TickerValueTrack(interval.numSamples())); } - - latest = new TickerValue(); - latest.setTimestamp(new Date(0L)); } diff --git a/bitcurex/src/main/java/at/outdated/bitcoin/exchange/bitcurex/BitcurexApiClient.java b/bitcurex/src/main/java/at/outdated/bitcoin/exchange/bitcurex/BitcurexApiClient.java index 1b89afe..cb932c0 100644 --- a/bitcurex/src/main/java/at/outdated/bitcoin/exchange/bitcurex/BitcurexApiClient.java +++ b/bitcurex/src/main/java/at/outdated/bitcoin/exchange/bitcurex/BitcurexApiClient.java @@ -139,9 +139,7 @@ public TickerValue getTicker(AssetPair asset) { if(bTicker == null) return null; - TickerValue ticker = bTicker.getTickerValue(); - ticker.setAsset(asset); - return ticker; //To change body of implemented methods use File | Settings | File Templates. + return bTicker.getTickerValue(asset); } diff --git a/bitcurex/src/main/java/at/outdated/bitcoin/exchange/bitcurex/jaxb/BitcurexTickerValue.java b/bitcurex/src/main/java/at/outdated/bitcoin/exchange/bitcurex/jaxb/BitcurexTickerValue.java index 501cba7..580dc9b 100644 --- a/bitcurex/src/main/java/at/outdated/bitcoin/exchange/bitcurex/jaxb/BitcurexTickerValue.java +++ b/bitcurex/src/main/java/at/outdated/bitcoin/exchange/bitcurex/jaxb/BitcurexTickerValue.java @@ -1,5 +1,8 @@ package at.outdated.bitcoin.exchange.bitcurex.jaxb; +import at.outdated.bitcoin.exchange.api.currency.Currency; +import at.outdated.bitcoin.exchange.api.currency.CurrencyValue; +import at.outdated.bitcoin.exchange.api.market.AssetPair; import at.outdated.bitcoin.exchange.api.market.TickerValue; import javax.xml.bind.annotation.XmlAccessType; @@ -54,19 +57,22 @@ public class BitcurexTickerValue { long unixTime; - public TickerValue getTickerValue() { - TickerValue ticker = new TickerValue(); + public TickerValue getTickerValue(AssetPair asset) { + + Currency quote = asset.getQuote(); + + TickerValue ticker = new TickerValue(asset); ticker.setTimestamp(new Date(unixTime * 1000L)); - ticker.setLast(last); + ticker.setLast(new CurrencyValue(last, quote)); - ticker.setHigh(high); - ticker.setLow(low); + ticker.setHigh(new CurrencyValue(high, quote)); + ticker.setLow(new CurrencyValue(low, quote)); - ticker.setAsk(sell); - ticker.setBid(buy); + ticker.setAsk(new CurrencyValue(sell, quote)); + ticker.setBid(new CurrencyValue(buy, quote)); - ticker.setVolume(vol); + ticker.setVolume(new CurrencyValue(vol, asset.getBase())); return ticker; } diff --git a/bitkonan/src/main/java/at/outdated/bitcoin/exchange/bitkonan/BitkonanApiClient.java b/bitkonan/src/main/java/at/outdated/bitcoin/exchange/bitkonan/BitkonanApiClient.java index 9e87086..32dd7f6 100644 --- a/bitkonan/src/main/java/at/outdated/bitcoin/exchange/bitkonan/BitkonanApiClient.java +++ b/bitkonan/src/main/java/at/outdated/bitcoin/exchange/bitkonan/BitkonanApiClient.java @@ -133,8 +133,7 @@ public TickerValue getTicker(AssetPair asset) { TickerValue value = null; if(response != null) { - value = response.getTickerValue(); - value.setAsset(asset); + value = response.getTickerValue(asset); } return value; diff --git a/bitkonan/src/main/java/at/outdated/bitcoin/exchange/bitkonan/BitkonanTickerValue.java b/bitkonan/src/main/java/at/outdated/bitcoin/exchange/bitkonan/BitkonanTickerValue.java index a5d0fcb..1d48b1a 100644 --- a/bitkonan/src/main/java/at/outdated/bitcoin/exchange/bitkonan/BitkonanTickerValue.java +++ b/bitkonan/src/main/java/at/outdated/bitcoin/exchange/bitkonan/BitkonanTickerValue.java @@ -1,5 +1,8 @@ package at.outdated.bitcoin.exchange.bitkonan; +import at.outdated.bitcoin.exchange.api.currency.Currency; +import at.outdated.bitcoin.exchange.api.currency.CurrencyValue; +import at.outdated.bitcoin.exchange.api.market.AssetPair; import at.outdated.bitcoin.exchange.api.market.TickerValue; import javax.xml.bind.annotation.XmlAccessType; @@ -40,16 +43,19 @@ public class BitkonanTickerValue { double open; - public TickerValue getTickerValue() { + public TickerValue getTickerValue(AssetPair asset) { - TickerValue ticker = new TickerValue(); + Currency quote = asset.getQuote(); + TickerValue ticker = new TickerValue(asset); + + ticker.setLast(new CurrencyValue(last, quote)); + ticker.setBid(new CurrencyValue(bid, quote)); + ticker.setAsk(new CurrencyValue(ask, quote)); + ticker.setHigh(new CurrencyValue(high, quote)); + ticker.setLow(new CurrencyValue(low, quote)); + + ticker.setVolume(new CurrencyValue(volume, asset.getBase())); - ticker.setLast(last); - ticker.setVolume(volume); - ticker.setBid(bid); - ticker.setAsk(ask); - ticker.setHigh(high); - ticker.setLow(low); return ticker; } diff --git a/bitstamp/src/main/java/at/outdated/bitcoin/exchange/bitstamp/BitstampClient.java b/bitstamp/src/main/java/at/outdated/bitcoin/exchange/bitstamp/BitstampClient.java index 6be5da2..8866c2d 100644 --- a/bitstamp/src/main/java/at/outdated/bitcoin/exchange/bitstamp/BitstampClient.java +++ b/bitstamp/src/main/java/at/outdated/bitcoin/exchange/bitstamp/BitstampClient.java @@ -205,8 +205,7 @@ public TickerValue getTicker(AssetPair asset) { TickerValue ticker = null; if(bticker != null) { - ticker = bticker.getTickerValue(); - ticker.setAsset(asset); + ticker = bticker.getTickerValue(asset); } return ticker; diff --git a/bitstamp/src/main/java/at/outdated/bitcoin/exchange/bitstamp/BitstampTickerValue.java b/bitstamp/src/main/java/at/outdated/bitcoin/exchange/bitstamp/BitstampTickerValue.java index b69f55b..e6039a2 100644 --- a/bitstamp/src/main/java/at/outdated/bitcoin/exchange/bitstamp/BitstampTickerValue.java +++ b/bitstamp/src/main/java/at/outdated/bitcoin/exchange/bitstamp/BitstampTickerValue.java @@ -1,6 +1,9 @@ package at.outdated.bitcoin.exchange.bitstamp; +import at.outdated.bitcoin.exchange.api.currency.Currency; +import at.outdated.bitcoin.exchange.api.currency.CurrencyValue; import at.outdated.bitcoin.exchange.api.jaxb.StringBigDecimalAdapter; +import at.outdated.bitcoin.exchange.api.market.AssetPair; import at.outdated.bitcoin.exchange.api.market.TickerValue; import javax.xml.bind.annotation.XmlAccessType; @@ -46,19 +49,20 @@ public class BitstampTickerValue { Date timeStamp = new Date(); - public TickerValue getTickerValue() { + public TickerValue getTickerValue(AssetPair asset) { - TickerValue ticker = new TickerValue(); + Currency quote = asset.getQuote(); + TickerValue ticker = new TickerValue(asset); ticker.setTimestamp(timeStamp); - ticker.setLast(last); - ticker.setHigh(high); - ticker.setLow(low); + ticker.setLast(new CurrencyValue(last, quote)); + ticker.setHigh(new CurrencyValue(high, quote)); + ticker.setLow(new CurrencyValue(low, quote)); - ticker.setAsk(ask); - ticker.setBid(bid); + ticker.setAsk(new CurrencyValue(ask, quote)); + ticker.setBid(new CurrencyValue(bid, quote)); - ticker.setVolume(volume); + ticker.setVolume(new CurrencyValue(volume, asset.getBase())); return ticker; } diff --git a/btc-e/src/main/java/at/outdated/bitcoin/exchange/btce/BtcEApiClient.java b/btc-e/src/main/java/at/outdated/bitcoin/exchange/btce/BtcEApiClient.java index e877c68..ee4e40a 100644 --- a/btc-e/src/main/java/at/outdated/bitcoin/exchange/btce/BtcEApiClient.java +++ b/btc-e/src/main/java/at/outdated/bitcoin/exchange/btce/BtcEApiClient.java @@ -248,8 +248,8 @@ public TickerValue getTicker(AssetPair asset) { BtcETickerValue btcETickerValue = response.getTicker(); - TickerValue value = btcETickerValue.getTickerValue(); - value.setAsset(asset); + TickerValue value = btcETickerValue.getTickerValue(asset); + return value; } diff --git a/btc-e/src/main/java/at/outdated/bitcoin/exchange/btce/BtcETickerValue.java b/btc-e/src/main/java/at/outdated/bitcoin/exchange/btce/BtcETickerValue.java index f75dded..f87e02f 100644 --- a/btc-e/src/main/java/at/outdated/bitcoin/exchange/btce/BtcETickerValue.java +++ b/btc-e/src/main/java/at/outdated/bitcoin/exchange/btce/BtcETickerValue.java @@ -1,5 +1,8 @@ package at.outdated.bitcoin.exchange.btce; +import at.outdated.bitcoin.exchange.api.currency.Currency; +import at.outdated.bitcoin.exchange.api.currency.CurrencyValue; +import at.outdated.bitcoin.exchange.api.market.AssetPair; import at.outdated.bitcoin.exchange.api.market.TickerValue; import javax.xml.bind.annotation.XmlAccessType; @@ -60,19 +63,21 @@ public class BtcETickerValue { @XmlElement protected long updated; - public TickerValue getTickerValue() { + public TickerValue getTickerValue(AssetPair asset) { - TickerValue ticker = new TickerValue(); + Currency quote = asset.getQuote(); + + TickerValue ticker = new TickerValue(asset); ticker.setTimestamp(new Date(updated*1000)); - ticker.setLast(last); - ticker.setVolume(vol_cur); - ticker.setBid(sell); - ticker.setAsk(buy); - ticker.setHigh(high); - ticker.setLow(low); + ticker.setLast(new CurrencyValue(last, quote)); + ticker.setBid(new CurrencyValue(sell, quote)); + ticker.setAsk(new CurrencyValue(buy, quote)); + ticker.setHigh(new CurrencyValue(high, quote)); + ticker.setLow(new CurrencyValue(low, quote)); + ticker.setVolume(new CurrencyValue(vol_cur, asset.getBase())); return ticker; } diff --git a/bter/src/main/java/at/outdated/bitcoin/exchange/bter/BterApiClient.java b/bter/src/main/java/at/outdated/bitcoin/exchange/bter/BterApiClient.java index e454a15..7c1341b 100644 --- a/bter/src/main/java/at/outdated/bitcoin/exchange/bter/BterApiClient.java +++ b/bter/src/main/java/at/outdated/bitcoin/exchange/bter/BterApiClient.java @@ -95,11 +95,7 @@ public TickerValue getTicker(AssetPair asset) { BterTicker ticker = simpleGetRequest(tickerTgt, BterTicker.class); - TickerValue tickerValue = ticker.getValue(); - - tickerValue.setAsset(asset); - - return tickerValue; + return ticker.getValue(asset); } @Override diff --git a/bter/src/main/java/at/outdated/bitcoin/exchange/bter/BterTicker.java b/bter/src/main/java/at/outdated/bitcoin/exchange/bter/BterTicker.java index d4d941e..eaaf613 100644 --- a/bter/src/main/java/at/outdated/bitcoin/exchange/bter/BterTicker.java +++ b/bter/src/main/java/at/outdated/bitcoin/exchange/bter/BterTicker.java @@ -1,5 +1,8 @@ package at.outdated.bitcoin.exchange.bter; +import at.outdated.bitcoin.exchange.api.currency.Currency; +import at.outdated.bitcoin.exchange.api.currency.CurrencyValue; +import at.outdated.bitcoin.exchange.api.market.AssetPair; import at.outdated.bitcoin.exchange.api.market.TickerValue; import javax.xml.bind.annotation.XmlAccessType; @@ -42,14 +45,18 @@ public class BterTicker { @XmlElement(name="vol_btc") BigDecimal volume; - public TickerValue getValue() { + public TickerValue getValue(AssetPair asset) { - TickerValue val = new TickerValue(); + Currency quote = asset.getQuote(); + TickerValue val = new TickerValue(asset); + + val.setAsk(new CurrencyValue(ask, quote)); + val.setBid(new CurrencyValue(bid, quote)); + + val.setLast(new CurrencyValue(last, quote)); + + val.setVolume(new CurrencyValue(volume, asset.getBase())); - val.setAsk(ask); - val.setBid(bid); - val.setVolume(volume); - val.setLast(last); return val; } diff --git a/coins-e/src/main/java/at/outdated/bitcoin/exchange/coinse/CoinseApiClient.java b/coins-e/src/main/java/at/outdated/bitcoin/exchange/coinse/CoinseApiClient.java index 2d16a4d..4375f35 100644 --- a/coins-e/src/main/java/at/outdated/bitcoin/exchange/coinse/CoinseApiClient.java +++ b/coins-e/src/main/java/at/outdated/bitcoin/exchange/coinse/CoinseApiClient.java @@ -93,16 +93,16 @@ public TickerValue getTicker(AssetPair asset) { JsonObject marketStat = jsonMarket.getJsonObject("marketstat"); JsonObject stat24 = marketStat.getJsonObject("24h"); - TickerValue ticker = new TickerValue(); + TickerValue ticker = new TickerValue(asset); - ticker.setAsset(asset); - ticker.setLast(new BigDecimal(marketStat.getString("ltp"))); - ticker.setAsk(new BigDecimal(marketStat.getString("ask"))); - ticker.setBid(new BigDecimal(marketStat.getString("bid"))); + Currency quote = asset.getQuote(); + ticker.setLast(new CurrencyValue(marketStat.getString("ltp"), quote)); + ticker.setAsk(new CurrencyValue(marketStat.getString("ask"), quote)); + ticker.setBid(new CurrencyValue(marketStat.getString("bid"), quote)); - ticker.setHigh(new BigDecimal(stat24.getString("h"))); - ticker.setLow(new BigDecimal(stat24.getString("l"))); - ticker.setVolume(new BigDecimal(stat24.getString("volume"))); + ticker.setHigh(new CurrencyValue(stat24.getString("h"), quote)); + ticker.setLow(new CurrencyValue(stat24.getString("l"), quote)); + ticker.setVolume(new CurrencyValue(stat24.getString("volume"), asset.getBase())); return ticker; } diff --git a/cryptsy/src/main/java/at/outdated/bitcoin/exchange/cryptsy/CryptsyApiClient.java b/cryptsy/src/main/java/at/outdated/bitcoin/exchange/cryptsy/CryptsyApiClient.java index 67ea48a..703f1b0 100644 --- a/cryptsy/src/main/java/at/outdated/bitcoin/exchange/cryptsy/CryptsyApiClient.java +++ b/cryptsy/src/main/java/at/outdated/bitcoin/exchange/cryptsy/CryptsyApiClient.java @@ -113,12 +113,15 @@ public TickerValue getTicker(AssetPair asset) { JsonArray jsonSells = jsonMarket.getJsonArray("sellorders"); JsonArray jsonBuys = jsonMarket.getJsonArray("buyorders"); - BigDecimal bid = new BigDecimal(jsonBuys.getJsonObject(0).getString("price")); - BigDecimal ask = new BigDecimal(jsonSells.getJsonObject(0).getString("price")); + Currency quote = asset.getQuote(); - BigDecimal last = new BigDecimal(jsonMarket.getString("lasttradeprice")); - BigDecimal volume = new BigDecimal(jsonMarket.getString("volume")); + CurrencyValue bid = new CurrencyValue(jsonBuys.getJsonObject(0).getString("price"), quote); + CurrencyValue ask = new CurrencyValue(jsonSells.getJsonObject(0).getString("price"), quote); + + + CurrencyValue last = new CurrencyValue(jsonMarket.getString("lasttradeprice"), quote); + CurrencyValue volume = new CurrencyValue(jsonMarket.getString("volume"), asset.getBase()); ticker = new TickerValue(asset); ticker.setLast(last); diff --git a/kraken/src/main/java/at/outdated/bitcoin/exchange/kraken/KrakenClient.java b/kraken/src/main/java/at/outdated/bitcoin/exchange/kraken/KrakenClient.java index e8fd107..b1e93b7 100644 --- a/kraken/src/main/java/at/outdated/bitcoin/exchange/kraken/KrakenClient.java +++ b/kraken/src/main/java/at/outdated/bitcoin/exchange/kraken/KrakenClient.java @@ -136,17 +136,19 @@ public TickerValue getTicker(AssetPair asset) { JsonObject resultData = jsonTicker.getJsonObject("result").getJsonObject(pairString(asset)); - TickerValue value = new TickerValue(); - value.setAsset(asset); - value.setLast(new BigDecimal(resultData.getJsonArray("c").getString(0))); + TickerValue value = new TickerValue(asset); - value.setVolume(new BigDecimal(resultData.getJsonArray("v").getString(0))); + Currency quote = asset.getQuote(); + + value.setLast(new CurrencyValue(resultData.getJsonArray("c").getString(0), quote)); + + value.setVolume(new CurrencyValue(resultData.getJsonArray("v").getString(0), asset.getBase())); - value.setAsk(new BigDecimal(resultData.getJsonArray("a").getString(0))); - value.setBid(new BigDecimal(resultData.getJsonArray("b").getString(0))); + value.setAsk(new CurrencyValue(resultData.getJsonArray("a").getString(0), quote)); + value.setBid(new CurrencyValue(resultData.getJsonArray("b").getString(0), quote)); - value.setHigh(new BigDecimal(resultData.getJsonArray("h").getString(0))); - value.setLow(new BigDecimal(resultData.getJsonArray("l").getString(0))); + value.setHigh(new CurrencyValue(resultData.getJsonArray("h").getString(0), quote)); + value.setLow(new CurrencyValue(resultData.getJsonArray("l").getString(0), quote)); return value; } diff --git a/kraken/src/main/java/at/outdated/bitcoin/exchange/kraken/jaxb/KrakenTickerValue.java b/kraken/src/main/java/at/outdated/bitcoin/exchange/kraken/jaxb/KrakenTickerValue.java index 838604f..23206a7 100644 --- a/kraken/src/main/java/at/outdated/bitcoin/exchange/kraken/jaxb/KrakenTickerValue.java +++ b/kraken/src/main/java/at/outdated/bitcoin/exchange/kraken/jaxb/KrakenTickerValue.java @@ -1,5 +1,8 @@ package at.outdated.bitcoin.exchange.kraken.jaxb; +import at.outdated.bitcoin.exchange.api.currency.Currency; +import at.outdated.bitcoin.exchange.api.currency.CurrencyValue; +import at.outdated.bitcoin.exchange.api.market.AssetPair; import at.outdated.bitcoin.exchange.api.market.TickerValue; import javax.xml.bind.annotation.XmlAccessType; @@ -84,18 +87,21 @@ public void setO(String o) { this.o = o; } - public TickerValue getValue() { - TickerValue value = new TickerValue(); + public TickerValue getValue(AssetPair asset) { - value.setLast(new BigDecimal(l[0])); + Currency quote = asset.getQuote(); - value.setAsk(new BigDecimal(a[0])); - value.setBid(new BigDecimal(b[0])); + TickerValue value = new TickerValue(asset); - value.setVolume(new BigDecimal(v[0])); + value.setLast(new CurrencyValue(l[0], quote)); - value.setHigh(new BigDecimal(h[0])); - value.setLow(new BigDecimal(l[0])); + value.setAsk(new CurrencyValue(a[0], quote)); + value.setBid(new CurrencyValue(b[0], quote)); + + value.setVolume(new CurrencyValue(v[0], asset.getBase())); + + value.setHigh(new CurrencyValue(h[0], quote)); + value.setLow(new CurrencyValue(l[0], quote)); return value; } diff --git a/mtgox/src/main/java/at/outdated/bitcoin/exchange/mtgox/TickerResponse.java b/mtgox/src/main/java/at/outdated/bitcoin/exchange/mtgox/TickerResponse.java index 93f9be2..86e6324 100644 --- a/mtgox/src/main/java/at/outdated/bitcoin/exchange/mtgox/TickerResponse.java +++ b/mtgox/src/main/java/at/outdated/bitcoin/exchange/mtgox/TickerResponse.java @@ -143,21 +143,19 @@ public double[] getValueArray() { } public TickerValue getTickerValue() { - TickerValue value = new TickerValue(); + TickerValue value = new TickerValue(new AssetPair(item, inCurrency)); value.setTimestamp(getTimestamp()); - value.setLast(getLast().getValue()); + value.setLast(getLast()); - value.setAsk(getSell().getValue()); - value.setBid(getBuy().getValue()); + value.setAsk(getSell()); + value.setBid(getBuy()); - value.setLow(getLow().getValue()); - value.setHigh(getHigh().getValue()); + value.setLow(getLow()); + value.setHigh(getHigh()); - value.setVolume(getVol().getValue()); - - value.setAsset(new AssetPair(item, inCurrency)); + value.setVolume(getVol()); return value; } diff --git a/tests/src/test/java/at/outdated/bitcoin/exchange/MarketTest.java b/tests/src/test/java/at/outdated/bitcoin/exchange/MarketTest.java index a280508..143c99c 100644 --- a/tests/src/test/java/at/outdated/bitcoin/exchange/MarketTest.java +++ b/tests/src/test/java/at/outdated/bitcoin/exchange/MarketTest.java @@ -1,6 +1,7 @@ package at.outdated.bitcoin.exchange; import at.outdated.bitcoin.exchange.api.client.ExchangeClient; +import at.outdated.bitcoin.exchange.api.currency.Currency; import at.outdated.bitcoin.exchange.api.currency.CurrencyValue; import at.outdated.bitcoin.exchange.api.market.*; import org.junit.Assert; @@ -131,6 +132,19 @@ protected void assertTicker(TickerValue ticker) { notNull("invalid ticker timestamp", ticker.getTimestamp()); notNull(ticker.getAsset()); + AssetPair asset = ticker.getAsset(); + Currency base = asset.getBase(); + Currency quote = asset.getQuote(); + + Assert.assertEquals("last currency mismatch", quote, ticker.getLast().getCurrency()); + + Assert.assertEquals("ask currency mismatch", quote, ticker.getAsk().getCurrency()); + Assert.assertEquals("bid currency mismatch", quote, ticker.getBid().getCurrency()); + Assert.assertEquals("high currency mismatch", quote, ticker.getHigh().getCurrency()); + Assert.assertEquals("low currency mismatch", quote, ticker.getLow().getCurrency()); + + Assert.assertEquals("volume currency mismatch", base, ticker.getVolume().getCurrency()); + Assert.assertNotEquals(ticker.getBid().doubleValue(), 0.0, Double.MIN_NORMAL); Assert.assertNotEquals(ticker.getBid().doubleValue(), Double.NaN, 0.0); diff --git a/vircurex/src/main/java/at/outdated/bitcoin/exchange/vircurex/VircurexTicker.java b/vircurex/src/main/java/at/outdated/bitcoin/exchange/vircurex/VircurexTicker.java index bda05d5..976d054 100644 --- a/vircurex/src/main/java/at/outdated/bitcoin/exchange/vircurex/VircurexTicker.java +++ b/vircurex/src/main/java/at/outdated/bitcoin/exchange/vircurex/VircurexTicker.java @@ -1,6 +1,7 @@ package at.outdated.bitcoin.exchange.vircurex; import at.outdated.bitcoin.exchange.api.currency.Currency; +import at.outdated.bitcoin.exchange.api.currency.CurrencyValue; import at.outdated.bitcoin.exchange.api.market.AssetPair; import at.outdated.bitcoin.exchange.api.market.TickerValue; @@ -22,8 +23,8 @@ public class VircurexTicker { @XmlElement Currency base; - @XmlElement - Currency alt; + @XmlElement(name="alt") + Currency quote; @XmlElement(name="lowest_ask") BigDecimal ask; @@ -32,9 +33,6 @@ public class VircurexTicker { BigDecimal bid; @XmlElement(name="last_trade") - double low; - - @XmlElement BigDecimal last; @XmlElement @@ -42,14 +40,17 @@ public class VircurexTicker { public TickerValue getValue() { - TickerValue val = new TickerValue(); + AssetPair asset = new AssetPair(base, quote); + + TickerValue val = new TickerValue(asset); + + val.setLast(new CurrencyValue(last, quote)); + + val.setAsk(new CurrencyValue(ask, quote)); + val.setBid(new CurrencyValue(bid, quote)); - val.setAsk(ask); - val.setBid(bid); - val.setVolume(volume); - val.setLast(last); + val.setVolume(new CurrencyValue(volume, base)); - val.setAsset(new AssetPair(base, alt)); return val; }