【问题标题】:python search index of index for highest valuepython搜索索引的最高值
【发布时间】:2020-09-07 07:09:12
【问题描述】:

我正在尝试从币安的每日克线数据中找到最高的每日高点。我可以使用此代码 API 调用列表列表。

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

输出是 'open' 'high' 'low' 'close' 'volume' 格式的每日历史价格列表。

[[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']]

我想在此列表中找到最高的“高”值。我目前可以使用此代码引用单个每日“高”值:

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

输出:

0.00000192

感谢您的建议!

【问题讨论】:

  • 您的问题是从数据的某一列中找出最高值吗? (例如数组的最高第二个索引),在这种情况下,您可以简单地将这些数组压缩在一起并找到最高的,转换成一个 numpy 数组(它可以让您执行按列的函数)或为此目的编写一个指定的函数(就运行时间和工作时间而言,可能是最慢的解决方案)

标签: python python-3.x list indexing binance


【解决方案1】:

假设您将上述数据保存在名为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']]

如果你想要values的每个子列表中第三个元素的最大值(转换为float,因为你不想做字符串比较),你可以这样做例如:

>>> max(float(lst[2]) for lst in values)
1.92e-06

【讨论】:

    【解决方案2】:

    我想在这个列表中找到最高的“高”值。

    你展示的例子不是一个列表,它是一个列表的列表:

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

    一般来说,“最高”值就是最大值。因此,在此类列表中查找最大值的代码将是:

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

    但有一点很奇怪:API 的返回数据。 您收到的不是数值列表,而是混合类型数据的记录。幸运的是,binance 的文档提供了您正在寻找的值的信息:它似乎是第三个。 (参见:https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#klinecandlestick-data)我不清楚为什么这个值作为字符串返回。

    因此您的代码将是:

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

    一个小细节:下次您提出问题时,请提供您正在使用的模块的信息。在其他情况下,这条信息可能非常重要! (幸运的是它不是。)

    请记住,我无法测试上面的代码,因为很遗憾您没有提供我可以构建的工作示例。因此请自行测试。如果您遇到任何错误,请随时在我的回答中添加评论,如果有任何问题,我会尝试解决任何进一步的问题。

    【讨论】:

      猜你喜欢
      • 2011-09-01
      • 2018-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 2014-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多