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

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

相关推荐
Decay__7 小时前
18_MySQL 智能巡检方案 —— 巡检项清单 / 一键巡检脚本 / 健康评分
运维·数据库·sql·mysql·架构
java_logo8 小时前
Docker 部署 Liquibase:轻松搭建数据库变更管理
数据库·docker·容器·数据库管理·liquibase·轩辕镜像·数据库变更
麦麦麦当劳大王8 小时前
【油猴脚本】Boss直聘 岗位职责复制
开发语言·前端·javascript
starzy19908 小时前
深入理解Scala Map:从实现原理到工程实践
开发语言·后端·scala
rockey6279 小时前
AScript之LINQ扩展
c#·.net·script·动态脚本
只睡四小时9 小时前
Three.js Sub-tick:漏判 60.7%→0
开发语言·javascript·性能优化·ecmascript·游戏开发·three.js·碰撞检测
凤凰院凶涛QAQ9 小时前
《MySQL内核拆解:从SQL到InnoDB》(四) : 联合查询 & 视图
数据库·sql·mysql
码农小河669 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库
张小姐的猫9 小时前
【MySQL】访问 & 数据流动原理
android·数据库·mysql·adb·1024程序员节
东鹏特饮11 小时前
系统运维(传统/通用运维)面试题
开发语言·php