Новая версия платформы MetaTrader 5 build 3180: Векторы и матрицы в MQL5 и повышение удобства работы - страница 21

 
Slava # :

Да. Такое поведение было изначально, так как мы не предполагали динамическое изменение количества индикаторных буферов.

Похоже, Вам надо самостоятельно вызвать обновление графика при помощи ChartSetSymbolPeriod(0,_Symbol,_Period)

Спасибо за ответ Слава.

Оказывается, это НЕ ошибка, а другое поведение по сравнению с МТ4.

Буфер ДОЛЖЕН быть объявлен как INDICATOR_DATA, в моем коде он был ошибочно объявлен как INDICATOR_CALCULATIONS.

Решено.

 
Slava #:

Подскажите пожалуйста, верна ли следующая запись для Mql?

В C++ коде используется библиотека <armadillo>, и данное выражение для матриц описано как 

S = C * P * trans(C) + R;

Аналогична ли запись на Mql ?

S = C.MatMul(P).MatMul(C.Transpose()) + R;

Или в С++ всё таки это поэлементное произведение?
И необходимо записывать так?

S = C * P * C.Transpose() + R;


Просто под рукой сейчас нет среды разработки C++ ,
чтоб проверить как выполняются матричные операции в С++ при такой записи.
Поэлементно или по правилу матричного произведения.

 
Roman #:

Подскажите пожалуйста, верна ли следующая запись для Mql?

В C++ коде используется библиотека <armadillo>, и данное выражение для матриц описано как 

Аналогична ли запись на Mql ?

Или в С++ всё таки это поэлементное произведение?
И необходимо записывать так?


Просто под рукой сейчас нет среды разработки C++ ,
чтоб проверить как выполняются матричные операции в С++ при такой записи.
Поэлементно или по правилу матричного произведения.

Есть же документация или вопрос про другое?

 
Rorschach #:

Есть же документация или вопрос про другое?

Спасибо. Как то не подумал, что оператор * будет описан в доках.
Но и описание там скудное, матричное умножение двух объектов, всё.
А как они выполнятся поэлементно или по правилу, мне не понятно.
Наверно надо будет ставить библу, и проверять для уверенности.

 
Roman #:

Спасибо. Как то не подумал, что оператор * будет описан в доках.
Но и описание там скудное, матричное умножение двух объектов, всё.
А как они выполнятся поэлементно или по правилу, мне не понятно.
Наверно надо будет ставить библу, и проверять для уверенности.

Поэлементно это % (element-wise)
 
Rorschach #:
Поэлементно это % (element-wise)

Спасибо, да точно, там же написано )) Только на * посмотрел.
Значит в  armadillo  оператор * выполняет произведение по правилу.
А в Mql оператор * выполняет по элементно.
Поэтому подходит MatMul. Спасибо ещё раз, за линк на доки.

 
Roman #:

Спасибо, да точно, там же написано )) Только на * посмотрел.
Значит в  armadillo  оператор * выполняет произведение по правилу.
А в Mql оператор * выполняет по элементно.
Поэтому подходит MatMul. Спасибо ещё раз, за линк на доки.

Все таки странный выбор синтаксиса в библиотеках / поэлементное, а * матричное, запутаться

 

После обновления советник перестал работать в тестере стратегий в обычном режиме - работает только при визуализации.

Код не менял - в чем причина?

 

А причина в том, что я не получаю информацию с индикатора, даже воткнул в код "#property tester_everytick_calculate", хотя и без этого раньше работало.

Индикатор работает на данных других индикаторов с разных ТФ, раньше была проблема - из за расчета с нижнего бара на верний надо было пропустить пару тиков - четырех хватало при OHLC, сейчас же вообще не считает даже в режиме реальных тиков.

Если требуется предоставить индикатор - готов дать его в личку.
 
Roman #:

Спасибо. Как то не подумал, что оператор * будет описан в доках.
Но и описание там скудное, матричное умножение двух объектов, всё.
А как они выполнятся поэлементно или по правилу, мне не понятно.
Наверно надо будет ставить библу, и проверять для уверенности.

Нет. Документацию не успели поправить.

* - поэлементное перемножение двух матриц (и двух векторов) согласованных размеров

Матричное произведение - это matrix.MatMul(matrix)