MQL4 - automated forex trading   /  

Code Base

Code Base  Библиотеки  Библиотека функций быстрого преобразования фурье FFT Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый код

Этот скрипт для
MetaTrader 4

Мобильный трейдинг!
Купите лицензию и торгуйте мобильно

Имя:
Библиотека функций быстрого преобразования фурье FFT
Автор: klot (02.10.2006 11:10)
Скачано: 4495
Скачать:
 #_lib_FFT.mq4 (27.9 Kb) View


    В библиотеке семь функций быстрого преобразования Фурье.

- БПФ комплексной функции (прямое и обратное)
void fastfouriertransform(double& a[], int nn, bool inversefft);

Алгоритм проводит быстрое преобразование Фурье комплексной функции, заданной nn отсчетами на действительной оси.

В зависимости от  переданных параметров, может выполняться как прямое, так и обратное преобразование.

Входные параметры:
    nn  -   Число значений функции. Должно  быть  степенью   двойки!!! Алгоритм   не  проверяет  правильность  переданного значения.
    a   -   array [0 .. 2*nn-1] of Real   Значения функции. I-ому значению соответствуют 
                                                      элементы   a[2*I]     (вещественная     часть)   и a[2*I+1] (мнимая часть).
    InverseFFT
        -   направление преобразования.  True, если обратное, False, если прямое.
           
Выходные параметры:
    a   -   результат   преобразования.   Подробнее    см.   описание на сайте.  http://alglib.sources.ru/fft/


- БПФ вещественной функции (прямое и обратное)
void realfastfouriertransform(double& a[], int tnn, bool inversefft); 

Алгоритм проводит быстрое преобразование Фурье вещественной функции, заданной n отсчетами на действительной оси.

В зависимости от  переданных параметров, может выполняться как прямое, так и обратное преобразование.

Входные параметры:
    tnn  -   Число значений функции. Должно  быть  степенью двойки !!!  Алгоритм   не  проверяет  правильность   переданного значения.
    a   -   array [0 .. nn-1] of Real  Значения функции.
    InverseFFT   -   направление преобразования.   True, если обратное, False, если прямое.
           
Выходные параметры:
    a   -   результат   преобразования.   Подробнее    см.   описание на сайте. http://alglib.sources.ru/fft/

- БПФ двух вещественных функций (только прямое)
 void tworealffts(double a1[], double a2[], double& a[], double& b[], int tn);

Алгоритм проводит   быстрое   преобразование   Фурье  двух вещественных    функций,  каждая   из  которых  задана  tn отсчетами на действительной оси.

Алгоритм  позволяет  сэкономить  время, но проводит только прямое преобразование.

Входные параметры:
    tn  -   Число значений функций. Должно  быть  степенью двойки. Алгоритм   не  проверяет  правильность  переданного значения.
    a1  -   array [0 .. nn-1] of Real    Значения первой функции.
    a2  -   array [0 .. nn-1] of Real    Значения второй функции.

Выходные параметры:
    a   -   Преобразование Фурье первой функции
    b   -   Преобразование Фурье второй функции
            (подробнее см. на сайте) http://alglib.sources.ru/fft/

- Быстрое дискретное синусное преобразование
 void fastsinetransform(double& a[], int tnn, bool inversefst);

Алгоритм проводит быстрое синусное преобразование вещественной функции, заданной tnn отсчетами на действительной оси.

В зависимости от  переданных параметров, может выполняться как прямое, так и обратное преобразование.

Входные параметры:
    nn  -   Число значений функции. Должно  быть  степенью  двойки. Алгоритм   не  проверяет  правильность   переданного значения.
    a   -   array [0 .. nn-1] of Real  Значения функции.
    InverseFST
        -   направление преобразования.  True, если обратное, False, если прямое.
           
Выходные параметры:
    a   -   результат   преобразования.   Подробнее    см.   описание на сайте. http://alglib.sources.ru/fft/

