首页 > 解决方案 > Python:如何计算移动平均交叉的数量+每个交叉之间的最高点?

问题描述

我正在回测一个简单的移动平均线策略,使用价格(例如日线)和一个简单的移动平均线。我想知道价格在我的股票 X 的历史数据中超过或低于移动平均线的频率。换句话说,我想找出交叉的总数。

我还想找出每个交叉点之间的最大/最小点。随着价格在移动平均线附近移动,它有时高于平均线,有时低于平均线。我想测量这些变化。我的意思是交叉 A 和交叉 B 之间的最高刻度或百分比距离,使用交叉 A 作为基线。

请看这张图片以澄清我的意思:

在此处输入图像描述

我将不胜感激任何可以为我指明如何在 Python 中编写代码的正确方向的帮助:-)

标签: pythonback-testing

解决方案


作为第一步,要计算交叉的数量以及它们何时发生,您可以执行以下操作。把它当作伪代码来得到一个想法..

# MA: list containing the values of the moving average for each time period
# High: list containing the highs of each bar 
# Low: list containing the lows of each bar
MA = [...]
High = [...]
Low = [...]
count = 0  # the number of crosses
index_cross = []  # the indices where crosses occur
for i in range(len(MA)):
    if Low[i] < MA[i] and High[i] > MA[i]:
        index_cross.append(i)
        count += 1 

现在你有十字架的数量和它们发生的时间。这假设条形图穿过 MA。(即没有跳空,前一根柱线的低点在 MA 以上,而当前柱线的高点在 MA 线以下)。然后,您可以继续使用 index_cross 指数来找到价格与交叉发生位置的最大偏差。您必须考虑是使用收盘价还是在上升趋势高点和下降趋势低点的情况下。

作为旁注,要使用兴趣点注释图形,您可以查看 pandas(用于数据分析的库)。此外,当市场波动时,此类注释往往会变得非常混乱。希望这能给一些方向..


推荐阅读