python 快乐数判断_利用Python实现MACD"顶底背离"形态,并实现自动化交易!

点及财经,股票期货专业投机者。

fb947406950dd0f77e97e0a98c5a547d.png

前言

股票或期货的价格波动,总会有一些可以规律可以遵循的。其中,"背离"也算是其中的一种,并且可以作为判断趋势结束或阶段调整的预警信号。

b07fded1cf4c3c57f04ae48c3b9aabdb.png

通常情况下,我们所说的"背离"是指价格与技术指标的运动方向发生相反方向的运动的情形。正如下面的MACD顶背离技术形态,仔细观察价格与MACD两者的走势。

如下图所示:

9bee69aa2e267369ea62ac83f1b39175.png

从上图中可以看到,价格的波峰一个比一个高,而MACD指标的波峰一浪比一浪低。这就是MACD顶背离

而MACD底背离,如下图所示:

0c166b47ea5571aab7349aada3876c8b.png

其主要特征与顶背离完全相反

价格的波谷一个比一个低,而MACD指标的波谷一浪比一浪高。这就是MACD底背离!

一旦价格产生背离,说明价格的原上涨或下跌趋势的动能减弱,预示着趋势可能发生反转或震荡

ae9346894e3a6f0ab32f49aa265fc6ee.png

至于为什么会产生背离,它的内在运行机理是什么。作者在往期的文章中有专门的一篇文章有非常详细的讲解。

而作者在这期文章中,只分享如何利用Python对MACD顶底背离进行量化,并加入简单的开平仓指令

Python 语言中"背离"的量化逻辑

背离的量化,不管是什么语言它的思路都是相同的。唯一的区别是实现这个功能的表达方式!

在Python中我用了两个函数分别量化"顶背离"和底背离。下面我以"MACD底背离"为例,下面是图解实现过程:

e1446c9362742c4fd9ec04b36403f707.png

作者通过记录MACD的金叉死叉时的id,然后通过前后蓝色id与红色id相减,得到计算MACD波谷所需要往前移动的k线数量(从金叉起往前数 n根k线)

然后利用Python中的max()、min()方法,求出价格及MACD的波谷位置。

bb613a8adc8283748666d987a7012587.png

当我们量化出第一个后,第二个,第三个的思路是一样的。同时,计算MACD波谷区间的价格波谷也是这样的思路。

最后通过条件判断,找出顶背离或底背离的形态,并发出开仓指令。

Python tqsdk 实现MACD顶底"背离"

在上述中,作者分享了关于顶底背离的量化思路。接下来,作者将用五个步骤完成背离的量化。

一、首先,导入相应的包并设置参数变量。

ea8d9cd2dc51fa9e50c9edb7a14d7b1b.png

作者用于回测的品种是螺纹钢指数15分钟。其中self._lowest_md 和self._highest_md 、self.lowest和self.highest

分别表示MACD的波谷值和波峰值、MACD波峰波谷对应的价格波峰波谷值

a0277c8e9eb45deb9d04543eb88fc3c7.png

二、计算MACD指标以及记录金叉死叉位置。

作者直接使用天勤量化内置的MACD、金叉和死叉函数进行相应计算,并将结果存入kline中。

773000b4623d034783b5a8192b18507a.png

作者打印出采用天勤内置的上穿函数的计算结果。当遇到MACD金叉时,值为1,其他为0。

并且,天勤的下穿函数crossdown(a,b)的返回值和上穿一致,只有1或0。

如下图所示:

df3adac1b0ced829c42fbf3bea7e4151.png

代码中的trend_long、trend_short,只记录MACD上穿或下穿0轴的位置,同样返回值为1或0。

0c189818d77127162436f9ab5eb4e9ed.png

上述,作者分享了MACD指标的计算以及金叉死叉位置的标注方法。

下面,作者将利用指标及标注的金叉死叉的位置来计算MACD及对应价格的波峰及波谷

三、计算出用于判断顶底"背离"所需要的"波峰波谷"数据

在上个一步骤中,作者已经计算出了MACD金死叉的位置。

因此我们就可以通过这个位置所对应的K线id,推算出死叉到金叉之间经过了多少(n)根k线并从当前倒推n根k线,得到计算波谷的区间

5ccd6f8522165f3f7be927212abda381.png

作者以“底背离为例”

代码:

