Python Pyalgotrade在Dataseries中找到最近的峰值(最小值或最大值)

时间:2017-05-08 19:09:19

标签: python ta-lib pyalgotrade

我正在使用Pyalgotrade(通常与ta-lib指标结合使用),但我错过了在数据系列中找到局部最大值和最小值的功能。

我知道最小和最大功能,但这不是我想要的。 E. g。 MIN(低,计数= 5)会给我5个柱中的最低值,但这并不会超出5个值。我正在寻找一个函数,在一定时期内返回“本地低”的值,i。即那天之前和之后两天的价值都低了。

实施例

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

...但我对这个解决方案不是很满意,因为我觉得向后解析这个系列并不是很有效。我假设内置的内置运行可能会更快。

亲切的问候,

啤酒

2 个答案:

答案 0 :(得分:0)

我喜欢在这里帮助你感觉我们分享兴趣(algotrading),虽然我坐在node.js并且我不熟悉python,虽然我有一些经验...

...无论如何,解决方案非常简单,只需切片即可 ......感觉它很容易,我可能会误解这个问题。如果是这样,请发表评论,我看看是否可以更新我的答案以帮助您。

修改

MIN / MAX采用一些参数:

  • inReal :数据数组
  • startIdx :从哪里开始查看
  • endIdx :停止寻找的位置
  • optInTimePeriod :不确定它在此上下文中的作用:/

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

答案 1 :(得分:0)

PyAlgoTrade提供了一种可以帮助您找到称为bar_ds_close_to_numpy或更普遍的value_ds_to_numpy的ta-lib的方法,其中count是您要回溯的柱线数。将您的数据系列转换为numpy数组,只需使用minmax函数

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)