Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 264
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
15 ноября обращался с этим вопросом в службу поддержки по адресу noreply@metaquotes.net, но ответа не получил.
Подскажите, пожалуйста, правильный адрес для такого вопроса.
С уважением.
--
Vladislav Shurkin,
20 ноября 2013 года.
Все результаты закрытых сделок можно посмотреть в истории счёта. Программно. А постоянно массив ими забивать - оно надо? Их же может быть очень много. Лучше ограничиться необходимой глубиной истории и заполнить массив, если совсем уж без него жить не можется.
"Все результаты закрытых сделок можно посмотреть в истории счёта. Программно." - Это как?
При завершении программ необходимо память, выделенную динамически, освобождать для исключения утечек памяти. Я не знаю следят ли за этим разработчики МКЛ
Следят, для того и сделаны массивы статическими, чтоб их собрать в одном месте и потом высвободить. ArrayResize(a,0) в конце программы большого смысла не имеет, если только для самоуспокоения.
Спасибо за разъяснения!
"Все результаты закрытых сделок можно посмотреть в истории счёта. Программно." - Это как?
OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY)
или
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY)
или
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
Спасибо!
Вот, чем хорош учебник Ковалёва? По-моему тем, что там, на простых примерах программного кода, учишься решать простые задачи.
Вообще-то, я начал изучать программирование на примере кода индикатора Владислава Гошкова. Рисовал тот индикатор лучи проддержки и сопротивления по Де-Марку. Были там такие строчки:ObjectMove(buff_str, 1, UpBT[0], UpP[0]);
ObjectMove(buff_str, 0, UpBT[1], UpP[1]);
Поставил. Стал смотреть в тестере как это работат. Лучи по фракталам рисуются, но только в прошлое смотрят, а не в будущее...)))). Стал вопросы задавать - разобрался! Респект Владиславу!!!!
Это потом уже на учебник Ковалёва наткнулся. Побольше-бы встречать ответы на вопросы в таком формате изложения.
И ещё.
"Вы хотите написать своего собственного эксперта и не знаете, с чего начать? С появлением статей Rosh'a на сайте Альпари первые шаги в создании эксперта можно сделать лёгкими и безболезненными.
Просто и доступно Rosh рассказывает об этапах, которые проходит каждый экспертописатель. Многие нюансы программирования, знание которых приходит с длительным опытом, теперь доступны всем.
Шаг за шагом, начиная с самых азов, Вы постигнете тонкости программирования для Форекса."
Может быть Вы, знаете, по какой ссылке этот обзор статей можно почитать?
Потому, что это не массив, если быть точным. Хотите более подробно - смотрите описания языка С. Ссылаюсь не него, поскольку разработчики с самого начала говорили, что по поводу всего, что не понятно или неполно изложено - смотри стандарт С.
А если "на пальцах": когда объявляете переменную double buffer[]; то выделяется память под одну переменную, которая в терминах С называется "указатель", имеет целочисленный тип и в которой хранится адрес ячейки памяти с которой начнется потом массив. Если проверить размерность переменной buffer средствами МКЛ, то получите значение 0. Это обозначает, что памяти под сам массив не отведено и, когда Вы пытаетесь присвоить какое-либо значение, то его просто некуда записать: в МКЛ нет адресной арифметики и с указателями работать нельзя. В С записать можно, но, при "невыделенной" памяти, это обычно приводит к краху системы. Когда применяете АрейРесайз(массив,N), (N>0), то этим самым выделяется память под массив (хотя бы один элемент) и появляется место для записи значений. Тогда при проверке размерность массива будет отлична от 0.
Понятие статического массива в терминах С имеет несколько значений:
1. статический массив (как и статическая переменная/тип) - это такие переменные/массивы размерность которых известна на этапе компиляции (предкомпиляции для МКЛ4) . Например, при описании double buff[10000]; компилятору сообщается размер переменной и он сразу может выделить память. В противовес этому понятию, есть понятие "динамического массива" - то есть, такой массив, размерность которого на этапе компиляции неизвестна и становится известна только на этапе исполнения программы, это все массивы переменной размерности. При обращении к таким массивам нужно предварительно память выделять. Память выделяется за пределами статической памяти программы.
В С/С++ если массив описан в блоке, то и видимость его ограничена блоком - хоть статический массив, хоть динамический. С динамическими массивами, описанными локально, связаны такие ошибки в программах, как "утечки памяти" - это когда указатель на память был уничтожен в силу выхода из области видимости, а память, выделенная под него, осталась занятой.
2 Понятие "статический" массив, как переменная описанная с модификатором static - такие переменные не уничтожаются при выходе из области видимости блока - они располагаются в отдельной области памяти - потому и значения в них сохраняются. Риск утечек памяти уменьшен. Массив, объявленный динамическим в смысле п.1 (то есть массив, размерность которого не известна на этапе компиляции), так же может быть статическим в смысле п.2, то есть декларирован с модификатором "статик".
При завершении программ необходимо память, выделенную динамически, освобождать для исключения утечек памяти. Я не знаю следят ли за этим разработчики МКЛ, но в своих программах всегда память освобождаю - привычка от С - АррейРесайз(массив,0);
В МКЛ все массивы статические в смысле п.2.
Теперь по поводу Вашего вопроса: "Почему статический массив double buffer[]; нельзя присвоить значения ?". Потому, что под него не отведена память (по сути это динамический массив с модификатором статик). Перед присвоением значений необходимо память выделить - то есть применить АррайРесайз с размерностью больше 0, к данному массиву. Для массивов нужно контролировать выход за пределы выделенной памяти (за пределы массива).
ЗЫ Надеюсь, понятно изложил. Постарался как можно проще.
Спасибо!!!!!!!!
Потому, что это не массив, если быть точным. Хотите более подробно - смотрите описания языка С. Ссылаюсь не него, поскольку разработчики с самого начала говорили, что по поводу всего, что не понятно или неполно изложено - смотри стандарт С.
........
Может быть Вы, знаете, по какой ссылке этот обзор статей можно почитать?
https://www.mql5.com/ru/articles/mt4
Ах нет, там уже не открывается(((