Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Fourier Extrapolation of Indicator - индикатор для MetaTrader 4
- Просмотров:
- 13978
- Рейтинг:
- Опубликован:
- 2009.02.24 19:17
- Обновлен:
- 2016.11.22 07:33
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Автор:
gpwr
По многочисленным просьбам, я изменил Extrapolator.mq4, оставив только первый метод экстраполяции (Фурье) и добавив возможность использования значений выбранного индикатора в качестве входных данных.
Приложенный индикатор использует спектральный анализ значений выбранного индикатора и экстраполирует эти значения в будущее, используя ряд Фурье.
Для примера выбран индикатор Williams Percent Range. Вектор in[] содержит значения выбранного индикатора. На графике внизу, чёрная линия в окне FEoI - значения индикатора, синяя линия - Фурье ряд для прошлых значений, красная линия - экстраполяция ряда Фурье в будущее. Предсказанные значения начинаются с LastBar-1 и включают самый последний известный бар в истории LastBar для непрерывной стыковки смоделированных прошлых (синяя линия) и будущих (красная линия) значений.
Входные данные:
- extern int LastBar =200; //Номер последнего бара в истории. 0 означает самый последний на графике.
- extern int PastBars =500; //Количество баров в истории, по которым производится спектральный анализ и подгонка Фурье ряда
- extern int FutBars =200; //Количество баров в предсказании
- extern int HarmNo =10; //Количество членов в Фурье ряде; HarmNo=0 выбирает максимальное количество гармонических составляющих HarmNo=PastBars
- extern double FreqTOL =0.0001;//Погрешность вычислений частот по методу Куина-Фернандеса
Строка, где изменяется выбранный индикатор, указана внизу красным цветом:
int start()
{
ArrayInitialize(in,EMPTY_VALUE);
ArrayInitialize(pv,EMPTY_VALUE);
ArrayInitialize(fv,EMPTY_VALUE);
//Choose indicator and find the average of its np past values
double x[]; //stores indicator values
ArrayResize(x,np);
double av=0.0;
for(int i=-lb;i<np;i++)
{
in[i+lb]=0.5+iWPR(NULL,0,50,i+lb)/100.0; //change indicator here
if(i>=0)
{
x[i]=in[i+lb];
av+=x[i];
}
}
av/=np;
//Prepare modeled data
for(i=0;i<np;i++)
{
pv[i]=av;
if(i<=nf) fv[i]=av;
}
//Fit trigomometric series
double w,m,c,s;
for(int harm=1;harm<=HarmNo;harm++)
{
Freq(x,w,m,c,s);
for(i=0;i<np;i++)
{
pv[i]+=m+c*MathCos(w*i)+s*MathSin(w*i);
if(i<=nf) fv[i]+=m+c*MathCos(w*i)-s*MathSin(w*i);
}
}
//Reorder the predicted vector
for(i=0;i<=(nf-1)/2;i++)
{
double tmp=fv[i];
fv[i]=fv[nf-i];
fv[nf-i]=tmp;
}
return(0);
}
Как и прежде, просьба: если вам удастся создать прибыльный эксперт на основе этого индикатора, пожалуйста поделитесь идеей по почтовому адресу, указанному в заголовке кода.
Успехов вам!
Indicator
2MAGoodCookedИндикатор торговых сигналов на двух скользящих средних.
Скрипт расчитывает смещение закрытия дневных баров, в зависимости от дня недели. Реализация идеи Ларри Вильямса, описанной в его книге "Долгосрочные успехи краткосрочной торговли".
CDM (Calendar Day of Month)Скрипт расчитывает смещение закрытия дневных баров, в зависимости от календарного дня месяца. Представляет из себя развитие идеи Ларри Вильямса использования дневных смещений внутри месяца.