Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
2. да, практически на место #include вставляется другой файл со всеми вытекающими последствиями
Похоже, Вам следует прочитать простейшую книжку по языку С - сразу отпадет множество вопросов.
2. В инструкции к #include <имя_файла> написано, что "Препроцессор заменяет эту строку содержимым файла".
Следует ли понимать "заменяет" буквально? Т.е. значит ли это, что созданный таким образом эксперт будет идентичен такому эксперту, в кот. вместо #include <имя_файла> непосредственно содержится собственно код этого файла?
-Если да, то к какой из спец. ф-ий будет относиться эта чать кода эксперта?
-Если нет, то как понимать "заменяет"?
-Может ли подключённый таким способом файл содержать торговые ф-ии?
-Каковы другие ограничения и особенности?
(если на какие-либо мои вопросы есть подробные инструкции на сайте или в helpе, можно просто указать ссылку)
Да, считай вместо #include вставляется весь кусок кода, но при этом не используемые функции компилятор удаляет из исполняемого файла и сообщает об этом.
Можно втыкать любую функцию , в том числе и предопределеные(init, deinit, start), но при этом за конфликт между переменными/функицями в инклюде и теле советника отвечаешь сам (то есть, будь готов к этому).
Содержать торговые функции я думаю можно, сам не делал, но знакомый вроде ставил.
Можно узнать поподробнее, чем это чревато? На сегодняшний день я не знаю других способов запускать эксперт не дожидаясь тика. Эксперт ведь может выполнять не только торговые функции, а любую другую работу, играя роль скрипта, постоянно прицепленного к графику. Если задать бесконечный цикл с паузой в несколько секунд и проверкой IsStopped(), а перед использованием котировок вызывать RefreshRates(), то вроде как должно нормально работать. Какие еще могут быть подводные камни?
PS Тот же пресловутый Period_Converter.mq4, если им пользоваться постоянно, гораздо удобнее иметь как эксперт с бесконечным циклом
я исхожу пока из простой логики:
init - для подготовительных операций при запуске
start - для работы с тиками
deinit - для разовых операций при выходе.
Не представляю какие ещё могут быть варианты. Таким образом, всё написанное должно быть в составе этих спец функций.
Но #include <пример.mq4> находится за пределами этих ф-ий. Вот я и спрашиваю..
Как пример.mq4 будет исполняться?(при запуске, при выгрузке, потиково или как-то ещё)
Кроме того, пример.mq4 и сам тоже может содежать init, deinit, start. Получается, что в эксперте может быть 2 и более ф-ий start и др. (может это и нормально, но я хотел бы удостовериться, что это так или не так)
Книжку по С почитать не мешало бы, но в С нету тиков, вот беда. И даже если в С так написано, то это же не будет означать, что в MQL так же..
---------------------------------------
Rosh, спасибо за участие.
То, о чём ты пишешь, указано и в текстах MetaQuotes. Я пытаюсь выяснить то, чего в этих текстах нет.
А какой может быть конфликт?
Rosh, спасибо за участие.
То, о чём ты пишешь, указано и в текстах MetaQuotes. Я пытаюсь выяснить то, чего в этих текстах нет.
А какой может быть конфликт?
Конфликт - два init или два deinit или объявление в двух местах одной и той же переменной, как ты сам и написал.
а два start можно? Если нет, то как же будут исполняться ф-ии в этом подключённом файле?
Получается, что существуют какие-то ограничения на содержание подключаемых файлов. Где можно об этом прочитать?
а два start можно? Если нет, то как же будут исполняться ф-ии в этом подключённом файле?
Получается, что существуют какие-то ограничения на содержание подключаемых файлов. Где можно об этом прочитать?
2 старта нельзя - и об этом скажет компилятор.
а почитать:
Похоже, Вам следует прочитать простейшую книжку по языку С - сразу отпадет множество вопросов.
;)
В этой ветке для Вас самый хороший совет, это
Похоже, Вам следует прочитать простейшую книжку по языку С - сразу отпадет множество вопросов.
Говорю Вам абсолютно серьезно, без всяких подколов! Почти все, что Вы спрашиваете, это азы программирования. Не MQL, а вообще программирования. Пожалуйста, последуйте этому совету, и у Вас сами отпадут вопросы такого рода, как
Следует ли понимать "заменяет" буквально? Т.е. значит ли это, что созданный таким образом эксперт будет идентичен такому эксперту, в кот. вместо #include <имя_файла> непосредственно содержится собственно код этого файла?
-Если да, то к какой из спец. ф-ий будет относиться эта чать кода эксперта?
-Если нет, то как понимать "заменяет"?
Вы сами себя тормозите! В программировании особо страшного ничего нет, но в двух словах и на пару страничек это не распишешь. Недавно сам встал в тупик, когда ребенок попросил "быстренько научить его программировать" :)
С уважением к Вам.
Пожалуй, надо немного прояснить.
Я поднял эту тему чтобы заострить внимание производителей на некачественном на мой взгляд (недоделанном) описании языка MQL4. Я пытался показать, что на основе этой документации нельзя научиться писать эксперты для МТ4. Думаю, что обычный пользователь не должен быть программистом, чтоб суметь написать эксперт. Если же должен, то в головной части "Руководства пользователя" следует написать, что для успешного написания экспертов пользователю требуется знание такого-то языка программирования (что по моим представлениям существенно понизит рейтинг МТ4). Или (что лучше) составить собственную полную документацию.
Кроме того, нелья быть "немножко беременным". Языки отличаются друг от друга, тот же С отличается от С++. Думаю, никто из пользователей сегодня не сможет ответственно сказать в какой части MQL4 следует ориентироваться на С, а в какой - нет.. Скорее появятся новые вопросы.
Я не торможу сам себя. Ну, посудите сами. Как можно упрекать кого-то в тормознутости, если он хочет всего-то Документацию по языку программирования, а ему говорят - изучай С!
------------------------------
До сих пор я строил экспертов на основе функций в отдельных файлах. Так мне удобней, так я хочу поступить и на этот раз. Немного о том что я делаю.
1. Описываю переменные в отдельном файле Perem.mq4:
double a;
double b;
double c;
2. Описываю функцию в отдельном файле Function.mq4:
double fun3(double b)
{
a=b+1;
return(a);
}
3. Создаю эксперта Expert.mq4:
#include <Perem.mq4>
#include <Function.mq4>
int start()
{
c=fun3( b);
Alert("c = ",c );
return(0);
}
4. Компилирую. 0 ошибок, 0 предупреждений
Замечательно. Это значит, что в функциях можно менять значения глобальных переменных. Оч. удобно.
Потом сдуру беру и в строке double fun3(double b) меняю double на int, получаю double fun3(int b), опять компилирую. 0 ошибок, 0 предупреждений Этого я не понимаю..
Изначально я надеялся вообще не указывать тип переменной в заголовке функции. А почему нет? Воспринимаются же компилятором переменные в теле функции без указания типа (естественно, поскольку то, как они присоединены, делает их глобальными). Но не указывать не получилось. Я и добавил int туда, где должен быть double . По моим представлениям компилятор должен был выдать ошибку. Но этого не произошло Так и обнаружился вопрос..
Тут я теряюсь. Я не знаю какой тип переменной b я использую.. То ли глюк компилятора, то ли я плохо умею читать описание, то ли и правда С поучить..
------
Разумеется, мои коды немного посложнее, чем приведенный пример. Переменных будет ок. 2-3 сотен.