龙听期货论坛's Archiver

龙听 发表于 2024-11-3 20:56

Moving Average Convergence and Divergence(MACD)指标c++语言写法

以下是一个简单的C++实现 macd 函数的示例。MACD(移动平均收敛发散指标)是一个广泛使用的技术分析指标,由MACD线、信号线和柱状图组成。以下是基本实现:
**** Hidden Message *****

龙听 发表于 2024-12-23 16:48

另一个计算方式程式码:[code]
#include <iostream>
#include <vector>
using namespace std;

// 计算指数平滑移动平均线 (EMA)
vector<double> calculateEMA(const vector<double>& prices, int period) {
    vector<double> ema(prices.size());
    double multiplier = 2.0 / (period + 1);
    ema[0] = prices[0]; // 初始化第一值为价格的第一个值

    for (size_t i = 1; i < prices.size(); ++i) {
        ema[i] = (prices[i] - ema[i - 1]) * multiplier + ema[i - 1];
    }

    return ema;
}

// 计算 MACD 指标
void calculateMACD(const vector<double>& prices, int shortPeriod, int longPeriod, int signalPeriod) {
    // 计算快线和慢线的 EMA
    vector<double> shortEMA = calculateEMA(prices, shortPeriod);
    vector<double> longEMA = calculateEMA(prices, longPeriod);

    // 计算 DIF
    vector<double> dif(prices.size());
    for (size_t i = 0; i < prices.size(); ++i) {
        dif[i] = shortEMA[i] - longEMA[i];
    }

    // 计算 DEA
    vector<double> dea = calculateEMA(dif, signalPeriod);

    // 计算 MACD 柱状图
    vector<double> macd(prices.size());
    for (size_t i = 0; i < prices.size(); ++i) {
        macd[i] = 2 * (dif[i] - dea[i]); // 通常将 MACD 值乘以 2
    }

    // 输出结果
    cout << "Index\tPrice\tDIF\tDEA\tMACD" << endl;
    for (size_t i = 0; i < prices.size(); ++i) {
        cout << i << "\t" << prices[i] << "\t" << dif[i] << "\t" << dea[i] << "\t" << macd[i] << endl;
    }
}

int main() {
    // 示例价格数据
    vector<double> prices = {1.0, 1.1, 1.2, 1.1, 1.0, 1.3, 1.4, 1.5, 1.6, 1.7};

    // MACD 参数
    int shortPeriod = 12; // 快速 EMA 周期
    int longPeriod = 26;  // 慢速 EMA 周期
    int signalPeriod = 9; // 信号线 EMA 周期

    // 计算并输出 MACD
    calculateMACD(prices, shortPeriod, longPeriod, signalPeriod);

    return 0;
}
[/code]代码说明

    calculateEMA 函数: 用于计算给定周期的 EMA。
    calculateMACD 函数: 计算 DIF、DEA 和 MACD 柱状图。
    参数设置:
        shortPeriod: 快线的 EMA 周期。
        longPeriod: 慢线的 EMA 周期。
        signalPeriod: 信号线的 EMA 周期。

输出格式

程序会输出每个数据点的价格、DIF 值、DEA 值和 MACD 值,方便查看计算结果。

你可以根据实际需求修改 prices 数据或者参数设置。

-----------------------------------------------------------------------------------------------------------------------------------

MACD 是一种基于移动平均线的技术分析指标,通常由以下三部分组成:

    快线 (DIF): 由快速移动平均线(短期 EMA)与慢速移动平均线(长期 EMA)之间的差值计算得出。
    信号线 (DEA): DIF 的移动平均线。
    柱状图 (MACD): DIF 与 DEA 之间的差值。

页: [1]