Прошу помочь, подправить код советника, возникает две ошибки при компиляции после добавления #property strict.
bool MASignal( int op, int bar ) { if( op == OP_BUY ) if( MAFast(bar) > MASlow(bar) ) { for( int i = bar+1 ; i <= BarsMASaveSignal+1 ; i++ ) if( MAFast(i) <= MASlow(i) ) return(true); } if( op == OP_SELL ) if( MAFast(bar) < MASlow(bar) ) { for( i = bar+1 ; i <= BarsMASaveSignal+1 ; i++ ) if( MAFast(i) >= MASlow(i) ) return(true); } return(false); }
"i"-undeclared identifier ошибка
Два замечания:
1. Код должен быть вставлен так...
2. При использовании #property strict доступность переменных изменяется. Поэтому целесобразней переменную i объявить до циклов.
bool MASignal( int op, int bar ) { int i = 0; if( op == OP_BUY ) if( MAFast(bar) > MASlow(bar) ) { for( i = bar+1 ; i <= BarsMASaveSignal+1 ; i++ ) if( MAFast(i) <= MASlow(i) ) return(true); } if( op == OP_SELL ) if( MAFast(bar) < MASlow(bar) ) { for( i = bar+1 ; i <= BarsMASaveSignal+1 ; i++ ) if( MAFast(i) >= MASlow(i) ) return(true); } return(false); }
Топикстартеру. Разберитесь с примером, который вам дал Алексей Викторов. И никогда так не делайте. ))
вот так, для каждого цикла свой int:
for(int i = bar+1 ; i <= BarsMASaveSignal+1 ; i++ )
вот так, для каждого цикла свой int:
И если во втором цикле использовать ту-же переменную i как в коде Kirill Voytseshchuk то повторное int вызовет ошибку 'i' - variable already defined - переменная уже определена. В таком случае надо использовать разные переменные, или так как предложил я. И ничего страшного в этом нет т.к. в любом цикле стартовое значение счётчика цикла задаётся и предыдущее значение этой переменной никак не повлияет на выполнение программы. Другое дело вложенные циклы, но разговор не о них.
Топикстартеру. Разберитесь с тем, что вам посоветовал Алексей Викторов. И никогда так не делайте. ))
Нет. Это тогда получается и совет не применять кнопку SRC при вставке кода.
Да и если добавить обнуление i после первого цикла, т.е., перед вторым циклом, то не вижу страшного, хотя сама предпочитаю в основном for(int i...).
А вот то, что в:
for(int i = bar+1 ; i <= BarsMASaveSignal+1 ; i++ )
стоит знак <= (меньше или равно), тут могут быть возможны выходы сообщения array of range.
Т.е., знак < (меньше) - да, а = (равно) - лишнее.
И если во втором цикле использовать ту-же переменную i как в коде Kirill Voytseshchuk то повторное int вызовет ошибку 'i' - variable already defined - переменная уже определена.
Нет. Это было давным-давно, до апгрейда языка, когда он никаким стандартам не соответствовал. Сейчас это всё приведено в порядок.
Без применения #property strict - возможно сообщение variable already defined (переменная определена).
P./S.: Уф... а тут "заглючила". Сообщение variable already defined (переменная определена) - это наоборот возможно при применении #property strict. Правку об этом вношу без привязки к коду в теме.
Sorry.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Прошу помочь, подправить код советника, возникает две ошибки при компиляции после добавления #property strict.
bool MASignal( int op, int bar )
{
if( op == OP_BUY ) if( MAFast(bar) > MASlow(bar) )
{
for( int i = bar+1 ; i <= BarsMASaveSignal+1 ; i++ )
if( MAFast(i) <= MASlow(i) )
return(true);
}
if( op == OP_SELL ) if( MAFast(bar) < MASlow(bar) )
{
for( i = bar+1 ; i <= BarsMASaveSignal+1 ; i++ )
if( MAFast(i) >= MASlow(i) )
return(true);
}
return(false);
}
"i"-undeclared identifier ошибка