Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 440
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте! 2015.09.17_19:07 GMT+3. Я задал в программе советника размеры динамических массивов. А компилятор выдаёт ошибки: "ожидается запятая". А если в тексте программы встречается переменная, -- выдаёт предупреждения: "переменная такая-то скрывает объявление переменной на глобальном уровне". Не понимаю. Вроде всё правильно, как в справке. Прилагаю фрагменты кода:
//--- массив максимальных цен баров
bool ArraySetAsSeries(double &High[],bool);
//---
bool ArraySetAsSeries(double &Low[],bool);
//--- устанавливаю размеры массивов с запасом (reserve)
int ArrayResize(double &mrate[],int 16,int 9);
int ArrayResize(double &maVal[],int 16,int 9);
int ArrayResize(double &fVal[],int 3,int 2);
int ArrayResize(double &zVal[],int 3,int 0);
int ArrayResize(double &High[],int 1,int 0);
int ArrayResize(double &Low[],int 1,int 0);
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Здравствуйте! 2015.09.17_19:07 GMT+3. Я задал в программе советника размеры динамических массивов. А компилятор выдаёт ошибки: "ожидается запятая". А если в тексте программы встречается
Если Вы имеет в виду мой код - тогда да, мой код - это проверка на новый бар.
Мне интересен тот код, который я приложил - хочу понять, что он делает.
Код, который Вы привели ничего не делает, точнее он не работает. Ошибка:
Это условие сработает только один раз - при первом запуске программы. В этот момент статическая переменная будет проинициализирована.
Условие ниже вообще бессмысленно проверять, так как в Вашем коде переменная TimeN будет равна вечному нулю (точнее это будет дата 1 января 1970 года) и этот вечный ноль предлагается сравнивать с переменной TimeC, которая равна времени открытия текущего бара):
Код, который Вы привели ничего не делает, точнее он не работает. Ошибка:
Это условие сработает только один раз - при первом запуске программы. В этот момент статическая переменная будет проинициализирована.
Условие ниже вообще бессмысленно проверять, так как в Вашем коде переменная TimeN будет равна вечному нулю (точнее это будет дата 1 января 1970 года) и этот вечный ноль предлагается сравнивать с переменной TimeC, которая равна времени открытия текущего бара):
Вот теперь и думаю, а зачем это нужно было писать... в советник.
Спасибо за разъяснения!
Если новый бар на таймфрейме М1, то печатаем сообщение:
Оказалось, что я не полный код привел, правильно было так
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
Оказалось, что я не полный код привел, правильно было так
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
Вот рабочий код:
А Вы пробовали компилировать-то этот код? Здесь ошибка: в OnInit() объявляется переменная TimeN и при выходе из OnInit() данная переменная будет уничтожена. Поэтому в функции OnTick() возникает ошибка
Вот рабочий код:
Это я не верно написал static datetime TimeN=0; в зоне до int OnInit() - там где объявляются внешние и другие переменные.