5

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

这就是问题所在:大多数指标都围绕零点绘制,有时它们会在该点附近波动,有时在很远的地方波动。我想改变指标的绘制方式,使它们在零附近振荡更多。但这是棘手的部分,我不想过多地扭曲它们的形状;一些变化是好的和不可避免的,但我仍然希望这些指标能够识别它们最初的样子。

在过去,我尝试了很多方法,一种方法是使用对数类型的刻度,但这并不成功,因为它使任何处于非常高值的振荡几乎无关紧要——这不是目标。目标是尽量保持指标的任何一次振荡几乎相同,但改变它的位置,使其更接近零(中心)。或者换一种说法;目标是使指标执行类似形状的振荡,但这些振荡的中心应该更接近零(指标刻度的中心)。

有谁知道或可以想到可以做到这一点的方法?是否有任何算法可以帮助保持任何价格序列更多地围绕中心点振荡,而不会对原始数据造成太大的失真?

对此的任何帮助将不胜感激,谢谢。

==UPDATE== 在此处输入图像描述 粉线是原始振荡器,我画的黑线。它粗略地代表了我的目标。圆圈区域显示了绘制的直线与零相交的位置,因此其零值大致位于振荡的中心......但与原始形状相比,振荡的整体形状仍然可以识别,高点的差异也较小和每个振荡的低点;即它们的价值更相似。我尝试向各种指标添加几个不同的 Detrend 函数,但我发现这会使形状扭曲太多。

更新 2

我尝试将 y 轴线性减少 50% 和 80%,不幸的是,这似乎与比例因子的作用相同?这个对吗?它似乎并没有改变不同振荡之间的关系。如果您看到我的示例图,用黑线绘制的高低振荡更稳定,即它们的值/大小更相似,这是关键目标。

接下来,我将尝试在绘图中添加一个高通滤波器,以查看给出的结果以及它是否更接近我的目标。

像往常一样,请随时发表任何评论,因为他们很感激。

克里斯

更新 3

我还对指标实施了高通滤波器。这也没有奏效。这似乎也是一个比例因子。我本质上追求的是使大振荡更小,小振荡更大。将使用的任何指标带入更同步的范围 - 并在保持相关指标的基本属性的同时做到这一点。描述它的更好方法可能是我在使用阻尼公式?

有没有人有任何其他想法,或者我应该尝试的事情?

4

3 回答 3

4

如果您想做一些量身定制的事情,例如可以过滤傅里叶变换的低频分量。

假设我们有以下信号:

在此处输入图像描述

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

在此处输入图像描述

编辑 2

这是您可以从如上所述的高通滤波器中所期望的,添加指数阻尼,而不是仅仅处理低频分量。

Mathematica 中的程序(以防万一):

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% (使用您的数据,从您的绘图中提取), 看看您得到了什么:

在此处输入图像描述

并与您的情节进行比较:

在此处输入图像描述

于 2011-03-28T02:18:20.030 回答
1

我建议您做的第一件事是将所有指标标准化为均值 0 和标准差 1。这至少会使您的所有指标集中在 0 附近。

http://en.wikipedia.org/wiki/Standard_score

——拉尔夫·温特斯

于 2011-03-28T15:38:02.203 回答
0

我在您的示例中标记了输入/输出信号的低频分量: 在此处输入图像描述 似乎真的像@belisarius 所说的那样 - 只需对信号进行 FFT 并移除低频部分。也就是说 - 你需要高通滤波器算法。顺便说一句,高通滤波器也可以用一维卷积和高通内核来实现。例如,- 对于 3 分量核向量,高通核可以是[-1; 3; -1]。在我看来,使用卷积实现高通滤波器是最简单的一种。但通常通过 FFT 实现相对于 CPU 使用率而言是最快的。

hth

于 2011-03-28T15:59:36.613 回答