您的位置:首页 > 文旅 > 美景 > C#/.NET量化开发实现财富自由【4】实现EMA、MACD技术指标的计算

C#/.NET量化开发实现财富自由【4】实现EMA、MACD技术指标的计算

2024/12/25 10:18:36 来源:https://blog.csdn.net/e_hilary/article/details/140031477  浏览:    关键词:C#/.NET量化开发实现财富自由【4】实现EMA、MACD技术指标的计算

听说大A又回到了2950点以下,对于量化交易来说,可能这些都不是事儿。例如,你可以预判到大A到顶了,你可能早就跑路了。判断逃顶还是抄底,最简单的方式就是判断是否顶背离还是底背离,例如通过MACD,你可以编写指标用来判断是顶背离还是底背离,集成到股票软件上,例如:

2bdc540a452c87f634754b68e0db978a.jpeg

当然,交易软件上面的指标,还是有局限性,因为不能帮助咱们自动交易。要自动交易,还是需要写代码,然后通过代码判断一些技术指标或者其他自定义指标。而上面的顶底背离,就需要用到MACD指标来进行计算。于是就进入到今天的主场内容,使用.NET开发实现对MACD数据的计算。

先祝各位看这个文章的大佬们,早日实现股票账户余额超过下图那样冰冷的数字,实现自由。

f6e15127bb10fa4b2c98f7e6721a82a7.png

废话不多说,开始重点。先创建一个基础技术指标类,用来后续处理多种基础技术指标使用。例如今天要说的EMA指标实现算法。算法实现如图所示。

10d2aee9e251f78c27d2fb74441a5235.png

EMA可以用来干嘛呢?EMA(指数移动平均)可以用来计算出MACD、DIFF、DEA、背离等等。可以说是各种技术指标里面最经常要用到的指标。

EMA的数学公式如下:

a53c5ddef43297c906271f9ef9e27c30.png

例如下面咱们使用EMA基础指标,来计算出MACD指标数据。控制器里面新增一个测试EMA的api接口,用来计算EMA和MACD使用。

e0b8c56ecdebce4fc9856ed7c8a48ee5.png

然后计算MACD、DIF、DEA等数据,并输出最新的两天的数据做验证。

9e2381b889f64d1bddb16077e52d0e75.png

运行程序,并调用api接口执行一下,获取到最近两天的数据

2902df7efc834ee3e8fe1e8460e6243c.png

{"todayMacd": -0.04443251288908123,"todayDea": -0.32544380570976894,"todayDif": -0.34766006215430956,"lastMacd": -0.07166991643366516,"lastDea": -0.3198897415986338,"lastDif": -0.3557246998154664
}

现在随便打开一个行情网站或者软件查看该股票的这两天的数据做对比。例如我打开的雪球,查看该个股数据:

21a1a50834866170406bd9d24f762e29.png

DIF=-0.35

DEA=-0.33

MACD=-0.04

刚好和上面数据对应的上,一般行情软件都会四舍五入保留两位数。

现在看前一天的数据:

6375f88c8572a7280c8179cbb7e77b89.png

DIF=-0.36

DEA=-0.32

MACD=-0.07

也可以和上面的数据的四舍五入后的对应上,说明咱们的MACD计算是正确的。

EMA计算:

var returnValues = new List<double>();
double multiplier = 2.0 / (period + 1); // 确保进行浮点数计算
double initialSMA = input.Take(period).Average();returnValues.Add(initialSMA);var copyInputValues = input.ToList();// 从index=period开始,因为我们已经计算了第一个EMA值为initial SMA
for (int i = period; i < copyInputValues.Count; i++)
{double lastEMA = returnValues.Last(); // 获取上一个EMA值double newEMA = (copyInputValues[i] - lastEMA) * multiplier + lastEMA;returnValues.Add(newEMA);
}var result = new EmaResult()
{Values = returnValues,StartIndexOffset = period - 1
};

MACD计算:

List<double> ema12List = BasicIndicators.CalculateEMA(total, 12).Values;List<double> ema26List = BasicIndicators.CalculateEMA(total, 26).Values;// 计算DIFvar dif = ema12List.Zip(ema26List, (x, y) => x - y).ToList();// 计算DEAvar dea = BasicIndicators.CalculateEMA(dif, 9).Values.ToList();// 计算MACDvar macd = dif.Zip(dea, (difValue, deaValue) => (difValue - deaValue) * 2).ToList();

如果觉得有帮助,欢迎点赞、留言、转发或关注。谢谢各位大佬,祝大佬们早日财富自由。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com