【问题标题】:Find entry exit signal from time series data从时间序列数据中查找进出信号
【发布时间】:2021-07-24 07:46:30
【问题描述】:

我有一个小的时间序列数据:

ser = pd.Series([2,3,4,5,6,0,8,7,1,3,4,0,6,4,0,2,4,0,4,5,0,1,7,0,1,8,5,3,6])

假设我们选择阈值 5 进入市场,选择阈值 0 退出

我正在尝试编写一个程序来生成这样的输出:

到目前为止,我已经使用了 numba,但仍在研究逻辑,请您帮忙。

@numba.vectorize 
def check_signal(x,t):
    if x >= t :
        y = 2
    if x < t :
        y =1 
    if x == 0:
        y = -1
    else :
        y = y
    return y 

【问题讨论】:

    标签: python python-3.x time-series


    【解决方案1】:

    除非您拥有数千万个这样的样本,否则为什么要使用 numba?

    states = ["Entered market", "inside market", "market exit", "outside market"]
    state = 2
    fout = open('seriesdata.csv','w')
    print("Time,Percent_change,Signal,Timestamp", file=fout)
    for pct in ser:
        stamp = ''
        if state == 1 and pct == 0:
            state = 2
            stamp = str(len(data)+1)
        elif state == 3 and pct >= 5:
            state = 0
            stamp = str(len(data)+1)
        else if state in (0, 2):
            state += 1
        print(''.join((str(pct), states[state], stamp)), file=fout)
    

    如果您想制作一个数据框,只需将这些值累积到一个列表中并在之后进行转换。

    【讨论】:

    • 感谢 Tim 的快速回复,实际上我有 2400 万行的 Dataframe,所以我试图用 numba 解决它。
    • 那这有什么意义呢?您不可能使用 2400 万行的人类可读数据。
    • 通过时间序列上的这些标记,我想确定值超过阈值的次数,即我们可以进入市场,一旦进入我想一直保持直到遇到零,一旦出现零遇到它应该被记录为退出点,然后直到百分比变化保持在阈值以下,我们仍然在市场之外,并且当它超过阈值时,它被记录为进入市场。最后,我希望能够计算这些事件发生的频率以及它们在不同阈值下的持续时间。
    • 因此,对于包含 2400 万行的时间序列,我可以以数据框的形式汇总这些市场进入退出周期,以获取不同百分比变化阈值。
    • 以及这些事件在持续时间方面的分布情况
    猜你喜欢
    • 2019-08-31
    • 2017-04-22
    • 1970-01-01
    • 2019-10-29
    • 2016-07-05
    • 2020-09-18
    • 1970-01-01
    • 2013-10-18
    • 2019-10-21
    相关资源
    最近更新 更多