C# 如何使用RX.NET查找价格反转

C# 如何使用RX.NET查找价格反转,c#,system.reactive,C#,System.reactive,我正在学习RX,并试图看看是否可以使用它解决以下问题: 我有一系列加密硬币的价格,我正试图找出价格反转何时开始在泵期间发生。在这些泵期间,硬币的价格上升得非常快,当它开始下降时,我想做一个动作(卖出订单)。然而,有时它会停下来一点,然后再往上走,但大多数情况下,当它开始下降时,它真的会下降 我已经设法让股票代码流运行,并计算它们之间的一些增量,这种方式可能会让你畏缩(我有点误用了扫描方法): 现在我想计算一下,当N个连续的增量在T个时间内小于X个数量时,以及它们在做什么。我想我得设法把他们分组,

我正在学习RX,并试图看看是否可以使用它解决以下问题: 我有一系列加密硬币的价格,我正试图找出价格反转何时开始在泵期间发生。在这些泵期间,硬币的价格上升得非常快,当它开始下降时,我想做一个动作(卖出订单)。然而,有时它会停下来一点,然后再往上走,但大多数情况下,当它开始下降时,它真的会下降

我已经设法让股票代码流运行,并计算它们之间的一些增量,这种方式可能会让你畏缩(我有点误用了扫描方法):


现在我想计算一下,当N个连续的增量在T个时间内小于X个数量时,以及它们在做什么。我想我得设法把他们分组,但我现在不知所措

您没有严格定义您的问题。但您可能会在这些运算符的某些组合中找到解决方案:

  • -根据计数、时间跨度或自定义逻辑将可观察项分组到列表中
  • -与缓冲区相同,但不是分组到列表中,而是分组到可观察的
  • -将每件物品包装在一个可观察的包装内,并贴上一张邮票,告诉您距离最后一件物品已经过了多少时间
  • 扫描
    -用于累积状态(如您所演示)

您没有严格定义您的问题。但您可能会在这些运算符的某些组合中找到解决方案:

  • -根据计数、时间跨度或自定义逻辑将可观察项分组到列表中
  • -与缓冲区相同,但不是分组到列表中,而是分组到可观察的
  • -将每件物品包装在一个可观察的包装内,并贴上一张邮票,告诉您距离最后一件物品已经过了多少时间
  • 扫描
    -用于累积状态(如您所演示)
public class Ticker
{
    public decimal Ask { get; set; }
    public decimal Bid { get; set; }
    public decimal Delta { get; set; }
    public decimal DeltaPercent { get; set; }
    public DateTime Time { get; set; }
    public override string ToString()
    {

        return $"a: {Ask} B:{Bid} D:{Delta} DP:{DeltaPercent} T:{Time}";
    }
}    

res.AsObservable().DistinctUntilChanged(x => x.Ask)
    .Scan((state, t) =>
    {
        var d =  t.Ask-state.Ask;
        t.Delta = d;
        t.DeltaPercent = t.Delta/state.Ask;
        return t;
    })