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

 
Всем спсибо за ответы, я примерно так и думал. Но тут вот какая проблема нарисовалась, дело в том что каждый день у меня начало графика пропадает, на минутках это примерно месяца два три, так вод каждый день происходит срезание графика на день, соотвесвтенно индикаторы начинают считать каждый день с разого места, отчего меняются их показания и вообще не возможно работать, как увеличить историю, и чтобы в начале графика ничего не пропадало... а то с утра открываю МТ и у меня все сигналы переблись, потому что индикаторы начали считаться с другого места????
 
nikelodeon: каждый день у меня начало графика пропадает,

Сервис -> Настройки -> Графики  Макс баров истории  и  Макс баров в окне  

Теперь скорость. Большинство индикаторов на каждом тике обрабатывают лишь один, последний бар. Или 2 при появлении нового бара. Но есть индикаторы, которые или по ошибке программирования или по специфическому алгоритму на каждом тике пересчитывают много или даже все бары. Во-первых, надо их выявить. Это можно сделать с помощью диспетчера задач, определив нагрузку на процессор. Или, что точнее, вставить в индикатор что-то вроде

  if(XXX>1)Alert("Пересчитываем=",XXX,"   Bars=",Bars);
где XXX - количество пересчитывемых баров. При запуске будет много, затем на каждый новый бар 2

Вряд ли индикатор должен пересчитывать все бары. Надо проверить 1) что возвращает индикатор оператором return  2) количество пересчитываемых баров в коде индикатора. 3) Макс баров в окне  4) индикаторы, вызываемые функцией iCustom, не обязаны находиться на графике. Иначе получается дублирование и увеличение нагрузки на процессор.

Для повышения грамотности текст набираю в Word и копирую через буфер обмена. А то 4 синтаксические и 1 запятая...

     

 

Доброго времени суток, коллеги!

Подскажите в чём проблема в этом кусочке кода: 

   int TF[6]={1,5,15,30,60,240};
   for(int TF=0;TF<6;TF++)
      for(int i=iBars(NULL,TF[TF]);i>=0;)
Компилятор выдаёт это:
'[' - array required        20      30
В справке и учебнике ничего не сказано о использовании массивов в таймсериях, можно ли исправить проблему? Как по другому можно сделать перебор всех свечей на нескольких ТФ?
Спасибо большое!
 
Ekburg: Подскажите в чём проблема в этом кусочке кода: 
 int TF[6]={1,5,15,30,60,240};
   for(int TF=0;TF<6;TF++)       TF[TF] ???????

TF - описан как массив из 6 элементов. т.е. есть: TF[0]=1, TF[1]=5, TF[2]=15, TF[3]=30 TF[4]=60 TF[5]=240
Обращение к TF без квадратных скобок, т.е. без указания индекса - бессмысленно. Какой элемент массива использовать?
Предполагаю, что можно что-то вроде                       for(int NTF=0;NTF<6;NTF++)            for(int i=iBars(NULL,TF[NTF]);i>=0;)
 
Ekburg:

Доброго времени суток, коллеги!

Подскажите в чём проблема в этом кусочке кода: 

int TF[6]={1,5,15,30,60,240};
for(int i=0; i<6; i++) int b=iBars(NULL,TF[i]);
 
LRA:
TF - описан как массив из 6 элементов. т.е. есть: TF[0]=1, TF[1]=5, TF[2]=15, TF[3]=30 TF[4]=60 TF[5]=240
Обращение к TF без квадратных скобок, т.е. без указания индекса - бессмысленно. Какой элемент массива использовать?
Предполагаю, что можно что-то вроде                       for(int NTF=0;NTF<6;NTF++)            for(int i=iBars(NULL,TF[NTF]);i>=0;)
artmedia70:

Спасибо, ребят)

То есть, то, что в первом операторе for(int TF=0;TF<6;TF++) я задал переменную TF, то компилятор путает его с массивом?

 
Ekburg переменную TF  компилятор путает с массивом?

Дело хуже... Дважды объявляется TF  1) как массив  2) как целая переменная. Второе объявление закрывает (делает невидимым, почти уничтожает) первое.

Компилятор выдает сначала предупреждение: declaration of 'TF' hides local declaration ...  Второе объявление TF скрывает предыдущее. Теперь TF уже не массив, а целая переменная. Поэтому последующее применение TF[] требует наличия массива, который уже скрыт, и ошибка: '[' - array required   Требуется массив.

 
LRA:

Дело хуже... Дважды объявляется TF  1) как массив  2) как целая переменная. Второе объявление закрывает (делает невидимым, почти уничтожает) первое.

Компилятор выдает сначала предупреждение: declaration of 'TF' hides local declaration ...  Второе объявление TF скрывает предыдущее. Теперь TF уже не массив, а целая переменная. Поэтому последующее применение TF[] требует наличия массива, который уже скрыт, и ошибка: '[' - array required   Требуется массив.



От оно что.. ясно, большое спасибо.

Всё поправил, ошибок больше не выдаёт (впрочем, меня смутил тот факт, когда я объявил вместо переменной TF переменную f, не было ошибок с использованием далее в коде TF[TF]),

но скрипт не открывается в терминале,  может дело в предупреждениях?

 

 
LRA:

Сервис -> Настройки -> Графики  Макс баров истории  и  Макс баров в окне  


Теперь скорость. Большинство индикаторов на каждом тике обрабатывают лишь один, последний бар. Или 2 при появлении нового бара. Но есть индикаторы, которые или по ошибке программирования или по специфическому алгоритму на каждом тике пересчитывают много или даже все бары. Во-первых, надо их выявить. Это можно сделать с помощью диспетчера задач, определив нагрузку на процессор. Или, что точнее, вставить в индикатор что-то вроде

Вряд ли индикатор должен пересчитывать все бары. Надо проверить 1) что возвращает индикатор оператором return  2) количество пересчитываемых баров в коде индикатора. 3) Макс баров в окне  4) индикаторы, вызываемые функцией iCustom, не обязаны находиться на графике. Иначе получается дублирование и увеличение нагрузки на процессор.

Для повышения грамотности текст набираю в Word и копирую через буфер обмена. А то 4 синтаксические и 1 запятая...

     


С ошибками это запросто. Спасибо за ответ, который ничем не помог. Так то я более чем просто юзер мкуль. Всё что Вы мне написали уже давно мною известно и опробовано, индикатор считается у меня один раз и то с приходом нового бара, считает он только один бар, я же выкладывал его там всё чётко видно. Максимальная история баров в окне у меня максимально. Я так думаю что может брокер моросит. Вот например сегодня, сохранил данные по золоту в ксв файл, но они почему то стали координально отличатся от файла, который я сохранял вчера. В течении дня вроде как всё гладко, но посмотрим что завтра будет...
 

Ekburg!!!  Все предупреждения надо устранить. Первое предупреждение означает, что оператор не имеет эффекта - отброшен компилятором - это плохо. Последнее предупреждение - размер локальной переменной (массив) превышает 512 кБ и потому его нет - это очень плохо. Остальные предупреждения - возможно использование неинициализированной переменной. Это как на карту деньги забыли положить, а пытаемся тратить. Надо проверить все ветви программы. Иногда компилятор перестраховывается. Тогда надо объявлять так: int x=0;  string y="";  bool z=false;