Преобразование MQL4 ibands() в Matlab

Я пытаюсь перевести индикатор с 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. Любые подсказки определенно будут оценены!


person siegel    schedule 04.02.2014    source источник


Ответы (2)


Как понимать iBars+1 и "Отсутствует" Out of Range Error

MQL4 работает в пространстве "обратной индексации TimeDOMAIN". Таким образом, iBar показывает "глубину" исторического TimeSeriesDataSET, а самый последний (действующий) бар имеет индекс [0].

Всегда [0].

Это означает, что для расчета любого технического индикатора кодировщик должен организовать обработку таким образом.

Это также означает, что для любого нового бара внутреннее представление уровня хранения данных должно каким-то образом «сдвинуть» все DataCELL на единицу «влево» (назад в направлении TimeDOMAIN к < em>History ), чтобы создать «пробел» для нового бара, имеющего все еще индекс [0] (момент Now в TimeDOMAIN ).

В то время как «физически» перемещение всей текущей «глубины» DataSTORE было бы абсолютным огромным количеством ресурсов (как времени, так и ЦП, ..), уровень хранения данных работает умнее, настраивает индексную головку на каждом новом событии бара plus использует некую форму гибкого планирования емкости DataSTORE/изменения размера по запросу, чтобы свести к минимуму выделение памяти во время непрерывного роста DataSTORE.

Это означает, что тестирование для Out of Range Error не имеет поддержки в пространстве имён пользовательского кода языка MQL4.

Как понимать bands_shift и shift.

При вызове iBands() необходимо указать, для какого бара запрашивается функция для вычисления результата.

shift обеспечивает ввод для этого. Индекс подчиняется приведенным выше правилам.

После того, как расчеты полос Боллинджера выполнены, можно сместить кривые на некоторое количество баров, переместив график в TimeDOMAIN { +N ‹‹ left | -N >> right } -- чтобы визуализированная графика соответствовала ожиданиям или удовольствию.

bands_shift предоставляет входные данные для специального смещения этого графика.

Также обратите внимание, что наблюдаемые различия между графиками Google, Y!Finance, MATLAB и MQL4 просто должны появиться и учитывать дополнительные (неизвестные) детали, которые вряд ли можно расшифровать из линий, только что показанных на экране.

applied_price := { PRICE_CLOSE | ... | ..._TYPICAL | ..._WEIGHTED } предоставляет входные данные для выбора соответствующего типа цены, входящей в исчисление Боллинджера.

mode := { MODE_UPPER | MODE_MAIN | MODE_LOWER } предоставляет входные данные для получения либо { upper_band | Ось полос Боллинджера | lower_band } Значение PriceDOMAIN. Таким образом, «ленивый подход» состоит в том, чтобы вызвать iBands() трижды, чтобы получить древовидную линию Боллинджера, или много раз для тепловых карт полос Боллинджера, окрашенных в спектр. введите здесь описание изображения

person user3666197    schedule 11.07.2014

С моим небольшим знанием полос Боллинджера кажется, что у вас может быть проблема с реализацией. Пробовали ли вы вывод функции Боллинджера в MATLAB?

Полосы Боллинджера могли быть реализованы по-другому для крайних случаев, когда размер окна меньше 20. Возможно, вам придется связаться с авторами MQL4, чтобы проверить используемые формулы. Я заметил разницу, когда реализовал на Python, и индикатор, увиденный в финансах Google. Тем не менее, если вы правильно реализовали значения, где размер окна равен 20, вы увидите те же значения.

Если вы не уверены в коде FEX, вам следует использовать std и среднее для реализации.

person Lokesh A. R.    schedule 09.02.2014