(Object trades, Object... optionalArgs)
| 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 |
nothing calls this directly
no test coverage detected