MACD 回测

文章目录

    • 相关知识
    • 数据来源
    • 具体公式
    • 实现
    • 简单策略
    • 结论

相关知识

  1. MACD Wiki
  2. MA 计算公式
  3. MACD 概念和简单使用

数据来源

现在暂时使用了聚宽的数据。相关的日K和小时K的拉取在API文档里面可以找到,也可以在我的GitHub里面找到拉取的代码,代码很乱,随便看看就好。

具体公式

主要是三个计算:

  1. 12日的EMA
  2. 26日的EMA
  3. 9日的MACD

从EMA(指数移动平均)公式可以看到:
S t = { Y 1 , t = 1 α ∗ Y t + ( 1 − α ) ∗ Y t − 1 , t > 1; while  α = 2 N + 1 S_t = \begin{cases} Y_1, & \text {t = 1} \\ \alpha*Y_t + (1 - \alpha) * Y_{t-1}, & \text {t > 1; while } \alpha = \frac{2}{N+1} \end {cases} St={Y1,αYt+(1α)Yt1,t = 1t > 1; while α=N+12
其中,N就代表的是12和26

我们就可以用这个公式把周期为12(代称为快线)和周期为26(慢线)的K线EMA算出来,为什么说周期K线而不是日K,因为K线还有其他的周期,比如短线的分钟线,和中线的周线,长线的月线,季线。所以应该说是[60min | 日 | 周 | 月 | 季]的K线的快\慢线。

然后可以用快慢线来计算出DIFF
D I F F = E M A ( C , 12 ) − E M A ( C , 26 ) DIFF = EMA(C, 12) - EMA(C, 26) DIFF=EMA(C,12)EMA(C,26)
最后算出DIFF9日的DEA线:
D E A = E M A ( D I F F , 9 ) DEA = EMA(DIFF, 9) DEA=EMA(DIFF,9)

实现

实现部分具体可以看代码,在strategy里面,Python和C++的都有,用C++再写一遍主要是Python实在慢,一只票还好,3600只就有点扛不住了,但是具体逻辑是一样的:主要就是逐行读csv文件,然后计算DIFF线和MACD线,并且求出它们的交叉情况。

简单策略

根据MACD的金死叉规则,然后写了一个tracker来跟踪具体的Profit and Lost,代码里面有一个pnl_tracker,可以自行设置初始资金,手续费,每次信号来临时买入的手数,回测07年到现在的数据。

结论

光根据MACD线来当作交易信号不太理想,特别是在盘整行情中频繁出现交易信号的时候,MACD只能作为一个参考指标来使用。

你可能感兴趣的:(交易)