有大神帮忙看看吗?一直提示 无法MA指标数据缓冲区,错误代码:4006

 
// 设置精度为2位小数
int precision = 2;
int old_digits = Digits();
// 获取当前本地时间
datetime currentTime = TimeLocal();
// 输出当前时间
Print("当前时间为:", TimeToString(currentTime));
// 定义要获取的历史数据范围
datetime fromTime = D'2020.01.01 00:00:00'; // 设置开始时间为 2022 年 1 月 1 日 0 点 0 分 0 秒
int barsToCopy = 1000; // 设置要复制的初步历史数据数目
int historyCount = 1000; // 设置要获取的历史数据数目
int startIndex = 0; // 初始化startIndex变量
// 第一次加载历史数据,复制初步历史数据
{MqlRates ratesBuffer[];
int copied = CopyRates(InpSymbol, PERIOD_M5, 0, historyCount, ratesBuffer);

if (copied <= 0) {
     // 获取失败的错误代码
    Print("copied 未获取到有效数据或复制数据失败,错误代码:",GetLastError());
    return;}
    if (copied > 0) {Print("copied的值为", copied);}
// 修改 fromTime 变量为第一个复制的柱的时间
fromTime = ratesBuffer[0].time;
// 设置 startIndex 来获取剩余的历史数据
int startIndex2 = iBarShift(InpSymbol, PERIOD_M5, fromTime, false);
if (startIndex2 <= 0){
    // 无法获取历史记录
    Print("无法获取历史记录,错误代码:", GetLastError());
    return;}
    if (startIndex2 > 0) {Print("startIndex2的值为", startIndex2,GetLastError());}  
// 复制历史数据
 MqlRates rates[1000];
int copied2 = CopyRates(InpSymbol, PERIOD_M5, 0, barsToCopy, rates);
if (copied2 <= 0) {
    Print("copied2未获取到有效数据或复制数据失败,错误代码为 ", GetLastError());
    return;}
// 打印 K 线数据
        for (int i = 0; i < copied2; i++) {
            Print("K线", i+1);
            Print("时间:", TimeToString(rates[i].time, TIME_DATE|TIME_MINUTES));
            Print("开盘价:", DoubleToString(rates[i].open, _Digits));
            Print("收盘价:", DoubleToString(rates[i].close, _Digits));
            Print("最高价:", DoubleToString(rates[i].high, _Digits));
            Print("最低价:", DoubleToString(rates[i].low, _Digits));
            Print(""); }      
// 复制MA指标的值到 maBuffer 数组中
if (ma_handle != INVALID_HANDLE) {
    IndicatorRelease(ma_handle);
    ma_handle = INVALID_HANDLE;}
    //重新创建ma_handle 指标句柄
    // 用当前历史数据计算 MA,并将结果存储到 MA 数组中
    ma_handle = iMA(InpSymbol, PERIOD_M5, 15, 0, MODE_LWMA, PRICE_HIGH);
    if (ma_handle == INVALID_HANDLE) {
    Print("无法复制计算MA指标的值,错误代码:", GetLastError());
    return;}
    if (ma_handle <= 0.000) {
    Print("复制计算MA指标值失败",GetLastError());}
    else {Print("复制计算MA指标值成功");
// 输出计算结果
Print("当前时间为:", TimeToString(TimeLocal()), ",当前 复制 MA 值为:", ma_handle);}
// 重新计算MA指标值并将结果存储到 MA 数组中
for (int i = 0; i < 1000; i++) {
        maBuffer[i] = rates[i].close;}
// 遍历 maBuffer 数组,并查找无效的 MA 值
for (int i = 0; i < ArraySize(maBuffer); i++) {
   if (!MathIsValidNumber(maBuffer[i])) {
      Print("maBuffer中包含无效的价格值: maBuffer[", i, "] = ", maBuffer[i], "错误代码为:", GetLastError());
      return;}}         
// 检查MA的值数组长度是否足够
if (ArraySize(maBuffer) < barsToCopy) {
   Print("复制 MA 数组长度不足,错误代码:",GetLastError());
   return;}
// 设置MA指标数据缓冲区
if (!SetIndexBuffer(0, maBuffer, INDICATOR_DATA)) {
// 输出复制数组数量大小
Print("复制数组数量大小:", copied);
// 输出获取的历史数据k线路数量大小
Print("获取的历史数据k线路数量大小:",startIndex2);
   // 输出缓存区大小
Print("缓存区大小:", ArraySize(maBuffer));
// 输出计算结果
Print("MA计算结果:", ma_handle);
// 输出maBuffer中的数据长度
Print("maBuffer数据长度:", ArraySize(maBuffer));
// 检查是否能够设置指标缓存区
   Print("无法MA指标数据缓冲区,错误代码:", GetLastError());
   return;}
// 将 MA 缓存区中的数据复制到输出缓存区中
int maResult = CopyBuffer(ma_handle, 0, startIndex2-1, copied, maBuffer);
if (maResult == 0) {
    Print("输出缓存数组长度不足,应该增加输出缓存数组大小或减小参数值,错误代码:", GetLastError());
    return;}
if (maResult < 0) { // 返回值小于0则表示其他错误
Print("复制 MA 指标数组失败,错误代码:",GetLastError());

Print("CopyBuffer() 函数执行出错,错误代码为:", GetLastError(),", ","maResult的值:",maResult);}

if ( ERR_HISTORY_TIMEOUT) { Print("检查传递给 CopyBuffer() 函数的时间范围是否正确",GetLastError());
    return;}