f3f024d54e25d26c7734c4909ca7147f.png
9ce60cc7d40f5e564118083ce82aab90.png

其中,核心的计算部分是:self._lowest_md、self.lowest这两个列表存储着用于判断底背离的指标及价格的波谷数据。

1716e932338d81df33daa841205e7d42.png

而这段代码的最后一部分,当指标在零轴之上时,重置列表及记录的金叉死叉的id,以便于在新一轮0轴以下再记录。

9ce60cc7d40f5e564118083ce82aab90.png
1bb87e868bfaea6ba56f0798782ca1ff.png

同时,顶背离的计算结构与底背离是一致的

如下图所示:

066256da1cc490386b11722afdb1ff9e.png

四、判断顶底背离并加入简单的开平仓指令

这一部分,作者按照开篇所讲的“顶背离”和“底背离”的判断标准来判断并加入开平仓指令。

1.开仓部分:

a2139969f279a794ae3700dbff64e808.png

2.平仓部分:当平仓后,使用del 删除列表中已经使用过的波峰波谷值的前一值。

7c50fec27d16b4c5a7f6a08f8fdf042d.png

最主要的部分是这段代码:第一个If是判断是否是“底背离”,第二个If判断是否是“顶背离”。如果条件满足,则开仓1手。

33785434f623be0ab1d4012fc504f2f5.png

五、调用main() 函数,启动策略。

4824a86f8fd355a47dadf188e644cb38.png

验证代码的正确性:底背离为例。

1.金叉:

641a5aa340d6e1c9568d5dedca9d58d6.png

2.底背离:

ce4495c1d0eec9d524af5a915c533d20.png

小结。

上述是用Python语言借助天勤量化平台,量化MACD背离的整个过程。

其中重点在于波峰波谷值的计算和背离的判断,难点在于如何通过控制代码的运行顺序进行计算

最后

"背离",仅判断趋势的动能减弱,而不一定预示着趋势会反转。因为,很有可能是原趋势的阶段性调整,也有可能进入长期的震荡之中

很有可能,在价格突破或跌破顶背离或底背离区域后,一飞冲天或是一泻千里!

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python来计算和绘制MACD(Moving Average Convergence Divergence)指标以及找出MACD背离。下面是一个简单的示例代码: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt # 假设已经有了价格数据,存储在一个名为df的DataFrame中,包含日期和价格两列 # 例如:df = pd.read_csv('price_data.csv') # 计算MACD指标 def calculate_macd(df, short_period=12, long_period=26, signal_smoothing=9): df['EMA_short'] = df['Close'].ewm(span=short_period, adjust=False).mean() df['EMA_long'] = df['Close'].ewm(span=long_period, adjust=False).mean() df['MACD'] = df['EMA_short'] - df['EMA_long'] df['Signal'] = df['MACD'].ewm(span=signal_smoothing, adjust=False).mean() df['Histogram'] = df['MACD'] - df['Signal'] return df # 找出MACD背离 def find_macd_divergence(df): divergence_points = [] for i in range(2, len(df)-2): if df.iloc[i-2]['Histogram'] > 0 and df.iloc[i-1]['Histogram'] > 0 and \ df.iloc[i]['Histogram'] < 0 and df.iloc[i+1]['Histogram'] < 0: if df.iloc[i]['Close'] < df.iloc[i-2]['Close'] and df.iloc[i]['Close'] < df.iloc[i+1]['Close']: divergence_points.append(df.iloc[i]) return pd.DataFrame(divergence_points) # 绘制价格图和MACD指标 def plot_macd(df): fig, ax1 = plt.subplots() ax1.plot(df['Date'], df['Close'], color='blue') ax1.set_xlabel('Date') ax1.set_ylabel('Price', color='blue') ax2 = ax1.twinx() ax2.plot(df['Date'], df['MACD'], color='red', label='MACD') ax2.plot(df['Date'], df['Signal'], color='green', label='Signal') ax2.bar(df['Date'], df['Histogram'], color='gray', alpha=0.5, label='Histogram') ax2.set_ylabel('MACD', color='black') plt.legend() plt.show() # 调用函数计算MACD指标和找出底背离点 df = calculate_macd(df) divergence_df = find_macd_divergence(df) # 打印底背离点 print("MACD背离点:") print(divergence_df) # 绘制图表 plot_macd(df) ``` 请注意,以上代码仅为示例,实际使用时需要根据你的数据和需求进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值