C语言实现MACD指标
只有实现了EMA,才能取得MACD
EMA,指数移动平均线是一种 IIR 滤波器,很容易用 C 语言实现,并且使用最少的资源。与简单的移动平均线不同,它不需要 RAM 缓冲区来存储先前的样本。它只需要存储一个值(前一个平均值)。
指数移动平均线表示为以下等式:avg[n] = (in * alpha) + avg[n-1]*(1-alpha)。使用浮点数学实现这个方程很简单,但使用定点变量有点棘手。此处的代码片段使用 32 位有符号整数作为平均值和输入值。中间值需要使用 64 位数学运算以避免溢出错误。
Alpha 值接近零表示重平均,而 Alpha 值为 1 表示不平均。
//This macros defines an alpha value between 0 and 1
#define DSP_EMA_I32_ALPHA(x) ( (uint16_t)(x * 65535) )
int32_t dsp_ema_i32(int32_t in, int32_t average, uint16_t alpha){
int64_t tmp0; //calcs must be done in 64-bit math to avoid overflow
tmp0 = (int64_t)in * (alpha) + (int64_t)average * (65536 - alpha);
return (int32_t)((tmp0 + 32768) / 65536); //scale back to 32-bit (with rounding)
}
//here is a function that uses the averaging code
int32_t my_avg_func(void){
static int32_t average = 0;
int32_t adc_value;
adc_value = read_the_adc_value();
average = dsp_ema_i32(adc_value, average, DSP_EMA_I32_ALPHA(0.1));
return average;
}
来源:https://www.embeddedrelated.com/showcode/304.php
相关资料:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具