我不是专家程序员,但我试图改变一些技术指标在名为TradeStation的财务图表包中的显示方式(而不是特定的图表供应商是相关的)。
问题在于:大多数指标都是围绕零点绘制的,有时它们会在接近此点的位置振荡,有时甚至会很远。我想改变指标的绘制方式,使它们在零点附近振荡。但这里是棘手的部分,我不想过多地扭曲它们的形状;一些变化是好的,不可避免的,但我仍然希望这些指标能够被识别出来。
在过去,我尝试了很多方法,一种方法是使用对数型比例,但这并不成功,因为它使得任何振动达到非常高的值几乎无关紧要 - 这不是目标。目标是尽量保持指标的任何一个振荡几乎相同,但改变它的位置,使其更接近零(中心)。或换一种方式;目标是使指标执行类似的形状振荡,但这些振荡的中心应该更接近零(指标范围的中心)。
有没有人知道,或者可以想到一种方法可以做到这一点?是否有任何算法可以帮助保持任何价格序列在中心点附近摆动更多而不会对原始版本造成太大的扭曲?
非常感谢您对此的任何帮助。谢谢。
== UPDATE == 粉红色的线是原始的振荡器,我画的黑线。它粗略地代表了我的目标。圆圈区域显示绘制的线与零交叉的位置,使其零值大致位于振荡的中心...但是与原始振荡相比,振荡的整体形状仍然可识别,高点的差异也较小每次振荡的低点;即它们的价值更相似。我已经尝试将几种不同的Detrend函数添加到各种指标中,但我发现这会使形状扭曲太多。
更新2
我已经尝试将y轴线性减小50%和80%,不幸的是,这似乎只是作为比例因子的行为?它是否正确?它似乎没有改变不同振荡之间的关系。如果您看到我的示例图,则绘制的黑线具有更稳定的高和低振荡,即它们在值/大小上更相似,这是关键目标。
接下来,我将尝试在情节中添加一个高通过滤器,以查看它给出的结果以及它是否更接近我的目标。
像往常一样,随意发表任何评论,我们都会感激不尽。
克里斯
更新3
嗨,大家好,我还对指标实施了高通滤波器。这也没有做到这一点。这似乎也是一个比例因素。基本上我所追求的是使较大的振荡较小,较小的振荡较大。将任何指示器用于更加同步的范围 - 并在保持指示器的基本属性的同时执行此操作...更好的描述方法可能是我在阻尼公式之后?
有没有人有任何其他想法,或者我应该尝试的事情?干杯!!!
答案 0 :(得分:4)
如果你想做一些量身定做的事情,你可以过滤傅里叶变换的低频成分。
假设我们有以下信号:
然后我们计算FFT,并仅保留较高频率的分量。假设我们忽略了前1.5%的组件。 产生的原始信号的图和产生的振荡信号是:
HTH!
修改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%(使用你的数据,从你的图中提取)来看看你得到了什么:
并与你的情节进行比较:
答案 1 :(得分:1)
我建议你做的第一件事是将所有指标标准化为平均值0和标准差为1.这至少会将所有指标集中在0左右。
http://en.wikipedia.org/wiki/Standard_score
-Ralph Winters
答案 2 :(得分:0)
我在您的示例中标记了输入/输出信号的低频分量:
似乎@belisarius说你想要的是 - 只需对信号进行FFT并去除低频部分。那就是 - 你需要high pass filter算法。 BTW,高通滤波器也可以用1D convolution和高通内核实现。例如, - 对于3分量内核向量,高通内核可以是[-1; 3; -1]
。在我看来,使用卷积的高通滤波器实现是最简单的。但通常通过FFT实现与cpu使用相关的速度最快。
HTH