Я пытаюсь перевести индикатор с MQL4 (язык Metatrader) на Matlab. Код полос Боллинджера выглядит следующим образом:
for(int i=Bars;i>=0;i--)
{
BANDS=iBands(Symbol(),0,20,2,1,0,1,i+1);
}
iBands() документация перечисляет 8 входных данных как :
symbol
timeframe
period
deviation
bands_shift
applied_price
mode
shift
Я понимаю все это, кроме bands_shift
и shift
. Вопрос: Если i = Bars
— это весь диапазон данных, почему i+1
не создает ошибку вне диапазона? Насколько я могу судить, это код для полосы Боллинджера с 20 периодами и 2 стандартными отклонениями. Являются ли соответствующие значения полос Боллинджера для заданного временного интервала значениями, рассчитанными для предыдущего временного интервала (отсюда 1
после четвертой запятой)? Что тогда делает i+1
? Учитывая этот код, как бы я реализовал его в Matlab? Моя попытка с использованием этого скользящее стандартное отклонение и это скользящее среднее:
moving_average = movemean(EURUSD_closes(1:end-1),20); %end-1 in order to shift by 1
moving_average = [NaN; moving_average]; %adding NaN to make BANDS the length of price
moving_std = movestd(EURUSD_closes(1:end-1),20,'backward');
moving_std = [NaN; moving_std1];
BANDS = moving_average + 2*moving_std;
Я не думаю, что это дает тот же результат, что и код MQL4. Любые подсказки определенно будут оценены!