- Быстрое дискретное косинусное преобразование
 void fastcosinetransform(double& a[],int tnn, bool inversefct);

Алгоритм проводит быстрое косинусное преобразование вещественной функции, заданной nn отсчетами на действительной оси.

В зависимости от  переданных параметров, может выполняться как прямое, так и обратное преобразование.

Входные параметры:
    tnn  -  Число значений функции минус один. Должно быть  степенью   двойки (например 1024).  
                                                                        Алгоритм   не   проверяет правильность переданного значения.
    a   -   array [0 .. nn] of Real  Значения функции. (например 1025)
      Особеннность подготовки массива для передачи в функцию :  
      int    element_count2=ArrayResize(array,tnn1+1); //Для косинуса !!!

    InverseFCT   -   направление преобразования.   True, если обратное, False, если прямое.
           
Выходные параметры:
    a   -   результат   преобразования.   Подробнее    см.    описание на сайте. http://alglib.sources.ru/fft/

- Быстрая свертка с использованием БПФ
void fastcosinetransform(double& a[],int tnn, bool inversefct);

Свертка
Одна из сворачиваемых функций трактуется, как сигнал, с которым проводим свертку. Вторая считается откликом.

На входе:
    Signal      -   сигнал, с которым проводим свертку. Массив   вещественных  чисел,  нумерация  элементов   от 0 до SignalLen-1.
    SignalLen   -   длина сигнала.
    Response    -   функция отклика. Состоит из  двух  частей,  соответствующих положительным и отрицательным  значениям аргумента.

                    Элементам    массива  с   номерами от 0 до  NegativeLen соответствуют значения отклика в точках от -NegativeLen до 0 соответственно.

                    Элементам      массива   с   номерами   от  NegativeLen+1  до  NegativeLen+PositiveLen  соответствуют  значения  отклика в  точках
                    от 1 до PositiveLen соответственно.
                   
    NegativeLen -   "Отрицательная длина" отклика.
    PositiveLen -    "Положительная длина" отклика.
                          За   пределами [-NegativeLen, PositiveLen]   отклик равен нолю.

На выходе:
    Signal      -   значения свертки функции в точках от 0  до   SignalLen-1.

- Быстрая коррелляция с использованием БПФ
void fastcorellation(double& signal[], int signallen,  double& pattern[],  int patternlen);

На входе:
    Signal      -   массив сигнал, с которым проводим корелляцию.   Нумерация элементов от 0 до SignalLen-1
    SignalLen   -   длина сигнала.
   
    Pattern     -   массив образец, корреляцию сигнала с которым мы ищем  Нумерация элементов от 0 до PatternLen-1
    PatternLen  -   длина образца

На выходе:
    Signal      -   значения корреляции в точках от 0 до  SignalLen-1.
    Более подробно см описание на сайте. http://alglib.sources.ru/fft/

    Файл нужно положить в c:\Program Files\MetaTrader 4\experts\libraries\ и скомпилировать.
Библиотека включается в программу так:

//+------------------------------------------------------------------+
//| My function |
//+------------------------------------------------------------------+
//| #import "#_lib_FFT.ex4" |
//| void fastfouriertransform(double& a[], int nn, bool inversefft); |
//| void realfastfouriertransform(double& a[], int tnn, |
//| bool inversefft); |
//| void fastcorellation(double& signal[], int signallen, |
//| double& pattern[], int patternlen); |
//| void fastconvolution(double& signal[], int signallen, |
//| double& response[], int negativelen, int positivelen); |
//| void fastsinetransform(double& a[], int tnn, bool inversefst); |
//| void fastcosinetransform(double& a[],int tnn, bool inversefct); |
//| void tworealffts(double a1[], double a2[], double& a[], |
//| double& b[], int tn); |
//| #import |
//+------------------------------------------------------------------+
Функции могут использоваться в программах для анализа временных рядов - динамики изменения курсов валют, акций, поведения индикаторов тд.
8 комментариев  Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый комментарий

