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

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

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

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

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

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

EMA的数学公式如下:

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

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

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

json 复制代码
{
  "todayMacd": -0.04443251288908123,
  "todayDea": -0.32544380570976894,
  "todayDif": -0.34766006215430956,
  "lastMacd": -0.07166991643366516,
  "lastDea": -0.3198897415986338,
  "lastDif": -0.3557246998154664
}

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

DIF=-0.35

DEA=-0.33

MACD=-0.04

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

现在看前一天的数据:

DIF=-0.36

DEA=-0.32

MACD=-0.07

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

EMA计算:

cs 复制代码
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计算:

typescript 复制代码
List<double> ema12List = BasicIndicators.CalculateEMA(total, 12).Values;
 List<double> ema26List = BasicIndicators.CalculateEMA(total, 26).Values;
 // 计算DIF
 var dif = ema12List.Zip(ema26List, (x, y) => x - y).ToList();


 // 计算DEA
 var dea = BasicIndicators.CalculateEMA(dif, 9).Values.ToList();
 // 计算MACD
 var macd = dif.Zip(dea, (difValue, deaValue) => (difValue - deaValue) * 2).ToList();

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

相关推荐
海绵啵啵呀7 分钟前
SQL plus中解决上下键找历史命令的工具--rlwrap命令行工具
数据库·sql
Lhan.zzZ8 分钟前
Qt数据可视化实战:饼图、线图与表格的完整指南
开发语言·qt·信息可视化
Acrelhuang9 分钟前
筑牢用电防线:Acrel-1000 自动化系统赋能 35kV 园区高效供电-安科瑞黄安南
java·大数据·开发语言·人工智能·物联网
Elastic 中国社区官方博客11 分钟前
使用 Mastra 和 Elasticsearch 构建具有语义回忆功能的知识 agent
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
老邓计算机毕设17 分钟前
SSM危险品运输车辆信息管理系统b2z1o(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·ssm 框架
新手小白*23 分钟前
Elasticsearch+Logstash+Filebeat+Kibana部署【7.1.1版本】
大数据·elasticsearch·搜索引擎
小龙报29 分钟前
《算法通关指南数据结构和算法篇(4)--- 队列和queue》
c语言·开发语言·数据结构·c++·创业创新·学习方法·visual studio
MuYiLuck33 分钟前
redis持久化与集群
java·数据库·redis
民乐团扒谱机36 分钟前
深入浅出理解克尔效应(Kerr Effect)及 MATLAB 仿真实现
开发语言·matlab·光学·非线性光学·克尔效应·kerr effect
B站计算机毕业设计之家39 分钟前
大数据python招聘数据分析预测系统 招聘数据平台 +爬虫+可视化 +django框架+vue框架 大数据技术✅
大数据·爬虫·python·机器学习·数据挖掘·数据分析