我可以用 cuda 找到价格下限和上限吗

Can I find price floors and ceilings with cuda

背景

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

点数图

我正在创建点数图。

减少
在股票下跌的过程中,每次突破底线时加一个O。

增加
在股票上涨的过程中,每突破天花板就加一个X。

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

顺序与并行

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

我的问题是,有没有办法并行找到这些反转点?我对并行思考还很陌生,所以如果这是微不足道的,我很抱歉。我正在尝试在 CUDA 中执行此操作,但我已经被困了数周。我试过使用 NVidia 的 finite difference 算法。这些会产生局部最大值/最小值但不会产生反转点。小的波动会产生无数的相对最大值/最小值,但大多数都是微不足道的,因为变化不大于反转大小。

My question is, is there a way to find these reversal point in parallel?

一种可能的方法:

  1. 使用thrust::unique删除价格在数值上恒定的时期
  2. 使用thrust::adjacent_difference产生一阶差分数据
  3. 对第一个差分数据使用thrust::adjacent_difference得到第二个差分数据,即斜率符号发生变化的点。
  4. 使用这些斜率变化点来识别不同的数据区域 - 从这些点构建一个关键向量(例如,使用前缀和)。此关键向量将价格数据分割成 "runs",其中价格变化沿特定方向。
  5. 使用thrust::exclusive_scan_by_key第一个差值数据,产生运行
  6. 的净变化
  7. 只要 运行 的净变化超过阈值,就标记为 "reversal"

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