[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 368

 

Добрый день.

Надо определить открытие нового бара. Вставил в свой советник в чистом виде функцию -пример из учебника по MQL

void Fun_New_Bar() // Ф-ия обнаружения нового бара
{
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
}
return(New_Bar);
}

Выдает единственную ошибку '(' - function definition unexpected - я это понимаю как неожидаемое определение функции.

Переменную "New_Time" определил еще до функции int как datetime New_Time;- без этого компиляция давала ошибку неопределенной переменной.

В основную программу функция вызывается так:

Fun_New_Bar(); // Обращение к ф-ии
if (New_Bar==false) // Если бар не новый..
return;

Кто скажет почему это все не работает?

И еще интересное наблюдение - исправишь что-то, копилируешь - нет замечаний, тут же включаешь повторную копиляцию - снова

'(' - function definition unexpected - это почему так. Неужели я так запутанно пишу что компилятор с первого раза не может меня понять?

 
keekkenen >>:
бывает, иногда принтуешь кривые места, и видишь 0.0000 = 0 и это не работает - false, нормализуйте значения на всякий случай..

Добавил новое условие, дублирующее проблемное и проблема решилась.

Спасибо!


PS Хорошо что в моем случае ошибка с ордерами сообщила о проблеме - в других может быть полностью нарушена логика работы Советника,

безо всяких сообщений, и узнать об этом будет невозможнo :(((

 

функция объявлена как void, т.е. ничего не возвращает, а в коде написано return(New_Bar); из-за этого и ошибка..

нужно ее объявить в соответствии с возвращаемым типом переменной - bool Fun_New_Bar()

ну и использовать соответственно, if ( !Fun_New_Bar() ) return(0);

 
keekkenen писал(а) >>

функция объявлена как void, т.е. ничего не возвращает, а в коде написано return(New_Bar); из-за этого и ошибка..

нужно ее объявить в соответствии с возвращаемым типом переменной - bool Fun_New_Bar()

ну и использовать соответственно, if ( !Fun_New_Bar() ) return(0);

В первом варианте у меня именно так и было "bool Fun_New_Bar()" но ошибка была та же, поэтому обозвал функцию как в учебнике - void ни чего не изменилось. Сейчас сделал по Вашей подсказке - то же никаких изменений - ошибка та же

Правда изменения появилось - ошибка стала числиться на строке 279 (это строка коментария), а функция начинается с 280

Попутный вопрос насколько допустимо функцию int() грузить каким-нибудь блоком разового анализа- к примеру определение значений двух последних разворотов на индикаторе.

У меня так сделано. Может из-за этого клинит советник?

 

function definition unexpected - скорее всего не хватает или лишняя скобка в коде ДО функции Fun_New_Bar,

внимательно просмотрите код наверняка найдете в чем дело ..

 
keekkenen писал(а) >>

function definition unexpected - скорее всего не хватает или лишняя скобка в коде ДО функции Fun_New_Bar,

внимательно просмотрите код наверняка найдете в чем дело ..

Сейчас поищу. Попутно попробую эту функцию втиснуть туда, откуда ее вызываю. Уже две функции с такой ошибкой после переноса в место вызова копмилировались без ошибок. При чем если "ошибочную" ф-ю переносишь в место вызова, эта же ошибка переходила к другой ф-ии необязательно следующей по порядку.

 
alsu >>:

1. Поставьте себе QIPInfium, если вы еще этого не сделали

2. Зарегайте для терминала отдельный ICQ-аккаунт

3. Установите и настройте плагин MsgBox - подробная инструкция

4. Из эксперта (индикатора, скрипта), который должен выдавать сигналы, записывайте в папку OutBox файлы с нужными сообщениями так, как это объяснено в инструкции по ссылке выше. Для записи в файл за пределами директории терминала можно, например, использовать библиотеку ZI_File_Functions_Full_Lib


Вот так, владея гуглом и творческими способностями, можно в четыре этапа с минимумом программирования забабасить что угодно:))))

Спасибо, всё работает :)

 

При запуске советника в демо режиме постоянно выскакивает окно подтверждения ордера, как при ручной торговле. В опциях эта функция отменена, но всё равно где-то зацепилась.

Если ли какая-то возможность отменить выскакивание подтверждения?

 
Andrei01 >>:

При запуске советника в демо режиме постоянно выскакивает окно подтверждения ордера, как при ручной торговле. В опциях эта функция отменена, но всё равно где-то зацепилась.

Если ли какая-то возможность отменить выскакивание подтверждения?


настройки_Мт сервис-настройки-советники


настройки_эксперта

 

спасибо. именно это и не работает так как где-то прописывается в профиле и это невозможно было отменить. проблема решилась с созданием профиля заново.

Причина обращения: