You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MQL4中如何收集High/Low价格数据并计算算术均值?

计算50组高低价均值的正确实现思路

需求说明

我需要编写一个for循环计算50个价格数据的均值,目前的难点是如何收集并存储High[0]至High[50]以及Low[0]至Low[50]的价格数据,用于均值公式M = 总价值 / 数据数量的计算。

参考的C++算术均值实现代码

float arithmeticMean(float [], int);
int main()
{
    int n, i;
    float arr[50], armean;
    cout<<"Enter the Size (maz. 50): ";
    cin>>n;
    cout<<"\nEnter "<<n<<" Numbers: ";
    for(i=0; i<n; i++)
        cin>>arr[i];
    armean = arithmeticMean(arr, n);
    cout<<"\nArithmetic Mean = "<<armean;
    cout<<endl;
    return 0;
}
float arithmeticMean(float arr[], int n)
{
    int i;
    float sum=0, am;
    for(i=0; i<n; i++)
        sum = sum+arr[i];
    am = sum/n;
    return am;
}

我尝试的错误代码

{
int d = High[50]+Low[50];
double rb[],armean;
for(int s=-1; Close[s]<d; Close[s++]) //Array Iteration Loop Forward BarsToCheck
{
double Meansize = ArrayResize(rb,s);
double sum = Meansize+rb[s];
}
armean = sum/d;
}

错误分析与正确实现

错误点梳理

  1. 变量声明非法:double rb[],armean; 这种数组声明方式不符合C++语法,必须指定数组大小或使用动态分配(如new)。
  2. 循环逻辑混乱:循环初始值s=-1会导致数组越界访问;循环条件Close[s]<d与需求无关,迭代方式Close[s++]不符合循环自增的正确写法。
  3. 求和逻辑错误:ArrayResize(rb,s)的使用时机完全错误,求和语句sum = Meansize+rb[s]没有实现累加效果。
  4. 均值计算逻辑错误:变量d被赋值为High[50]+Low[50],并非数据数量,导致最终均值计算完全偏离需求。

正确实现代码

根据需求,分两种常见场景给出实现:

场景1:分别计算High数组和Low数组的算术均值

#include <iostream>
using namespace std;

// 通用算术均值计算函数
double arithmeticMean(double arr[], int dataCount) {
    double total = 0.0;
    for (int i = 0; i < dataCount; ++i) {
        total += arr[i];
    }
    return total / dataCount;
}

int main() {
    const int DATA_COUNT = 50; // 明确数据数量
    double High[DATA_COUNT], Low[DATA_COUNT];

    // 模拟填充价格数据(实际场景中替换为真实数据源读取逻辑)
    for (int i = 0; i < DATA_COUNT; ++i) {
        High[i] = 100.5 + i * 0.3;
        Low[i] = 98.2 + i * 0.2;
    }

    // 计算并输出均值
    double highMean = arithmeticMean(High, DATA_COUNT);
    double lowMean = arithmeticMean(Low, DATA_COUNT);

    cout << "High价格均值: " << highMean << endl;
    cout << "Low价格均值: " << lowMean << endl;

    return 0;
}

场景2:计算每组(High[i] + Low[i])的算术均值

#include <iostream>
using namespace std;

int main() {
    const int DATA_COUNT = 50;
    double High[DATA_COUNT], Low[DATA_COUNT];

    // 模拟填充数据
    for (int i = 0; i < DATA_COUNT; ++i) {
        High[i] = 100.5 + i * 0.3;
        Low[i] = 98.2 + i * 0.2;
    }

    double total = 0.0;
    // 遍历每组数据累加求和
    for (int i = 0; i < DATA_COUNT; ++i) {
        total += (High[i] + Low[i]);
    }
    double mean = total / DATA_COUNT;

    cout << "每组(High+Low)的均值: " << mean << endl;

    return 0;
}

关键实现步骤

  1. 明确数据范围:用常量DATA_COUNT定义数据数量(50),对应数组索引0到49(若需包含High[50]则改为51)。
  2. 数据收集:确保High和Low数组已正确填充价格数据(实际场景中可从行情接口、文件或数据库读取)。
  3. 累加求和:通过for循环遍历每个索引,累加对应位置的价格值。
  4. 计算均值:用总和除以数据数量得到最终均值。

内容的提问来源于stack exchange,提问作者Qan N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 07:03:30