Can we have this comment in English ? I don t have the chance to speak Russian

Spasiva

UKALGO

08.11.2009 01:49 ukalgo
SergNF писал(а):
klot писал(а):
Кстати, может кто-нибудь соберет библиотечку нейросетевых функций для MT4?
Наверняка видел
http://forexsystems.ru/phpBB/viewtopic.php?t=47&postdays=0&postorder=asc&highlight=%ED%E5%E9%F0%EE%F1%E5%F2%FC&start=45&sid=ed93aa7e5c34e97dc495edb67d8257de
Здесь, среди прочего, обясняют как "нашинковать" dll'ки

А вообще, лично я, считаю, что лучше "откатать идеи" на каком-нибудь более менее специализироанном пакете, и только при получении приличных и достоверных результатов заниматься мелочами по интеграции в MT4 и т.п. Благо двусторонний обмен (в том числе передача сигналов В MT4), например, из NSDT налажен/отлажен полностью.
(Опять же про FFT - а стоило ли заморачиваться с кодированием, не убедившись в эффективности методов, например, в MatLab'е. Или все "на мази" и вопрос только и именно в "автоторговле"? :) )
Может и лучше на специализированном софте, но во-первых нужно знать принципы построения нейросетей, во-вторых нужно знать этот специализированный софт ( тот же NSDT). Я сейчас равноудален и от первого и от второго.
 Поэтому мне проще начать с принципов построения нейросетей и "обкатывать" идеи сразу в MT4. Кстати, на MQL4-е можно все что угодно программировать...
06.10.2006 09:48 klot
klot, если ты имеешь ввиду файл #_i_SpecktrAnalis.mq4, то он почему-то отсутствует.
05.10.2006 13:47 lsv
lsv писал(а):
Что-то не получилось с ходу разобраться в применении этих функций, описания у них почему-то у всех одинаковые. Помогите, пожалуйста! Как, например, имея значения Close 8-ми последних баров получить их спектр, потом оставить первые 4 частоты (типа НЧ-фильтр) и получить обратно сигнал?

Посмотрите тут я выложил пример 'Помогите разобраться с Фурье'
05.10.2006 13:02 klot
Что-то не получилось с ходу разобраться в применении этих функций, описания у них почему-то у всех одинаковые. Помогите, пожалуйста! Как, например, имея значения Close 8-ми последних баров получить их спектр, потом оставить первые 4 частоты (типа НЧ-фильтр) и получить обратно сигнал?
05.10.2006 08:32 lsv
klot писал(а):
Кстати, может кто-нибудь соберет библиотечку нейросетевых функций для MT4?
Наверняка видел
http://forexsystems.ru/phpBB/viewtopic.php?t=47&postdays=0&postorder=asc&highlight=%ED%E5%E9%F0%EE%F1%E5%F2%FC&start=45&sid=ed93aa7e5c34e97dc495edb67d8257de
Здесь, среди прочего, обясняют как "нашинковать" dll'ки

А вообще, лично я, считаю, что лучше "откатать идеи" на каком-нибудь более менее специализироанном пакете, и только при получении приличных и достоверных результатов заниматься мелочами по интеграции в MT4 и т.п. Благо двусторонний обмен (в том числе передача сигналов В MT4), например, из NSDT налажен/отлажен полностью.
(Опять же про FFT - а стоило ли заморачиваться с кодированием, не убедившись в эффективности методов, например, в MatLab'е. Или все "на мази" и вопрос только и именно в "автоторговле"? :) )
04.10.2006 09:49 SergNF
Кстати, может кто-нибудь соберет библиотечку нейросетевых функций для MT4?
02.10.2006 21:30 klot
Предлагаю собрать что-то вроде SDK для МQL4!
02.10.2006 21:27 klot