Пробую использовать библиотеку https://www.mql5.com/ru/code/11077
На глобальном уровне индикатора
в самом индикаторе передаю индикаторный буфер(ExtMapBuffer12) и количество N
выходит ошибка 'ExtMapBuffer12' - parameter conversion not allowed
Попробуйте объявить как указатель. Накрайняк передавайте указатель на весь класс. В библиотеку не лез, но должно получится
CFastFourierTransform* ar = new CFastFourierTransform; // и потом не забыть удалить, если не нужен delete ar;
**
Прочел в инструкции библиотеки, что:
INPUT PARAMETERS | //| A - array[0..N-1] - complex function to be transformed | //| N - problem size
сложная функция должна быть преобразована. Как это понимать?
Попробуйте объявить как указатель. Накрайняк передавайте указатель на весь класс. В библиотеку не лез, но должно получится
**
Сделал так. Та же ошибка. На сам индикатор не обращайте внимание он корректный, я там вызов класса косой чертой обозначил.
#include <MovingAverages.mqh> #include <Math\Alglib\fasttransforms.mqh> //+------------------------------------------------------------------+ #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Yellow #property indicator_level1 -25 // значение уровня #0 на вертикальной оси #property indicator_level2 25 // значение уровня #1 на вертикальной оси #property indicator_level3 0 //--- input parameters extern int Period_MA_1=1; extern int p2_ =20; extern int p3_ =5; extern int p4_ =3; extern int N =50; //--- buffers double ExtMapBuffer1[]; double ExtMapBuffer3[]; double ExtMapBuffer4[]; double ExtMapBuffer5[]; double ExtMapBuffer6[]; double ExtMapBuffer7[]; double ExtMapBuffer8[]; double ExtMapBuffer9[]; double ExtMapBuffer10[]; double ExtMapBuffer11[]; double ExtMapBuffer12[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping IndicatorBuffers(11); SetIndexBuffer(0,ExtMapBuffer1); SetIndexBuffer(1,ExtMapBuffer3); SetIndexBuffer(2,ExtMapBuffer4); SetIndexBuffer(3,ExtMapBuffer5); SetIndexBuffer(4,ExtMapBuffer6); SetIndexBuffer(5,ExtMapBuffer7); SetIndexBuffer(6,ExtMapBuffer8); SetIndexBuffer(7,ExtMapBuffer9); SetIndexBuffer(8,ExtMapBuffer10); SetIndexBuffer(9,ExtMapBuffer11); SetIndexBuffer(10,ExtMapBuffer12); ArraySetAsSeries(val,true); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int i,limit,BEGUN; double max=0.0,min=0.0; //--- если это первый вызов BEGUN=1+p2_+p3_+p4_+Period_MA_1; if (prev_calculated==0)limit=rates_total-BEGUN; else limit=rates_total-prev_calculated; for(i=limit;i>=0;i--){ExtMapBuffer3[i]=0.0;max=high[i]-high[i+Period_MA_1];if (max>0.0){ExtMapBuffer3[i]=max;}} for(i=limit;i>=0;i--){ExtMapBuffer4[i]=0.0;min=-1*(low[i]-low[i+Period_MA_1]);if (min>0.0){ExtMapBuffer4[i]=min;}} for(i=limit;i>=0;i--) { ExtMapBuffer5[i]=ExtMapBuffer3[i]-ExtMapBuffer4[i]; ExtMapBuffer6[i]=MathAbs(ExtMapBuffer5[i]); } ExponentialMAOnBuffer(rates_total,prev_calculated,BEGUN,p2_,ExtMapBuffer5,ExtMapBuffer7); ExponentialMAOnBuffer(rates_total,prev_calculated,BEGUN,p2_,ExtMapBuffer6,ExtMapBuffer8); ExponentialMAOnBuffer(rates_total,prev_calculated,BEGUN,p3_,ExtMapBuffer7,ExtMapBuffer9); ExponentialMAOnBuffer(rates_total,prev_calculated,BEGUN,p3_,ExtMapBuffer8,ExtMapBuffer10); ExponentialMAOnBuffer(rates_total,prev_calculated,BEGUN,p4_,ExtMapBuffer9,ExtMapBuffer11); ExponentialMAOnBuffer(rates_total,prev_calculated,BEGUN,p4_,ExtMapBuffer10,ExtMapBuffer12); for(i=limit;i>=0;i--){if(ExtMapBuffer12[i]!=0.0)ExtMapBuffer1[i]=100*ExtMapBuffer11[i]/ExtMapBuffer12[i];}///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CFastFourierTransform* ar = new CFastFourierTransform; ar.FFTC1D(ExtMapBuffer1,N); delete ar; //--- return value of prev_calculated for next call return(rates_total); }
Пробую использовать библиотеку https://www.mql5.com/ru/code/11077
На глобальном уровне индикатора
в самом индикаторе передаю индикаторный буфер(ExtMapBuffer12) и количество N
выходит ошибка 'ExtMapBuffer12' - parameter conversion not allowed
Так массив-то в фурье в функции FFTC1D типа complex! По типу подошел бы другой метод - FFTR1D, но не факт что это то, что требуется в прикладной задаче.
Так массив-то в фурье в функции FFTC1D типа complex! По типу подошел бы другой метод - FFTR1D, но не факт что это то, что требуется в прикладной задаче.
Как его сделать complex? Первый раз начинаю работать с библиотеками, не совсем все там понятно. Это же обычные функции, в которые нужно передавать параметры?
Наверно другой метод надо использовать - FFTR1D().
Массив комплекс числе должно быть для результата используется. Или же как входные данные для обратного преобразования.
Наверно другой метод надо использовать - FFTR1D().
Массив комплекс числе должно быть для результата используется. Или же как входные данные для обратного преобразования.
В функции FFTR1D(), если правильно понимаю передается массив для Фурье, количество элементов и массив для записи после преобразования.
Дополнительно сделал еще один индикаторный массив "F" и пробую так:
ar.FFTR1D(ExtMapBuffer1,N,F);
все равно та же ошибка:
'F' - parameter conversion not allowed HLM_Er_f.mq4 89 29
Чего-то не так наверное делаю?
FFTR1D(double &a[],const int n,complex &f[]);
массив a - double, массив f - complex
FFTR1D(double &a[],const int n,complex &f[]);
массив a - double, массив f - complex
Как мне сделать массив F complex? Почитать про него найти даже не могу?)
Как мне сделать массив F complex? Почитать про него найти даже не могу?)
Структура описана в файле complex.mqh.
Объявлять так:
complex f[];
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пробую использовать библиотеку https://www.mql5.com/ru/code/11077
На глобальном уровне индикатора
#include <Math\Alglib\fasttransforms.mqh> CFastFourierTransform ar;
в самом индикаторе передаю индикаторный буфер(ExtMapBuffer12) и количество N
выходит ошибка 'ExtMapBuffer12' - parameter conversion not allowed