0

I am trying to find the highest daily high within daily kline data from binance. I am able to API call the list of lists with this code.

client.get_historical_klines('maticbtc', Client.KLINE_INTERVAL_1DAY, "2 days ago UTC")

The output is a list of daily historical prices in 'open' 'high' 'low' 'close' 'volume' format.

[[1599264000000,
  '0.00000185',
  '0.00000192',
  '0.00000171',
  '0.00000177',
  '208963036.00000000',
  1599350399999,
  '377.04825679',
  14595,
  '82785887.00000000',
  '150.17277108',
  '0'],
 [1599350400000,
  '0.00000177',
  '0.00000185',
  '0.00000170',
  '0.00000182',
  '114643846.00000000',
  1599436799999,
  '204.99814224',
  9620,
  '55503278.00000000',
  '99.62131279',
  '0']]

I would like to find the highest 'high' value in this list. I am currently able to reference a single daily 'high' value using this code:

client.get_historical_klines('maticbtc', Client.KLINE_INTERVAL_1DAY, "30 days ago UTC")[0][2]

output:

0.00000192

Thank you for your suggestions!

Mitch
  • 11
  • 2
  • Is your problem finding the highest value out of a certain column in the data? (e.g highest 2nd index of an array), in that case you can simply zip those arrays together and find the highest, transform into a numpy array (which let you perform column-wise functions) or just write a designated funtion for this purpose (would probably be the slowest solution in terms of run-time and work time) – Rotem Tal Sep 07 '20 at 07:19

2 Answers2

1

I would like to find the highest 'high' value in this list.

The example you present is not a list, it is a list of lists:

data30days = [
    [ ... ],
    [ ... ],
    ...
]

In general the "highest" value is nothing else than the maximum. Therefore the code finding the maximums in such a list of lists would be:

maxima30days = [ max(x) for x in data30days ]
totalMaximum = max(maxima30days)

But there is one thing that is odd: The return data of your API. You do not receive a list of numeric values but a record of data of mixed type. Luckily the documentation of binance provides the information which value is the value you are looking for: It seems to be the third. (See: https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#klinecandlestick-data) Why this value is returned as string is unclear to me.

Therefore your code would be:

maxima30days = [ float(x[2]) for x in data30days ]
totalMaximum = max(maxima30days)

One little detail: The next time you ask a question please provide information which module you're using. In other situations this piece of information might be very essential! (Luckily here it is not.)

Please have in mind that I am not able to test the code above as unfortunately you did not provide a working example I could build upon. Therefore please test it yourself. Feel free to add a comment to my answer if you encounter any errors, I'll then try to resolve any further issues if there are any.

Regis May
  • 3,070
  • 2
  • 30
  • 51
0

Assuming that you have your data as above in a variable called values,

>>> values
[[1599264000000, '0.00000185', '0.00000192', '0.00000171', '0.00000177', '208963036.00000000', 1599350399999, '377.04825679', 14595, '82785887.00000000', '150.17277108', '0'], [1599350400000, '0.00000177', '0.00000185', '0.00000170', '0.00000182', '114643846.00000000', 1599436799999, '204.99814224', 9620, '55503278.00000000', '99.62131279', '0']]

if you want the maximum value of the third element in each sublist of values (converted to float because you don't want to do a string comparison), you can do for example:

>>> max(float(lst[2]) for lst in values)
1.92e-06
alani
  • 12,573
  • 2
  • 13
  • 23