【问题标题】:How can I find the difference between 2 values in C#?如何在 C# 中找到 2 个值之间的差异?
【发布时间】:2009-05-27 15:12:34
【问题描述】:

我正在使用在 10.000000 和 -10.000000 之间波动的振荡器

值每 5 分钟更改一次。我想找出当前值与 5 分钟前的值之间的差异。这是我的逻辑。

1 bar ago (1BA)= -.2
Current bar (CB) = .3

如果我执行以下操作,我不会得到 1 的值:

Abs(CB) - Abs(1BA) = .3 - .2 = 1

鉴于:

Abs(CB- 1BA) = .3 - -.2 = 5

我想简单地计算振荡器从一个时间帧到另一个时间帧的移动之间的差异。我在应用 Abs 时是否考虑到了正确的逻辑?

这是我的实际代码,请假设我被调用的方法是正确的:

if (Oscillator(PoFast, PoSlow, PoSmooth)[0] > 
           Oscillator(PoFast, PoSlow, PoSmooth)[3]
    && Math.Abs(Oscillator(PoFast, PoSlow, PoSmooth)[0] - 
           Oscillator(PoFast, PoSlow, PoSmooth)[3]) > .25)

【问题讨论】:

  • 这不是你问题的答案,但是将 Oscillator(PoFast, PoSlow, PoSmooth) 的结果存储到一个变量中,这样你就不会调用它四次,这会让你的生活更轻松。
  • 您的范围值介于-10+10 之间,因此您可以非常安全地避免使用the trickiest errorsMath.Abs 函数之一,这可能需要注意。

标签: c# absolute-value


【解决方案1】:

在两者中,Abs(CB-1BA) 是正确的,因为两个读数之间有 0.5 的变化。

编辑:为了使其更具可读性,并假设您获得双精度值,您会执行类似的操作,但需要进行错误检查,并且可能将 .25 设为变量。

double[] values = Oscillator(PoFast, PoSlow, PoSmooth);
double currentBar = values[0];
double oneBarAgo = values[3];

if (currentBar > oneBarAgo && Math.Abs(currentBar - oneBarAgo) > .25)
{
    // do something
}

【讨论】:

    【解决方案2】:

    你的逻辑,Abs(CB-1BA) 是正确的。

    顺便说一句,如果您不是开发人员,您真的认为您应该编写 C# 代码来交易期货合约吗?他们有足够的风险在最好的时候进行交易,不要介意你正在编写代码来做这件事而你不是开发人员!!!!

    【讨论】:

    • 同意。 @r2kTrader:请告诉我们您在哪家公司工作,这样我们可以确保不会向您购买期货合约。
    • 等等,你会相信一个对市场一无所知的程序员编写的交易软件吗?
    • 作为一名在交易大厅工作的开发人员,我可以告诉您,交易员会根据他们的需要编写一些“基本”的 Excel 应用程序。但是,是的,大多数时候,当我们不得不维护他们的代码时,这很糟糕^^'
    猜你喜欢
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多