首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何操纵价格序列(指标)围绕中心价值波动?

如何操纵价格序列(指标)围绕中心价值波动?
EN

Stack Overflow用户
提问于 2011-03-27 23:19:50
回答 3查看 460关注 0票数 5

我不是专业的程序员,但我试图改变一些技术指标显示在一个名为TradeStation的财务图表包中的方式(并不是说特定的图表供应商是相关的)。

问题是:大多数指标都是在零点附近绘制的,有时在这个点附近振荡,有时在很远的地方振荡。我想改变这些指标的绘制方式,使它们更多地围绕着零振荡。但这里有一个棘手的部分,我不想过多地扭曲它们的形状;有些变化是好的、不可避免的,但我仍然希望这些指标能够被识别出来。

在过去,我尝试过许多方法,其中一种方法是使用对数式标度,但这并不成功,因为它使任何一个很高值的振荡几乎无关紧要--这不是目标。目标是尽量保持指示器的任何一个振荡几乎相同,但改变它的位置,使其更接近于零(中心)。换句话说,目标是使指标表现出类似的形状振荡,但这些振荡的中心应该更接近于零(指标尺度的中心)。

有没有人知道,或能想出一种方法可以做到这一点?是否有任何算法可以帮助价格序列在中心点附近保持更多的振荡,而不会对原始数据产生太大的失真?

如能对此提供任何帮助,将不胜感激,谢谢。

==UPDATE==

粉红线是原来的振荡器,是我画的黑线。它粗略地代表了我的目标。圈出的区域显示画在线上的线穿过零,这样它的零值大致在振荡的中心.但是,振荡的总体形状与原始振荡相比仍然是可识别的,而且每个振荡的高低相差较小,即它们的值更相似。我尝试在各种指标中添加几个不同的下降趋势函数,但我发现这对形状造成了太大的扭曲。

更新2

我试着把y轴线性地除以50%和80%,不幸的是,这似乎就像比例因子那样起作用了?这是正确的吗?它似乎并没有改变不同振荡之间的关系。如果你看我的例子图,在黑线画有更稳定的高和低振荡,即它们的值/大小更相似,这是关键的目标。

接下来,我将尝试在图中添加一个高通过滤器,看看它会产生什么结果,以及它在任何方面是否更接近我的目标。

如往常一样,请随时张贴任何意见,因为他们是感激的收到。

克里斯

更新3

我还实现了一个高通过滤器的指示器。这也没起什么作用。这似乎也是一个规模因素。本质上,我要做的是使大的振荡变小,小的振荡变大。将任何使用的指示器带入一个更同步的范围--并在保持该指示符的基本属性的同时进行此操作。更好的描述方法可能是我想要一个阻尼公式?

有没有人有其他的想法,或者我应该尝试的东西?

EN

回答 3

Stack Overflow用户

发布于 2011-03-28 02:18:20

如果你想做一些特制的事情,例如,你可以过滤傅里叶变换的低频成分。

假设我们有以下信号:

然后计算FFT,只保留高频分量。假设我们忽略了前1.5%的组件。原始信号和由此产生的振荡信号的结果图是:

哈哈!

编辑2

正如上面所描述的,这就是你可以期望的高通滤波器,增加指数阻尼,而不是仅仅处理低频分量。

数学程序(以防万一):

代码语言:javascript
复制
centerOsc[x_] := 
  Module[{list, n, fp, coef, s}, 
   list = (Transpose@FinancialData[#, "Jan. 1, 2005"])[[2]] &@x;
   n = Length@list;
   fp = Transpose[{N[Range[n]]/n, list}];
   coef = FourierDST[list, 1]/Sqrt[n/2];
   coef = Table[N[coef[[i]] (1 - E^(-i/6))], {i, 1, Length@coef}];
   s = IntegerPart[Length@coef/100]; s = 1;
   {fp, {#, 
       Sum[coef[[r]]*Sin[Pi r #], {r, s, n - 1}]} & /@ (N[Range[n]]/
       n)}];
l = {"GE", "GOOG", "IBM", "MSFT"} ;(*Real prices from*)
GraphicsGrid@
 Partition[ListLinePlot[centerOsc[#],
     Axes -> False, Frame -> True, PlotLabel -> #,
     PlotRange -> {{0.1, .9}, Full}, 
     Epilog -> Line[{{0, 0}, {1, 0}}]] & /@ l, 2]

编辑2

根据您的上一次更新,似乎可以更容易地实现您想要的。只需查看将y轴线性减少50%和80% (使用从绘图中提取的数据)可以得到什么:

与你的情节相比:

票数 4
EN

Stack Overflow用户

发布于 2011-03-28 15:38:02

我建议你做的第一件事就是把所有的指标标准化到平均为0,标准差为1,这至少会使你所有的指标都以0为中心。

得分

-Ralph温特斯

票数 1
EN

Stack Overflow用户

发布于 2011-03-28 15:59:36

在您的示例中,我标记了输入/输出信号的低频分量:

就像“belisarius”所说的,你想要的是--只要对信号进行FFT,并去除低频部分即可。也就是说-你需要高通滤波器算法。另外,高通滤波器也可以用一维卷积和高通内核实现.例如,对于3个组件内核向量,高通内核可以是[-1; 3; -1].在我看来,高通滤波器的卷积实现是最简单的。但是通常通过FFT来实现相对于cpu的使用是最快的。

hth

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5453169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档