Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 821

 

Прошу обратить внимание на мой вопрос. Пишу индикатор, который делает некие вычисления и заносит их в массив (не таймсерия) размерности равной количеству свечей на графике. Изначально я полагал, что если у меня в параметрах терминала задано 2000 свечей на графике, то при появлении новой, самая первая примет значение второй, вторая третьей и т.д., следовательно при получении prev_calculated равным нулю я пересчитывал весь массив, иначе только последний бар. Но тут я выяснил, что с каждой новой свечой значение rates_total увеличивается и становится больше ограничения 2000.

Следовательно пересчитывать массив не имеет смысла?

Но почему так происходит, ведь в терминале задано ровно 2000 свечей?


При закрытии терминала количество баров снова становится 2000, и снова, при появлении новых свечей начинает расти.


ruslanzip:
Добрый день . Подскажите, пожалуйста. Как будет код для условия: Если баланс счета увеличился или уменьшился, тогда выполнить функцию

//Объявить переменную вне функций:

double Balance=AccountBalance();

//В тиковую/расчётную функцию добавить:

if (Balance!=AccountBalance())

{

Balance=AccountBalance();

MyFunction(); // <-- Ваша функция

}

 
Деньги со счета у меня в real счете  есть деньги но здесь написано можно снять только заработные ? 
 
Roza75:
Деньги со счета у меня в real счете  есть деньги но здесь написано можно снять только заработные ? 
Реал-счет где у вас?
 
Artyom Trishkin:
Реал-счет где у вас?
Metatreder 4 приложение 
 
Igor Makanu:

потому что так работает терминал

То есть это нормальное поведение и не является ошибкой? Потому как некоторые базовые custom индикаторы написаны без учёта этого фактора и делают полный пересчёт при каждом prev_calculated==0.


Igor Makanu:

это решение только для тестера, что будет если перегрузить терминал? а если запустить второй советник на этом счете?

нужно работать с историей ордеров, нет открытых ордеров с нашим магиком - посмотрели профит последнего ордера в истории

Перегрузить? Или перезагрузить? Если второе, то поведение советника не изменится. Если запустить второй советник, то алгоритм будет выполняться аналогично, без ошибок.

С чем необходимо работать автору зависит от поставленной им же задачи. А как им был поставлен вопрос, так я на него и ответил, более никакой конкретики в вопросе не было.

 
The_Sheikh:

Прошу обратить внимание на мой вопрос. Пишу индикатор, который делает некие вычисления и заносит их в массив (не таймсерия) размерности равной количеству свечей на графике. Изначально я полагал, что если у меня в параметрах терминала задано 2000 свечей на графике, то при появлении новой, самая первая примет значение второй, вторая третьей и т.д., следовательно при получении prev_calculated равным нулю я пересчитывал весь массив, иначе только последний бар. Но тут я выяснил, что с каждой новой свечой значение rates_total увеличивается и становится больше ограничения 2000.

Следовательно пересчитывать массив не имеет смысла?

Но почему так происходит, ведь в терминале задано ровно 2000 свечей?


При закрытии терминала количество баров снова становится 2000, и снова, при появлении новых свечей начинает расти.


//Объявить переменную вне функций:

double Balance=AccountBalance();

//В тиковую/расчётную функцию добавить:

if (Balance!=AccountBalance())

{

Balance=AccountBalance();

MyFunction(); // <-- Ваша функция

}



Спасибо огромное, получилось!

 
Artyom Trishkin:

У меня на телефоне есть приложение Metatreder 4 там 
 
Alexey Viktorov:

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

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

 
Доброго времени суток всем форумчанам! Столкнулся с проблемой,второй день голову ломаю,никак не могу понять как реализовать задумку! Как нарисовать прямоугольник,круг,овал (не важно какая фигура) на определенной свече,чтоб не перерисовывать по новым координатам. А чтоб при срабатывании каких-то условий рисовалась фигура? Каждая фигура на своей свече. Только недавно начал изучать mql4,и с графикой еще вообще не знаком. Вот решил вчера попробовать вывести квадрат на 10-ом баре (как пример),один выводится и все,и больше не рисуется. Вчера мучал-мучал код,и в итоге стало получаться,но только квадрат постоянно стирается на старом месте и рисуется на новом,потом домучался,что стал выводиться квадрат только один раз. Подскажите,кто знает как это реализовать! Или подскажите,где есть соответствующая ветка на форуме. А то уже кучу инфы прочел,только больше запутался! Заранее всем спасибо за ответы
Причина обращения: