Alexey Viktorov: Артём, ты не прав. Массив объявленный на глобальном уровне виден во всех частях программы и передавать его куда-то откуда-то совсем не надо. Просто в одном месте программы он заполняется, в другом сортируется, а в третьем читается, не важно.
Одна и та же функция может с успехом сортировать и/или искать данные в разных массивах. Верно? А раз так, то лучше массив передавать по ссылке - на будущее. Ну и при вызове функции не помешает видеть с каким массивом она будет работать.
Одна и та же функция может с успехом сортировать и/или искать данные в разных массивах. Верно? А раз так, то лучше массив передавать по ссылке - на будущее. Ну и при вызове функции не помешает видеть с каким массивом она будет работать.
Я вот лишь из этих соображений. Где не прав?
Понял. Твой совет для лего-программистов. Сам-то такими извращениями не занимаешься.
Тогда остаётся одно, не прав в том, что массив должен быть объявлен на глобальном уровне.
Понял. Твой совет для лего-программистов. Сам-то такими извращениями не занимаешься.
Тогда остаётся одно, не прав в том, что массив должен быть объявлен на глобальном уровне.
Рад что мы друг-друга поняли.
В данном контексте я веду к чему:
Нам нужно добиться как можно меньшего количества циклов на одном тике.
Нам нужно иметь один постоянный массив с данными рыночных ордеров и позиций и один массив с данными удалённых/закрытых ордеров и позиций
Если иметь массив локально в функции, то повторное к нему обращение требует очередного его заполнения. Я предлагаю его заполнять один раз на новом тике - значит массив глобальный - иначе мы его потеряем при выходе из функции.
Для того, чтобы что-то в нём (в массиве) найти, нам нужен заполненный массив и функции, которые будут возвращать найденные данные. Уже внутри функций можно объявить вспомогательные массивы для необходимых расчётов.
Исходя их этого - массивы всё же лучше иметь глобальные - для закрытых и открытых ордеров и позиций. Один раз на новом тике мы проходим по одному разу по необходимому количеству ордеров/позиций, заполняя ими два массива. А далее уже на этом же тике мы получаем с них все нужные нам данные. Причём у меня рассчитываются не только последний закрытый/открытый ордер/позиция и все их данные, но и ищутся все родительские и дочерние тикеты всех позиций при частичном закрытии. Соответственно, я в любой момент времени могу поглядеть от какого тикета произошла та или иная позиция если она не единожды закрывалась частично - всё это уже работает в одном классе, который работает в таймере. Ну и многие другие необходимые мне данные я имею при небольшом итоговом количестве циклов. Для тестера задаётся нужная глубина истории для массивов.
Нам нужно добиться как можно меньшего количества циклов на одном тике.
Нам нужно иметь один постоянный массив с данными рыночных ордеров и позиций и один массив с данными удалённых/закрытых ордеров и позиций
Если иметь массив локально в функции, то повторное к нему обращение требует очередного его заполнения. Я предлагаю его заполнять один раз на новом тике - значит массив глобальный - иначе мы его потеряем при выходе из функции.
Для того, чтобы что-то в нём (в массиве) найти, нам нужен заполненный массив и функции, которые будут возвращать найденные данные. Уже внутри функций можно объявить вспомогательные массивы для необходимых расчётов.
Исходя их этого - массивы всё же лучше иметь глобальные - для закрытых и открытых ордеров и позиций. Один раз на новом тике мы проходим по одному разу по необходимому количеству ордеров/позиций, заполняя ими два массива. А далее уже на этом же тике мы получаем с них все нужные нам данные. Причём у меня рассчитываются не только последний закрытый/открытый ордер/позиция и все их данные, но и ищутся все родительские и дочерние тикеты всех позиций при частичном закрытии. Соответственно, я в любой момент времени могу поглядеть от какого тикета произошла та или иная позиция если она не единожды закрывалась частично - всё это уже работает в одном классе, который работает в таймере. Ну и многие другие необходимые мне данные я имею при небольшом итоговом количестве циклов. Для тестера задаётся нужная глубина истории для массивов.
И т.д., и т.п. ...
Значит мы не совсем друг-друга поняли.
Если массив глобальный, зачем его передавать в функцию по ссылке если он и так виден внутри этой функции?
Alexey Viktorov: Ну, слава Богу, я понял твои мысли. Но они очень похожи на совет лего-программистам.
Было бы очень странно, имея в запасе огромное множество 100%-рабочих функций, каждый раз писать их заново. Это не советы собирателям домиков из кубиков. Это советы накапливать собственные библиотеки функций и классы. И что плохого в том, что одна функция работает с несколькими массивами в зависимости от того, какой из них в неё передан по ссылке? А что плохого в шаблонах функций?
Если есть код для сортировки массива, зачем под каждый тип массива писать отдельную функцию? Ведь можно просто сделать перегрузку и сортировать любой тип. Как думаешь работает ArraySort() ? Ты же туда передаёшь разные типы массивов, а на выходе получаешь отсортированный тот, который передал - или метаквоты тоже лего-кодеры что-ли?
Было бы очень странно, имея в запасе огромное множество 100%-рабочих функций, каждый раз писать их заново. Это не советы собирателям домиков из кубиков. Это советы накапливать собственные библиотеки функций и классы. И что плохого в том, что одна функция работает с несколькими массивами в зависимости от того, какой из них в неё передан по ссылке? А что плохого в шаблонах функций?
Если есть код для сортировки массива, зачем под каждый тип массива писать отдельную функцию? Ведь можно просто сделать перегрузку и сортировать любой тип. Как думаешь работает ArraySort() ? Ты же туда передаёшь разные типы массивов, а на выходе получаешь отсортированный тот, который передал - или метаквоты тоже лего-кодеры что-ли?
В процессе работы программы она постоянно меняется. Помогите написать условие: если Level НЕ изменилось, то ничего не делаем, если Level изменилось (не важно в большую или меньшую сторону) то делать определенное действие { оператор }
Артём, ты не прав. Массив объявленный на глобальном уровне виден во всех частях программы и передавать его куда-то откуда-то совсем не надо. Просто в одном месте программы он заполняется, в другом сортируется, а в третьем читается, не важно.
Одна и та же функция может с успехом сортировать и/или искать данные в разных массивах. Верно? А раз так, то лучше массив передавать по ссылке - на будущее. Ну и при вызове функции не помешает видеть с каким массивом она будет работать.
Я вот лишь из этих соображений. Где не прав?
Одна и та же функция может с успехом сортировать и/или искать данные в разных массивах. Верно? А раз так, то лучше массив передавать по ссылке - на будущее. Ну и при вызове функции не помешает видеть с каким массивом она будет работать.
Я вот лишь из этих соображений. Где не прав?
Понял. Твой совет для лего-программистов. Сам-то такими извращениями не занимаешься.
Тогда остаётся одно, не прав в том, что массив должен быть объявлен на глобальном уровне.
Рад что мы друг-друга поняли.
Понял. Твой совет для лего-программистов. Сам-то такими извращениями не занимаешься.
Тогда остаётся одно, не прав в том, что массив должен быть объявлен на глобальном уровне.
Рад что мы друг-друга поняли.
В данном контексте я веду к чему:
Исходя их этого - массивы всё же лучше иметь глобальные - для закрытых и открытых ордеров и позиций. Один раз на новом тике мы проходим по одному разу по необходимому количеству ордеров/позиций, заполняя ими два массива. А далее уже на этом же тике мы получаем с них все нужные нам данные. Причём у меня рассчитываются не только последний закрытый/открытый ордер/позиция и все их данные, но и ищутся все родительские и дочерние тикеты всех позиций при частичном закрытии. Соответственно, я в любой момент времени могу поглядеть от какого тикета произошла та или иная позиция если она не единожды закрывалась частично - всё это уже работает в одном классе, который работает в таймере. Ну и многие другие необходимые мне данные я имею при небольшом итоговом количестве циклов. Для тестера задаётся нужная глубина истории для массивов.
И т.д., и т.п. ...
В данном контексте я веду к чему:
Исходя их этого - массивы всё же лучше иметь глобальные - для закрытых и открытых ордеров и позиций. Один раз на новом тике мы проходим по одному разу по необходимому количеству ордеров/позиций, заполняя ими два массива. А далее уже на этом же тике мы получаем с них все нужные нам данные. Причём у меня рассчитываются не только последний закрытый/открытый ордер/позиция и все их данные, но и ищутся все родительские и дочерние тикеты всех позиций при частичном закрытии. Соответственно, я в любой момент времени могу поглядеть от какого тикета произошла та или иная позиция если она не единожды закрывалась частично - всё это уже работает в одном классе, который работает в таймере. Ну и многие другие необходимые мне данные я имею при небольшом итоговом количестве циклов. Для тестера задаётся нужная глубина истории для массивов.
И т.д., и т.п. ...
Значит мы не совсем друг-друга поняли.
Если массив глобальный, зачем его передавать в функцию по ссылке если он и так виден внутри этой функции?
Значит мы не совсем друг-друга поняли.
Если массив глобальный, зачем его передавать в функцию по ссылке если он и так виден внутри этой функции?
Перегрузка функций - есть такое понятие же ;)
Если нужно делать одинаковые действия с разными массивами в одной функции, то ...
Впрочем - мы обсуждаем разные частные случаи...
Перегрузка функций - есть такое понятие же ;)
Если нужно делать одинаковые действия с разными массивами в одной функции, то ...
Впрочем - мы обсуждаем разные частные случаи...
Ну, слава Богу, я понял твои мысли. Но они очень похожи на совет лего-программистам.
Было бы очень странно, имея в запасе огромное множество 100%-рабочих функций, каждый раз писать их заново. Это не советы собирателям домиков из кубиков. Это советы накапливать собственные библиотеки функций и классы. И что плохого в том, что одна функция работает с несколькими массивами в зависимости от того, какой из них в неё передан по ссылке? А что плохого в шаблонах функций?
Если есть код для сортировки массива, зачем под каждый тип массива писать отдельную функцию? Ведь можно просто сделать перегрузку и сортировать любой тип. Как думаешь работает ArraySort() ? Ты же туда передаёшь разные типы массивов, а на выходе получаешь отсортированный тот, который передал - или метаквоты тоже лего-кодеры что-ли?
Было бы очень странно, имея в запасе огромное множество 100%-рабочих функций, каждый раз писать их заново. Это не советы собирателям домиков из кубиков. Это советы накапливать собственные библиотеки функций и классы. И что плохого в том, что одна функция работает с несколькими массивами в зависимости от того, какой из них в неё передан по ссылке? А что плохого в шаблонах функций?
Если есть код для сортировки массива, зачем под каждый тип массива писать отдельную функцию? Ведь можно просто сделать перегрузку и сортировать любой тип. Как думаешь работает ArraySort() ? Ты же туда передаёшь разные типы массивов, а на выходе получаешь отсортированный тот, который передал - или метаквоты тоже лего-кодеры что-ли?
Главное не дойти до такого вот.
https://www.mql5.com/ru/forum/165468/page3#comment_3978059
Главное не дойти до такого вот.
https://www.mql5.com/ru/forum/165468/page3#comment_3978059
есть переменная
int Level = 0;
В процессе работы программы она постоянно меняется. Помогите написать условие: если Level НЕ изменилось, то ничего не делаем, если Level изменилось (не важно в большую или меньшую сторону) то делать определенное действие { оператор }