Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 635

 
Top2n:

Эта функция возвращает кол-во ячеек массива, а не заполненных ячеек.

Только цикл Вам поможет. Перебирать и считать
 

 Подскажите новичку, плиз!

Задача у меня такая: из эксперта создать подокно (подокна) в окне графика, к которому он прикреплен.

Вроде все перерыл, но так и не нашел как это можно сделать. Можно создавать/редактировать объекты

в уже созданных другими индикаторами подокнах, но того что мне нужно нету... 

Как выйти из ситуации? 

 
boroda4:

 Подскажите новичку, плиз!

Задача у меня такая: из эксперта создать подокно (подокна) в окне графика, к которому он прикреплен.

Вроде все перерыл, но так и не нашел как это можно сделать. Можно создавать/редактировать объекты

в уже созданных другими индикаторами подокнах, но того что мне нужно нету... 

Как выйти из ситуации? 


Посмотрите статью, может что  и найдете
 
Vinin:

Только цикл Вам поможет. Перебирать и считать

Подскажите, как посчитать количество заполненных ячеек в массиве?

Массив содержит цены трендовых линии, относительно текущего бара.

 sch=ObjectsTotal(OBJ_TREND);//количество трендовы линий
for(int s=0;s<sch;s++) 
 {
 
// ArraySort(masS,WHOLE_ARRAY,0,MODE_DESCEND);
// ArraySort(masB,WHOLE_ARRAY,0,MODE_DESCEND);
  
   DWnem=ObjectName(s); //Текущее имя объекта
   DW="downtrendline"+IntegerToString(s);//Для фильтрации запроса
   DW2="uptrendline"+IntegerToString(s);//
  if(DWnem="")//если объекта уже нет, то обнуляем ячейку массива
   {
   masS[s]=0;
   masB[s]=0;
   }
 if(DWnem=DW)//если имя совпадает с фильтром, то запоминаем в массив
{
  if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod) { 
   masS[s]=ObjectGetValueByShift(DWnem,1);}
  if(ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro) { 
   masS[s]=ObjectGetValueByShift(DWnem,1);}
  if(ObjectGet(DWnem,OBJPROP_COLOR)==White) { 
   masS[s]=ObjectGetValueByShift(DWnem,1);}
}   
for(int a=0;a<20;a++)// ну а тут счетчик, чтоб посчитать сколько ячеек записано в масив { if(mas[a]>0) sch++; } Как остановить счетчик?

А то он продолжает и продолжает накручивать.

Хоть убей не могу сообразить и все ,помогите пожалуйста!!!

 

Подскажите пожалуйста, как получить в Терминале сигнал об окончании работы ТерминалТестера?

int start()
   {
    //---------------------------------- Из Терминала запустим ТерминалТестер -------------------------
    Start   = ShellExecuteW(0, "Open", "terminal.exe", "D:\\Alpari_Terminal_Tester\\tester\\optimise.ini", "D:\\Alpari_Terminal_Tester", 3);
    while(STOP)
        {
         //------ Функция запроса проверки состояния ТерминалТестера ------
         // STOP=?????????????????????????????????????????????????;
         Sleep(1000);
        }
    return(0);
   }
 
Top2n:

Подскажите, как посчитать количество заполненных ячеек в массиве?

Массив содержит цены трендовых линии, относительно текущего бара.

А то он продолжает и продолжает накручивать.

Хоть убей не могу сообразить и все ,помогите пожалуйста!!!

Попробуйте так:

int limit = ...; //до какого числа нужно
MathMin(sch++,limit); //если это будет работать, не пробовал

 Может, получится. Удачи!

 
Top2n:

Подскажите, как посчитать количество заполненных ячеек в массиве?

Массив содержит цены трендовых линии, относительно текущего бара.

А то он продолжает и продолжает накручивать.

Хоть убей не могу сообразить и все ,помогите пожалуйста!!!


Наверное, занулить счётчик вовремя надо, чтобы не накручивал больше, а заново с нуля считал?

Километровые функции - это нехорошо, законченные куски действий лучше выносить в отдельные функции, даже если некоторые из них вызываются всего один раз. А из основной функции вызывать эти отдельные.

Такой подсчёт пойдёт?

#property strict

/******************************************************************************/
uint getFilledCellsNumber(double &array[]) { // Массив принимается по ссылке, то есть, НЕ копируется
  uint cnt = 0;

  for (int i = 0, limit = ArraySize(array); i < limit; i++) {
    if (array[i] > 0) {
      cnt++;
    }
  }

  return cnt;
}

/******************************************************************************/
void OnStart() {
  double a[] = {0, 1.2, 1.3, 0, 1.1};
  uint filledCellsNumber = getFilledCellsNumber(a); // Массив передаётся по ссылке, то есть, НЕ копируется

  Print("Number of filled cells: ", filledCellsNumber);
}

При запуске получается следующее:

00:24:46 Script 1 EURUSDm,H1: loaded successfully
00:24:46 1 EURUSDm,H1: initialized
00:24:46 1 EURUSDm,H1: Number of filled cells: 3
00:24:46 1 EURUSDm,H1: uninit reason 0
00:24:46 Script 1 EURUSDm,H1: removed

Вроде, правильно считает.

 

Здравствуйте.

При компиляции написанной в 2012 году программы появляется предупреждение:

possible loss of data due to type conversion FinBuy1531.mq4 144 7

Что оно означает и как избежать его появления?

P.S. В тестере программа исполняется нормально.

 
simpleton:

Наверное, занулить счётчик вовремя надо, чтобы не накручивал больше, а заново с нуля считал?

Километровые функции - это нехорошо, законченные куски действий лучше выносить в отдельные функции, даже если некоторые из них вызываются всего один раз. А из основной функции вызывать эти отдельные.

Такой подсчёт пойдёт?

При запуске получается следующее:

Вроде, правильно считает.


ООО спасибо вам большое!!!))) Вообще классно работает.

 Благодарю всех за помощь!) 

 
Shurkin:

Здравствуйте.

При компиляции написанной в 2012 году программы появляется предупреждение:

possible loss of data due to type conversion FinBuy1531.mq4 144 7

Что оно означает и как избежать его появления?

P.S. В тестере программа исполняется нормально.

Нужно в коде правильно провести Приведение типов.
Причина обращения: