неправильные значения пользовательского индикатора в функции iCustom MQL5

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ioann Will
15
Ioann Will  

добрый день. пытаюсь получить данные пользовательского индикатора (код индикатора у меня отсутствует). Этот индикатор отображает в отдельном окне простую гистограмму с одним положительным или отрицательным значением в диапазоне -2000:2000 (одно значение на 1 бар, последний бар перерисовывается на каждом тике). Ниже привожу код соответствующего скрипта. Для примера в коде взяты 2 стандартных индикатора (стохастик и вильямс). данные со стандартных индикаторов записываются в файл корректно, но данные с пользовательского индикатора записываются как 0 или как ооооочень большое положительное или отрицательное число. Помогите понять в чем баг и как мне решить эту проблему


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+

// Export Indicator values
extern string IndExportFileName = "mt5export.csv";
extern int  trainSize = 200;

MqlRates srcArr[];
double StochKArr[], StochDArr[], WilliamsRArr[], CustomIndicatorArr[];


void OnStart()
  {
//---
   ArraySetAsSeries(srcArr, true);   
   ArraySetAsSeries(StochKArr, true);   
   ArraySetAsSeries(StochDArr, true);   
   ArraySetAsSeries(WilliamsRArr, true);
   ArraySetAsSeries(CustomIndicatorArr, true);
         
   int copied = CopyRates(Symbol(), Period(), 0, trainSize, srcArr);
   
   if (copied!=trainSize) { Print("Not enough data for " + Symbol()); return; }
   
   int hStochastic = iStochastic(Symbol(), Period(), 8, 5, 5, MODE_EMA, STO_LOWHIGH);
   int hWilliamsR = iWPR(Symbol(), Period(), 21);
   int hCustomIndicator = iCustom(Symbol(),Period(),"CustomIndicatorName");
   
   if(hCustomIndicator ==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code
      PrintFormat("Failed to create handle of the iCustom indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early
     }
   
   CopyBuffer(hStochastic, 0, 0, trainSize, StochKArr);
   CopyBuffer(hStochastic, 1, 0, trainSize, StochDArr);
   CopyBuffer(hWilliamsR, 0, 0, trainSize, WilliamsRArr);
   CopyBuffer(hCustomIndicator, 0, 0, trainSize, CustomIndicatorArr);
  
   int hFile = FileOpen(IndExportFileName, FILE_CSV | FILE_ANSI | FILE_WRITE | FILE_REWRITE, ",", CP_ACP);
   
   FileWriteString(hFile, "DATE,TIME,CLOSE,StochK,StochD,Williams,CustomIndicator\n");
   
   Print("Exporting indicator data to " + IndExportFileName);
   
   for (int i=trainSize-1; i>=0; i--)
      {
         string candleDate = TimeToString(srcArr[i].time, TIME_DATE);
         //StringReplace(candleDate,".","");
         string candleTime = TimeToString(srcArr[i].time, TIME_MINUTES);
         //StringReplace(candleTime,":","");
         FileWrite(hFile, candleDate, candleTime, DoubleToString(srcArr[i].close), 
                                                  DoubleToString(StochKArr[i], -10),
                                                  DoubleToString(StochDArr[i], -10),
                                                  DoubleToString(WilliamsRArr[i], 10),
                                                  DoubleToString(CustomIndicatorArr[i], 10)
                                                  );
      }
      
   FileClose(hFile);   
     
   Print("Indicator data exported."); 
  }
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий