[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 632
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Например, вам надо рассчитать простое скользящее среднее с периодом PeriodSMA. Для расчета SМА необходимо сложить значения последних PeriodSMA баров и поделить на PeriodSMA. Очевидно, что для баров с номерами Bars-1, Bars-2, ..., Bars-PeriodSMA+1 это сделать не получится, т.к. нужного количества баров для расчета у нас просто нет (крайний левый бар имеет индекс Bars-1). Поэтому мы вынуждены начать расчет индикатора не с последнего бара на графике, а с того, для которого имеются все необходимые для расчета данные, т.е. с бара с индексом Bars-PeriodSMA.
Почему пишут именно это значение, а не сколь угодно отличное? Да просто потому что именно такой сдвиг начала расчета позволяет обсчитать максимальное количество баров без ущерба для правильности собственно расчета.
Но имейте в виду, что это я описал простейший случай. Иногда бывает, что из кода сразу неочевидно, сколько прошлых баров нужно программе для расчетов, и откуда берется именно такой сдвиг. Ну, тогда следует, видимо, поговорить с тем, кто писал код и поинтересоваться. Но вообще есть универсальный способ - просто смотрите по коду, какой в принципе максимальный индекс бара может получиться при использовании ценовых данных и данных индексных буферов в ходе работы программы, обычно уже на этом этапе становится все понятно...
Спасибо за разъяснения!
И просто чтобы уточнить, если я механическим путем добавлю 0, то TP и SL будут работать в данном типе терминалов?
Будут, конечно.
Для того они и нужны, внешние переменные, чтобы задавать любые значения.
Но проще все-таки разместить в модуле инициализации то, что вам посоветовали.
Или в такой форме:
переменные будут скорректированы автоматически, а для прочих нужд пользуйтесь множителем " decimal "
Спасибо за разъяснения!
И просто чтобы уточнить, если я механическим путем добавлю 0, то TP и SL будут работать в данном типе терминалов?
prorab:
Будут, конечно.Для того они и нужны, внешние переменные, чтобы задавать любые значения.
Но проще все-таки разместить в модуле инициализации то, что вам посоветовали.
Или в такой форме:
переменные будут скорректированы автоматически, а для прочих нужд пользуйтесь множителем " decimal "
Данная задача требует уточнения:
Доброго времени суток…
SOS!!! ЛЮДИ ДОБРЫЕ, ПОМОГИТЕ!!! Уже просто съезжает крыша… Я – новичок в программировании вообще (обучаюсь самостоятельно), ну и на MQL – в частности. Написал несложный индикатор: RSI + Ленты Боллинджера в "одном лице" (ниже приведен код индикатора полностью). Но вот беда: если при объявлении массива Buf_std_dev я явно НЕ указываю количество элементов в нем (т.е. строка с объявлением массива выглядит так: double Buf_std_dev[]), то при отображении этого индикатора в окне клиентского терминала (КТ), получаю следующую картину:
Пояснения к рисунку:
а) вверху расположен RSI, к-й имеется в наборе индикаторов, поставляемых вместе с КТ, а Ленты Боллинджера перетянуты в окно этого RSI методом drag and drop);
б) внизу расположен RSI, к-й запрограммирован мной;
При этом компилятор никаких ошибок или предупреждений не выявляет.
Если же я при объявлении массива Buf_std_dev явно указываю количество элементов в нем (т.е. строка с объявлением массива выглядит так: double Buf_std_dev[5502], где 5502 – это число баров, к-е получено с помощью переменной Bars), тогда все становится на свои места (ибо как видно из сравнения двух индикаторов: все значения одинаковы):
Подскажите, что надо сделать, чтобы сохранить изображение, как на втором рисунке, но при этом явно НЕ задавать количество элементов в массиве Buf_std_dev.
P.S. Заранее благодарю за ответ.
Код прилагаю (без некоторых частей - не влазит в 4 Мб!!):
Покажите весь код
Подскажите пожалуйста, если есть способы, как сбросить сюда код размером более 4 Мб (или сбрасывать его сюда по частям?) ?
Если ваш Buf_std_dev не является индикаторным буфером (одним из восьми), то при его объявлении вам нужно указать его размер, или любой размер (если вы в дальнейшем собираетесь его изменять (размер)).
Точно, не является... Если можно, тогда сразу еще 2 вопроса:
1. Если я ему (массиву Buf_std_dev ) присвою буфер (как и остальным четырем), то это значит, что он будет также отображаться в окне индикатора?
2. А если я не буду присваивать ему буфер, то (если я правильно понимаю) будет иметь место следующая ситуация: допустим, что я указал размер в 100 баров. Тогда при появлении новых баров (т.е. если например Bars=101), будут произведены рассчеты только для указанных при объявлении 100 последних баров (т.е. самый старый бар - 101 - будет отброшен). Таким образом при подгрузке истории размер массива всегда будет составлять лишь 100 баров (или какое-то другое значение, к-е я укажу при объявлении)?