[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 556

 
orb:

ПОМОГИТЕ!!!

https://www.mql5.com/ru/forum/137960


Лучше оно конечно перейти к чтению/записи массива

1. Не стоит на каждой итерации менять размер массива на 1, лучше делать по реже, например увеличивать с шагом 50 или 100, при необходимости

2. Для контрольной печати лучше использовать DoubleToStr()

3. Не понял, зачем используется для чтения строковая переменная

 
Vinin:


Лучше оно конечно перейти к чтению/записи массива

1. Не стоит на каждой итерации менять размер массива на 1, лучше делать по реже, например увеличивать с шагом 50 или 100, при необходимости

2. Для контрольной печати лучше использовать DoubleToStr()

3. Не понял, зачем используется для чтения строковая переменная

1. иначе не работает. нулевые строки записывает, вроде как для 4 столбцов надо каждый раз обновлять

2. ок

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

 
orb:

1. иначе не работает. нулевые строки записывает, вроде как для 4 столбцов надо каждый раз обновлять

2. ок

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


С таким подходом будут большие тормоза.
 
Vinin:

С таким подходом будут большие тормоза.

понял, мне пока что легче так писать.

подскажите как избавиться от того, чтобы while еще один раз выполняется?

 
orb:

понял, мне пока что легче так писать.

подскажите как избавиться от того, чтобы while еще один раз выполняется?



Я не смог от этого избавиться. Но строковые переменные не использовал
 
Понял. А можно, тогда ArrayResize(); применить меньше чем счетчик цикла, он удалит эту строку из массива?
 
orb:
Понял. А можно, тогда ArrayResize(); применить меньше чем счетчик цикла, он удалит эту строку из массива?

Да, удалит.

Чем реже используешь эту функцию, тем быстрее работает. Зарезервил 100 элементов и считываешь контролируя выход за пределы массива. При необходимости снова увеличиваешь массив на 100 элементов. При этом сохраняешь фактически скачанное количество элементов. После полного скачивания массива делаешь новый ArrayResize() но уже по фактически количеству скачанных элементов.

Но функции для работы с массивами работают корректнее. Вначале сохранить количество элементов массива в файл, потом сам массив

Считать вначале количество элементов, установить размер массива. Скачать массив. И никаких циклов

 
Vinin:

Да, удалит.

Чем реже используешь эту функцию, тем быстрее работает. Зарезервил 100 элементов и считываешь контролируя выход за пределы массива. При необходимости снова увеличиваешь массив на 100 элементов. При этом сохраняешь фактически скачанное количество элементов. После полного скачивания массива делаешь новый ArrayResize() но уже по фактически количеству скачанных элементов.

Но функции для работы с массивами работают корректнее. Вначале сохранить количество элементов массива в файл, потом сам массив

Считать вначале количество элементов, установить размер массива. Скачать массив. И никаких циклов

спасибо! учту на будущее.
 

Подскажите как правильно решить проблему:

есть проекция уровней Поддержки\Сопротивления старшего ТФ на текущий ТФ. Требуется определить какой из уровней цена протестировала последним. Я попытался это сделать через флаги:

int start()
{ 
      int limit;
      int counted_bars=IndicatorCounted();
      if(counted_bars>0) counted_bars--;

      limit=Bars-counted_bars;
      if(limit>barsToProcess)
         limit=barsToProcess;

     for(int i=0;i<limit;i++)

{
 
  bool flag_R[], flag_S[], S[];

   double Level_Re = iCustom(NULL,0,"........",0,i); // для каждого бара получаем значения со старшего ТФ
   double Level_Su = iCustom(NULL,0,"........",1,i); // для каждого бара получаем значения со старшего ТФ

{
   if (iHigh(Symbol(),0,i)>=Level_Re)              // проверяем тестирование ценой уровня Re
   {flag_R[i]=true; flag_S[i]=false; S[i]=true;}   // выставляем флаги
   
   if (iLow(Symbol(),0,i)<=Level_Su)               // проверяем тестирование ценой уровня Su
   {flag_R[i]=false; flag_S[i]=true; S[i]=true;}   // выставляем флаги


   if (S[i]==false) {flag_R[i]=flag_R[i+1]; flag_S[i]=flag_S[i+1];} // если тестирования не было - берем предыдущее значение

   if (flag_R[0]==true) Print("Re zone tested"); if (flag_S[0]==true) Print("Su zone tested");
   
}
}

return(0);
}

но в журнале ничего не пишется.... [если подставить, к примеру, Print(Level_Re), то пробежав по всему массиву, запись в журнале остановится на значении уровня для последнего бара, т.е. сами уровни рассчитываются корректно, но с флагами мне что-то не идет.... ]

В чем ошибка? Или как лучше сделать?

 
alkador:

to T-G

попробуй вот так:

datetime expiration=TimeCurrent()+MaxSecLiveTime;

OrderSend(Symbol(), OP_BUYSTOP, Lots(), PriceBuy, 0, 0, 0, EA_Comment, Magic, expiration, CLR_NONE);


а в чем разница с:

extern int MaxSecLiveTime = 120;
OrderSend(Symbol(), OP_BUYSTOP, Lots(), PriceBuy, 0, 0, 0, EA_Comment, Magic, TimeCurrent()+MaxSecLiveTime, CLR_NONE);
Причина обращения: