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; }
错误分析与正确实现
错误点梳理
- 变量声明非法:
double rb[],armean;这种数组声明方式不符合C++语法,必须指定数组大小或使用动态分配(如new)。 - 循环逻辑混乱:循环初始值
s=-1会导致数组越界访问;循环条件Close[s]<d与需求无关,迭代方式Close[s++]不符合循环自增的正确写法。 - 求和逻辑错误:
ArrayResize(rb,s)的使用时机完全错误,求和语句sum = Meansize+rb[s]没有实现累加效果。 - 均值计算逻辑错误:变量
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; }
关键实现步骤
- 明确数据范围:用常量
DATA_COUNT定义数据数量(50),对应数组索引0到49(若需包含High[50]则改为51)。 - 数据收集:确保
High和Low数组已正确填充价格数据(实际场景中可从行情接口、文件或数据库读取)。 - 累加求和:通过for循环遍历每个索引,累加对应位置的价格值。
- 计算均值:用总和除以数据数量得到最终均值。
内容的提问来源于stack exchange,提问作者Qan N
相关产品推荐
相关产品推荐

