gpt4 book ai didi

algorithm - 查找股票图表的最小最大值

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:17:08 26 4
gpt4 key购买 nike

stock

是否有任何特定的算法可以让我找到上图中的最小点和最大点?

我有文本格式的数据,所以我不需要在图片中找到它。股票的问题在于它们有太多的本地最小值和最大值,简单的衍生工具将不起作用。

我正在考虑使用数字滤波器(z 域)并平滑图形,但我仍然有太多的局部最小值和最大值。

我也尝试使用移动平均线来平滑图表,但我的最大值和最小值又太多了。

编辑:

我阅读了一些评论,只是无意中没有圈出一些最小值和最大值。

我想我想出了一个可行的算法。首先找到最低点和最高点(当天的最高价和当天的最低价)。然后绘制三条线,一条从开盘到高点或低点,以先到者为准,然后画一条从低点到高点或高点到低点的线,最后是收盘点。然后在这三个区域中的每一个中找到距离线最远的点作为我的高点和低点,然后重复循环。

最佳答案

我通常结合使用移动平均线和指数移动平均线。它被证明(凭经验)非常适合这项任务(至少足以满足我的需要)。仅使用两个参数调整结果。这是一个示例:

enter image description here

编辑

如果它对某人有用,这是我的 Mathematica 代码:

f[sym_] := Module[{l},
(*get data*)
l = FinancialData[sym, "Jan. 1, 2010"][[All, 2]];
(*perform averages*)
l1 = ExponentialMovingAverage[MovingAverage[l, 10], .2];
(*calculate ma and min positions in the averaged list*)
l2 = {#[[1]], l1[[#[[1]]]]} & /@
MapIndexed[If[#1[[1]] < #1[[2]] > #1[[3]], #2, Sequence @@ {}] &,
Partition[l1, 3, 1]];
l3 = {#[[1]], l1[[#[[1]]]]} & /@
MapIndexed[If[#1[[1]] > #1[[2]] < #1[[3]], #2, Sequence @@ {}] &,
Partition[l1, 3, 1]];
(*correlate with max and mins positions in the original list*)
maxs = First /@ (Ordering[-l[[#[[1]] ;; #[[2]]]]] + #[[1]] -
1 & /@ ({4 + #[[1]] - 5, 4 + #[[1]] + 5} & /@ l2));
mins = Last /@ (Ordering[-l[[#[[1]] ;; #[[2]]]]] + #[[1]] -
1 & /@ ({4 + #[[1]] - 5, 4 + #[[1]] + 5} & /@ l3));
(*Show the plots*)
Show[{
ListPlot[l, Joined -> True, PlotRange -> All,
PlotLabel ->
Style[Framed[sym], 16, Blue, Background -> Lighter[Yellow]]],
ListLinePlot[ExponentialMovingAverage[MovingAverage[l, 10], .2]],
ListPlot[{#, l[[#]]} & /@ maxs,
PlotStyle -> Directive[PointSize[Large], Red]],
ListPlot[{#, l[[#]]} & /@ mins,
PlotStyle -> Directive[PointSize[Large], Black]]},
ImageSize -> 400]
]

关于algorithm - 查找股票图表的最小最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7061071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com