【问题标题】:Can I find price floors and ceilings with cuda我可以用 cuda 找到价格地板和天花板吗
【发布时间】:2019-12-10 12:02:54
【问题描述】:

背景

我正在尝试将算法从顺序转换为并行,但我卡住了。

点数图

我正在创建点数图。

减少
在股票下跌时,每次突破地板时添加一个O。

增加
在股票上涨时,每次突破天花板时加一个X。

反转
如果股票反转方向,但变化小于反转阈值(3 个单位),则什么也不做。如果变化大于反转阈值,则开始新列(X 或 O)

顺序与并行

因此,这非常简单。我为地板和天花板保留了一个变量。如果当前价格突破了下限或上限,或者变化超过了反转阈值,我可以采取适当的行动。

我的问题是,有没有办法同时找到这些反转点?我对并行思考还很陌生,所以如果这是微不足道的,我很抱歉。我试图在 CUDA 中做到这一点,但我已经被困了好几个星期。我曾尝试使用 NVidia 的 finite difference 算法。这些会产生局部最大值/最小值,但不会产生反转点。微小的波动会产生大量的相对最大/最小,但大多数都是微不足道的,因为变化不大于反转大小。

【问题讨论】:

    标签: cuda thrust


    【解决方案1】:

    我的问题是,有没有办法同时找到这些反转点?

    一种可能的方法:

    1. 使用推力::unique 删除价格数值恒定的时段
    2. 使用thrust::adjacent_difference 生成一阶差分数据
    3. 对第一个差分数据使用推力::adjacent_difference 以获取第二个差分数据,即斜率符号发生变化的点。
    4. 使用这些斜率符号的变化点来识别不同的数据区域 - 从中​​构建一个关键向量(例如,使用前缀总和)。这个关键向量将价格数据分割成价格变化在特定方向的“运行”。
    5. 对第一个差分数据使用thrust::exclusive_scan_by_key,产生运行的净变化
    6. 只要运行的净变化超过阈值,就标记为“反转”

    您对什么构成逆转的描述也可能有点不清楚。上述方法不会标记您可能归类为反转的某些数据模式的反转。我怀疑您正在超越我在此处定义的单次运行。如果是这种情况,可能还有一种方法可以解决这个问题 - 需要更多步骤。

    【讨论】:

    • 你是对的,我正在寻找比此处定义的单个“运行”更长的长度。因此,如果价格下降 2,增加 1,然后再下降 2 .. 它应该算作总共减少 3。一只股票应该会下跌,直到它比最近的最低价上涨至少 3 美元。进一步减少会使地板向下移动。谢谢你的回答,真的很有帮助。希望我澄清了我所说的逆转的意思。否则this 视频可能会更好地解释它。
    • 如果我的回答不符合您的需求,则无需接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多