Кто-нибудь пытался такое сделать? Понятно, что существует тривиальный
способ: сначала делаем медленный iMAOnArray() (первый цикл), потом быстрый (второй цикл), вычитаем со сдвигом
(третий цикл) и затем сглаживаем (четвертый цикл). Может, есть
возможность сделать как-то еще? Только, пожалуйста, не задавайте
вопросы, зачем мне это нужно...
- Stochastic Oscillator - Осцилляторы - Использование технических индикаторов - Графики котировок, технический и фундаментальный анализ
- Реальные и сгенерированные тики - Алгоритмический трейдинг, торговые роботы
- MQL5 Wizard: разработка торговых роботов для MetaTrader 5
Другого способа нет. Теоретически можно формулу раздолбать
и получить в один проход. Но формула будет сложной. пусть компьютер
думает, он железный.
Спасибо, Rosh. Формулы на самом деле не должны быть очень сложными, если воспользоваться
матричным представлением мувингов.
Тогда у меня еще вопросик в тему. Ни разу еще не пользовался функциями iXXXOnArray(), а вот теперь потребовалось. В помощи к ним идет стандартная фраза:
Пример: вычисляю злосчастный iMACDOnArray(). Перед этим сформировал массив синтетической истории _s[] (графический буфер), индексирование которого аналогично историческим массивам. Теперь вычисляю разницу мувингов:
P.S. В принципе этот код легко проверяется - если в массив _s[] записать реальные котировки и сравнить _signal[] со стандартным MACD.
P.P.S. Да, все же в первую функцию надо вставить строку
Тогда у меня еще вопросик в тему. Ни разу еще не пользовался функциями iXXXOnArray(), а вот теперь потребовалось. В помощи к ним идет стандартная фраза:
The indicator is calculated from left to right. To access to the array elements as to a series array (i.e., from right to left), one has to use the ArraySetAsSeries function.
Что это реально означает? Допустим, я не использовал функцию ArraySetAsSeries() и вычисляю EMA. Тогда каким весам будут соответствовать элементы массива с большими индексами - большим или меньшим?Пример: вычисляю злосчастный iMACDOnArray(). Перед этим сформировал массив синтетической истории _s[] (графический буфер), индексирование которого аналогично историческим массивам. Теперь вычисляю разницу мувингов:
void makeMAdiffArray( double& MAdiff[] ) { ArrayResize( MAdiff, Bars ); for( int i = 0; i < Bars; i++ ) MAdiff[ i ] = iMAOnArray( _s, Bars, _fastEMA, 0, MODE_EMA, i ) - iMAOnArray( _s, Bars, _slowEMA, 0, MODE_EMA, i ); return; }Дальше надо сгладить полученный массив и записать его в графический буфер _signal[]:
void MACDArrayOnArray() { double MAdiff[]; makeMAdiffArray( MAdiff ); for( int i = 0; i < Bars; i++ ) _signal[ i ] = iMAOnArray( MAdiff, Bars, _signalSMA, 0, MODE_SMA, i ); return; }Так правильно или нет?
P.S. В принципе этот код легко проверяется - если в массив _s[] записать реальные котировки и сравнить _signal[] со стандартным MACD.
P.P.S. Да, все же в первую функцию надо вставить строку
ArraySetAsSeries( MAdiff, true );
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь