Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 86

 
fyords:
Выведите через print результаты ObjectCreate, может там ошибка.

Спасибо. Обязательно проверю, но после устранения новой проблемы. Эксперт работал какое-то время и сейчас был автоматически удален с графика. Повторно поставить его не получается, пишет что массив переполнен.

void CreateLevels()
   {
      double High[];
      ArrayResize(High,0);
      ArraySetAsSeries(High,true);
      CopyHigh(_Symbol,_Period,0,Candle,High);

      for(int j=Nachalo;j<=Candle;j++)
         {
          //--- поиск макс -----------------------------------
          if(iHighest(Symbol(),0,10,MN*2,j-MN)==j)
            {
             double H=High[j];
            }
int iHighest(string symbol,int tf,int type,int count,int start)
  {
   if(start<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(count<=0) count=Bars(symbol,timeframe);
   if(type==10)                                 // MODE_HIGH
     {
      double High[];
      ArraySetAsSeries(High,true);
      CopyHigh(symbol,timeframe,start,count,High);
      return(ArrayMaximum(High,0,count)+start);
     }
   return(0);
  }

Candle=1000. Компилятор нигде не ругается, в отладчике ничего не возникает. Пожалуйста, подскажите решение проблемы

 
Следующий билд будет очень редко запрашивать сигналы, если ими не пользоваться.

Это уже поправили.
 
Renat:
Следующий билд будет очень редко запрашивать сигналы, если ими не пользоваться.

Это уже поправили.
Я так понимаю этот ответ не для меня
 
Теперь при попытке установить эксперт на график возникает техническая ошибка. Куда детали ошибки отправлять?
 
WindSW:

А почему ArrayResize=0?

И перед ним вроде ArrayInitialize добавить надо.

И

double H

в цикле каждый раз инициализируется что ли?

Объявите его перед функцией.

Upd и скобки перепроверьте, недосчитался одной } в

CreateLevels
 
Silent:

А почему ArrayResize=0?

Обнуляю массив High[]
 
WindSW:
Обнуляю массив High[]
Нет, вы его размер в 0 ставите.
 
Silent:
Нет, вы его размер в 0 ставите.
А разме при размере 0 информация остается? Как правильно выполняется обнуление?
 
WindSW:
А разме при размере 0 информация остается? Как правильно выполняется обнуление?

Вы размер в ноль ставите, а потом туда копируете массив.

Так попробуйте

void CreateLevels()
  {
   double High[];
   ArrayResize(High,Candle); // размер = Candle
   ArrayInitialize(High,NULL); // инициализация нулем
   ArraySetAsSeries(High,true);
   CopyHigh(_Symbol,_Period,0,Candle,High);

   double H; // вынес
   int j;    // вынес
   for(j=Nachalo;j<=Candle;j++)
     {
      //--- поиск макс -----------------------------------
      if(iHighest(Symbol(),0,10,MN*2,j-MN)==j)
        {
         H=High[j];
        }
     }
  } // скобки сразу парами ставьте, искать не прийдётся
Upd поправил код, еще int j вынес
 
WindSW:
А разме при размере 0 информация остается?

А, если убить, то можно, наверно, ArrayResize два раза вызвать, с 0, потом с нужным размером массива.

Может даже быстрее будет... хотя хз, как это с перераспределением памяти будет выглядеть.

Причина обращения: