MCPcopy Index your code
hub / github.com/ccxt/ccxt / buildOHLCVC

Method buildOHLCVC

java/lib/src/main/java/io/github/ccxt/Exchange.java:8749–8805  ·  view source on GitHub ↗
(Object trades, Object... optionalArgs)

Source from the content-addressed store, hash-verified

8747 }
8748
8749 public Object buildOHLCVC(Object trades, Object... optionalArgs)
8750 {
8751 // given a sorted arrays of trades (recent last) and a timeframe builds an array of OHLCV candles
8752 // note, default limit value (2147483647) is max int32 value
8753 Object timeframe = Helpers.getArg(optionalArgs, 0, "1m");
8754 Object since = Helpers.getArg(optionalArgs, 1, 0);
8755 Object limit = Helpers.getArg(optionalArgs, 2, 2147483647);
8756 Object ms = Helpers.multiply(this.parseTimeframe(timeframe), 1000);
8757 Object ohlcvs = new java.util.ArrayList<Object>(java.util.Arrays.asList());
8758 Object i_timestamp = 0;
8759 // const open = 1;
8760 Object i_high = 2;
8761 Object i_low = 3;
8762 Object i_close = 4;
8763 Object i_volume = 5;
8764 Object i_count = 6;
8765 Object tradesLength = Helpers.getArrayLength(trades);
8766 Object oldest = Helpers.mathMin(tradesLength, limit);
8767 Object options = this.safeDict(this.options, "buildOHLCVC", new java.util.HashMap<String, Object>() {{}});
8768 Object skipZeroPrices = this.safeBool(options, "skipZeroPrices", true);
8769 for (var i = 0; Helpers.isLessThan(i, oldest); i++)
8770 {
8771 Object trade = Helpers.GetValue(trades, i);
8772 Object ts = Helpers.GetValue(trade, "timestamp");
8773 Object price = Helpers.GetValue(trade, "price");
8774 if (Helpers.isTrue(Helpers.isLessThan(ts, since)))
8775 {
8776 continue;
8777 }
8778 Object openingTime = Helpers.multiply((Math.floor(Double.parseDouble(Helpers.toString(Helpers.divide(ts, ms))))), ms); // shift to the edge of m/h/d (but not M)
8779 if (Helpers.isTrue(Helpers.isLessThan(openingTime, since)))
8780 {
8781 continue;
8782 }
8783 Object ohlcv_length = Helpers.getArrayLength(ohlcvs);
8784 Object candle = Helpers.subtract(ohlcv_length, 1);
8785 if (Helpers.isTrue(Helpers.isTrue(Helpers.isTrue(skipZeroPrices) && !Helpers.isTrue((Helpers.isGreaterThan(price, 0)))) && !Helpers.isTrue((Helpers.isLessThan(price, 0)))))
8786 {
8787 continue;
8788 }
8789 Object isFirstCandle = Helpers.isEqual(candle, Helpers.opNeg(1));
8790 if (Helpers.isTrue(Helpers.isTrue(isFirstCandle) || Helpers.isTrue(Helpers.isGreaterThanOrEqual(openingTime, this.sum(Helpers.GetValue(Helpers.GetValue(ohlcvs, candle), i_timestamp), ms)))))
8791 {
8792 // moved to a new timeframe -> create a new candle from opening trade
8793 ((java.util.List<Object>)ohlcvs).add(new java.util.ArrayList<Object>(java.util.Arrays.asList(openingTime, price, price, price, price, Helpers.GetValue(trade, "amount"), 1)));
8794 } else
8795 {
8796 // still processing the same timeframe -> update opening trade
8797 Helpers.addElementToObject(Helpers.GetValue(ohlcvs, candle), i_high, Helpers.mathMax(Helpers.GetValue(Helpers.GetValue(ohlcvs, candle), i_high), price));
8798 Helpers.addElementToObject(Helpers.GetValue(ohlcvs, candle), i_low, Helpers.mathMin(Helpers.GetValue(Helpers.GetValue(ohlcvs, candle), i_low), price));
8799 Helpers.addElementToObject(Helpers.GetValue(ohlcvs, candle), i_close, price);
8800 Helpers.addElementToObject(Helpers.GetValue(ohlcvs, candle), i_volume, this.sum(Helpers.GetValue(Helpers.GetValue(ohlcvs, candle), i_volume), Helpers.GetValue(trade, "amount")));
8801 Helpers.addElementToObject(Helpers.GetValue(ohlcvs, candle), i_count, this.sum(Helpers.GetValue(Helpers.GetValue(ohlcvs, candle), i_count), 1));
8802 }
8803 }
8804 return ohlcvs;
8805 }
8806

Callers

nothing calls this directly

Calls 15

getArgMethod · 0.95
multiplyMethod · 0.95
parseTimeframeMethod · 0.95
getArrayLengthMethod · 0.95
mathMinMethod · 0.95
safeDictMethod · 0.95
safeBoolMethod · 0.95
isLessThanMethod · 0.95
GetValueMethod · 0.95
isTrueMethod · 0.95
toStringMethod · 0.95
divideMethod · 0.95

Tested by

no test coverage detected