Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Речь шла не о выделении памяти для блоков программы, речь шла о том, что подпрограмма не должна вмешиваться в работу основной программы.
Это зависит не от хотелок программиста, а от того, как написана программа.
У меня цикл основного кода вызывает другой цикл подпрограммы, которая лежит в библиотеке (читай, совершенно в другом файле).
Физическое расположение кода никак не влияет на разделение программы. Это все равно одна и та же программа.
Из цикла советника вызывается цикл, расположенный в подпрограмме. Подпрограмма не является блоком основной программы!!! Она ОТДЕЛЬНАЯ штука. Можно вызывать, можно не вызывать.
Если функция вызывается из библиотеки, то она выполняется контексте вызвавшей программы, в ее же потоке. С многопоточными приложениями имели дело? Там как раз следует четко разделять,в каком потоке будет работать одна и та же функция.
Вот представьте ситуацию, Вы написали аудиоплеер. Он просто воспроизводит музыку. Но Вам понадобилось воткнуть в него кнопку, которая считывает некое значение трека и передаёт его в одну из API-функций Windows-а. Там происходит обработка введённых данных и возврат в виде обычного текстового сообщения с результатами обработки. Эта апи-функция будет ПОДПРОГРАААМОЙ для Вашего плеера. И она должна выполняться в ОТДЕЛЬНОМ сегменте оперативной памяти. И вот эта подпрограмма взяла да и ни с того ни с сего вмешалась в основную программу - взяла и до максимума увеличила Вам громкость воспроизведения. А у Вас глубокая ночь и домашние спят. Это же ненормально, если Вы не запрашивали увеличение громкости.
Не нужно производить обращение к глобальным переменным внутри функции, которая не должна ни на что влиять. Если же функция такое делает, то вот и результат - неправильная работа. Здесь не функция виновата, а программист.
Вернемся к функции OrderSelect(). По отношению к любой MQL-программе это глобальная функция. И эта функция знать ничего не знает о том, из какого места программы ее вызвали. Ее дело - выбрать указанный ордер и разместить в некотором адресном пространстве результат. Причем прямой доступ к этому адресному пространству MQL-программа не имеет, только косвенный через функции OrderOpenPrice(), OrderOpenTime() и т. д. Для одной MQL-программы это одно и то же адресное пространство. И, заметьте, деление на "подпрограммы" здесь ничего не изменяет в ее сути. Вот если обратиться к OrderSelect() из другой MQL-программы, то тогда будет другой результат.
@Igor Makanu
Кимовские функции видел последний раз уже очень давно. Жаль, кстати, что сайт, прописанный в его кодах, сейчас не работает.
Возвращаясь к функциям Кима, хочу сказать, что мне очень нравится то, что они чётко соответствуют формулам математической логики. Если переменная в дизъюнктах повторяется, то Ким спокойно "выносит её за скобки". Так, например, построен его код программерского трейлингстопа. Молодчага, дядя, слов нет.
@Ihor Herasko От ЗОЛОТЫЕ СЛОВА, что виновен программист. Ну не знал я про такое поведение кода. Ладно, решение найдено, вопрос закрыт.
Всем спасибо.
@Ihor Herasko От ЗОЛОТЫЕ СЛОВА, что виновен программист.
Можно перефразировать: в любой ситуации, когда что-то пошло не так, сначала нужно найти свою ошибку. В подавляющем большинстве случаев это получается.
Ну не знал я про такое поведение кода. Ладно, решение найдено, вопрос закрыт.
Всем спасибо.
Главное, чтобы Вы поняли, почему так происходит. Если это действительно так, то тема поднята не зря.
Про импортируемые ex-файлы, кстати, не уверен, не проверял.
Если SchSell расположить в другом ex и импортировать в основной код, возможно, OrderSelect-ы в ней не будут влиять на выбранный в основной программе ордер.
Про импортируемые ex-файлы, кстати, не уверен, не проверял.
Если SchSell расположить в другом ex и импортировать в основной код, возможно, OrderSelect-ы в ней не будут влиять на выбранный в основной программе ордер.
Андрей, а вы файлы МТ из облака перенесли в телегу, или теперь и там, и там?
Андрей, а вы файлы МТ из облака перенесли в телегу, или теперь и там, и там?
С гугла убрал, да. Только в телеге.
С гугла убрал, да. Только в телеге.
А можно ссылку, иногда нужны)))