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();

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

相关推荐
qq_479875439 分钟前
C++ ODR
java·开发语言·c++
黄色茶杯11 分钟前
AI编程工具TRAE解决日常问题之SQLite数据复制
数据库·sqlite
一叶之秋141216 分钟前
Qt开发初识
开发语言·qt
老华带你飞26 分钟前
订票系统|车票管理系统|基于Java+vue的车票管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·订票系统
weixin_wx520-198328 分钟前
骑士人才网全系与phpyun人才网系统数据转移或互转的技术文档和要领,和大家一起共勉
数据库·骑士人才网开源版·骑士人才网数据转移·phpyun人才网源码
聆风吟º28 分钟前
国产化数据库选型深度剖析:金仓KES与达梦DM全生命周期成本对比
数据库·kingbasees
码农阿豪30 分钟前
金仓KES vs. 达梦DM:全面对比解析迁移、运维与授权成本
运维·数据库·国产
ANGLAL32 分钟前
25.Spring Boot 启动流程深度解析:从run()到自动配置
java·开发语言·面试
uuukashiro1 小时前
大数据计算引擎选型指南:腾讯云数据湖计算DLC领跑2025市场
大数据·ai·云计算·腾讯云
康语智能1 小时前
小康AI家庭医生:以科技之翼,守陪伴之初心
大数据·人机交互·智能手表