1

我正在使用 Pyalgotrade(通常与 ta-lib 指标结合使用),但我缺少一个在数据系列中查找局部最大值和最小值的函数。

我知道 min 和 max 函数,但这不是我想要的。例如。MIN(low, count=5) 会给我 5 个柱中的最低值,但这看起来并不超出 5 个值。我正在寻找一个函数,该函数在一定时期内返回“局部低点”的值,即该值低于该天前后两天的值。

例子

Series [2,3,2,1,3,4,5,6,6]

MIN(5) -> returns 3, but the lowest value is on the left border of the observed window
          and the day before, the value was even lower!

whatiamlookingfor() -> should return 1, 
                       because it is the last local low over a +/-2 days period

我希望我的意思很清楚。是否有任何我可能忽略的功能。

编辑

为了在数据系列中找到一个低点,我想出了这样的东西......

def min_peak(series, interval):
    reference = -1
    left = reference - interval
    while -reference < len(series):
        if min(series[left:]) == min(series[reference:]):
            return min(series[left:])
        reference -= 1
        left -= 1

...但我对这个解决方案不太满意,因为我认为向后解析系列不是很有效。我认为本机运行的内置内容可能会更快。

亲切的问候,

啤酒

4

3 回答 3

1

PyAlgoTrade 有一种方法可以帮助您调用 ta-lib,bar_ds_close_to_numpy或者更一般地说value_ds_to_numpy ,其中 count 是您正在回顾的柱数。将您的 Dataseries 转换为 numpy 数组并简单地使用minandmax函数

from pyalgotrade.talibext.indicator import bar_ds_close_to_numpy

prices_close = bar_ds_close_to_numpy(resampled_bars, count)
highest_price = np.max(prices_close)
lowest_price = np.min(prices_close)
于 2019-07-02T01:14:32.520 回答
0

我正在寻找类似的东西,但一个简单的解决方案是按数字升序排列数据数组。

然后将数组中的第一项作为 MIN,将数组中的最后一项作为 MAX 值。

我不确定这是否是最好的方法,但它似乎在逻辑上是正确的。

我面临的问题是如何知道每次需要测量峰值和楼层以匹配图表。然而,这可能是一种准确的方法。

于 2021-10-26T04:21:19.903 回答
0

我想在这里帮助你感觉到我们有共同的兴趣(algotrading),虽然我坐在 node.js 中并且我不熟悉 python,虽然我有一些经验......

...无论如何,解决方案很简单,只需对数组进行切片。
...感觉这很容易,我可能误解了这个问题。如果是这样,请发表评论,我看看我是否可以更新我的答案来帮助你。


编辑


MIN/MAX 需要一些参数:

  • inReal : 数据数组
  • startIdx :从哪里开始查找
  • endIdx :停止查找的位置
  • optInTimePeriod :不确定它在这种情况下的作用:/

Idk 如果这些暴露给你..?但听起来这是你应该解决你想做的事情的地方..

于 2017-05-09T11:06:30.210 回答