← К каталогу
Исходный код · ID 1465

Goertzel browser

goertzel_browser_5.602 @freeindecators.mq5

Похожие материалы по тегам

#__slope direction line.mq5MQL5 / MetaTrader 5 · 1 общих теговrange breakout @meowforex1.pineTradingView · 1 общих тегов#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit3.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit2.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Goertzel browser — индикатор для MetaTrader 5, выполняющий циклический анализ ценовых данных на основе алгоритма Гёртцеля. Индикатор выявляет доминирующие циклы, строит составные волны и отображает их на отдельном окне графика, включая прогнозную линию в будущее. Встроен тест значимости циклов по методу Бартельса, позволяющий фильтровать статистически незначимые циклы.

Индикатор поддерживает несколько методов детренировки: фильтр Ходрика–Прескотта, беззадержную скользящую среднюю ZLMA и логарифмическую регрессию с нулевым лагом. Также доступны варианты сглаживания исходного ряда (SMA, HP, ZLMA) и режимы отображения волн на основе косинусных или синусных функций с возможностью построения многоколорной визуализации.

Индикатор работает в многовременном режиме (MTF), переключая расчёт на выбранный таймфрейм, и позволяет задавать список конкретных циклов для анализа. Результаты отображаются в виде таблицы циклов с периодом, амплитудой, фазой и вероятностью Бартельса, а также в виде линий на графике.

Настройки программы

НастройкаОписание
info1 Текстовый разделитель: основные настройки.
TimeFrame Таймфрейм для расчётов (строковое представление или «calculateValue»).
Price Тип цены для расчётов (PRICE_CLOSE и аналогичные константы).
ValType Тип обработки исходного ряда: 0 — SMA, 1 — HP-сглаживание, 2 — ZLMA-сглаживание.
HPsmoothPer Период сглаживания при использовании фильтра Ходрика–Прескотта (ValType = 1).
ZLMAsmoothPer Период сглаживания беззадержной ZLMA (ValType = 2).
BarToCalculate Бар, начиная с которого рассчитываются циклы (0 — текущий открытый бар, >0 — закрытые бары).
StartAtCycle Начальный индекс цикла для построения составной волны.
UseTopCycles Количество ведущих циклов (по амплитуде или силе) для построения составной волны.
UseCosineForWaves Использование косинусных вместо синусных волн для реконструкции (рекомендуется true).
UseAdditionForSteps Реконструкция фаз предыдущих баров: true — добавление шагов к текущей фазе, false — вычитание (рекомендуется false).
UseSquaredAmp Использование квадрата амплитуды вместо корня из суммы квадратов (рекомендуется true).
MaxCycLength Максимальная длина цикла, рассматриваемая при анализе (минимум 2).
SubtractNoise Вычитание шумовых циклов из составной волны (работает при UseTopCycles < количества отображаемых циклов).
Interpolate Включает/выключает интерполяцию значений между барами при многовременном режиме.
info2 Текстовый разделитель: настройки отображения.
WindowSizePast Размер окна в барах для расчёта по прошлым данным (должно быть >= SampleSize).
WindowSizeFuture Размер окна в барах для прогноза в будущее.
FutureLineDisplace Смещение прогнозной линии в будущее (в барах).
PredictionVisible Видимость прогнозной линии в будущее.
ListOfCyclesVisible Отображение таблицы списка циклов на графике.
MultiColor Многоколорное отображение волн (смена цвета при изменении тренда).
info3 Текстовый разделитель: настройки списка циклов.
UseCycleList Использовать пользовательский список до 5 циклов вместо автоматического выбора топ-циклов.
Cycle1 Номер первого цикла из списка для отображения (при UseCycleList = true).
Cycle2 Номер второго цикла из списка для отображения.
Cycle3 Номер третьего цикла из списка для отображения.
Cycle4 Номер четвёртого цикла из списка для отображения.
Cycle5 Номер пятого цикла из списка для отображения.
Offset Смещение для списка циклов.
info4 Текстовый разделитель: детренировка и сглаживание.
DetrendSmoothData Включает/выключает детренировку и сглаживание данных перед обнаружением циклов.
DTmethodInfo Информационный текстовый параметр, описывающий выбранный метод детренировки.
DTmethod Метод детренировки: 1 — фильтр HP, 2 — ZLMA, 3 — логарифмическая регрессия с нулевым лагом.
DT_HPper1 Первый период фильтра Ходрика–Прескотта для детренировки.
DT_HPper2 Второй период фильтра Ходрика–Прескотта для детренировки.
DT_ZLper1 Первый период беззадержной ZLMA для детренировки.
DT_ZLper2 Второй период беззадержной ZLMA для детренировки.
DT_RegZLsmoothPer Период сглаживания для метода логарифмической регрессии с нулевым лагом.
info5 Текстовый разделитель: замена амплитуды на силу цикла.
UseCycleStrength Замена амплитуды на силу цикла (цикл/длина) перед тестом Бартельса.
info6 Текстовый разделитель: настройки теста значимости Бартельса.
FilterBartels Фильтрация циклов по значимости Бартельса (true — фильтровать).
BartNoCycles Количество циклов, учитываемых при тесте значимости Бартельса.
BartSmoothPer Период сглаживания для расчёта значимости Бартельса (минимальный период Найквиста = 2).
BartSigLimit Пороговое значение значимости Бартельса для фильтрации циклов.
SortBartels Сортировка циклов по значимости Бартельса (true — по убыванию значимости).
Получить полный код

Поиск по коду файла

/*
- BarToCalculate specifies which is the starting bar to calculate cycles from  
(where SampleSize starts): setting it to 0 will calculate on a current (open) bar, setting 
it to any number > 0 calculates it on closed bars (which one depends on the value entered) 
- UseCosineForWaves: you can choose whether you want to use 
sine or cosine for waves "reconstruction". Cosine is the right way 
to calculate Goertzel !
- UseAdditionForSteps: One question still stays as of how previous bars phases are reconstructed : 
by addition of (2*Pi/period steps) to current phase or 
by subtraction from it in cycles (this is the correct way !), 
if parameter set to true, it will add steps to current phase, 
if set to false, it will subtract steps from current phase. 
- UseSquaredAmp: This may be useful when adding many cycles,
but may be misleading when using just 2 or 3 cycles. Use recommended. 
- UseTopCycles (sorted by largest amplit. or cycle strengths). They are not necessarily the 
waves with the largest Bartels cycle significance, but mostly they show a large significance.
If set > 1 you get a composite wave of all waves <1. Use cycle strength and Bartels >50 and 
select cycles with strength >1. Use not more than 10 cycles.
- WindowSizeFuture: is the size in bars you wish to extend to the future.

- cycle list: if true it will use up to 5 cycles you choose. You don't have to use consecutive cycles. 
E.g. you cane use 1,3,5th cycle.
- Subtract Noise is only working, when UseTopCycles < max. shown cycles in cycle list

new features Goertzel browser 5.6:
- Bartels cycle significance test for every extracted Goertzel cycle.
- smoothing of original time series data with Hodrick Prescott filter or Absolutly No Lag LWMA - no additional indis necessary !!!
- in detrending function Absolutly No Lag LWMA was added as alternative to HP algo - no additional indi necessary !!!
- added a special detrending method using a linear regression of the log 
  transformed smoothed time series data according to “Practical Implementation of Neural Network based time series” blog. 
- modified value table a bit adding Bartels values
- fixed several coding bugs with new MT4 editor
- SampleSize now = BartNoCycles*MaxCycLength+BarToCalculate; WindowSizePast: Must be >= SampleSize
- automated individual ListOfCyclesID

Note:
- UseCycleStrength is used as alternative to amplitude BEFORE Bartels test
*/

#property indicator_separate_window
#property indicator_buffers     3
#property indicator_color1      SkyBlue
#property indicator_color2      PaleVioletRed
#property indicator_color3      PaleVioletRed
#property indicator_width1      2
#property indicator_width2      2
#property indicator_width3      2
#property indicator_level1      0

extern string info1             = "---------Main settings---------";
extern string TimeFrame         = "Current time frame"; 
extern int    Price             = PRICE_CLOSE;
extern string ValTypeInfo       = "0=SMA;1=HP;2=ZLMA";
extern int    ValType           = 0;
extern int    HPsmoothPer       = 20;
extern int    ZLMAsmoothPer     = 10;
extern int    BarToCalculate    = 1;
 int    SampleSize;
extern int    StartAtCycle      = 1;
extern int    UseTopCycles      = 10;
extern bool   UseCosineForWaves   = true;
extern bool   UseAdditionForSteps = false;
extern bool   UseSquaredAmp       = true;
extern int    MaxCycLength      = 200;
extern bool   SubtractNoise     = false;
extern bool   Interpolate       = true;

extern string info2             ="---------Display settings---------";
extern int    WindowSizePast    = 1001;
extern int    WindowSizeFuture  = 200;

 color  FutureLineColor         = Orange;
 int    FutureLineStyle         = STYLE_DOT;
extern int    FutureLineDisplace = 0;
extern bool   PredictionVisible   = true;
extern bool   ListOfCyclesVisible = true;
extern bool   MultiColor        = true;
 string ListOfCyclesID;
 int    ListOfCyclesCorner      = 1;
 color  ListOfCyclesTextColor   = Gray;
 color  ListOfCyclesValueColor  = PaleVioletRed;

extern string info3             = "---------Cycle list settings---------";
extern bool   UseCycleList      = false;
extern int    Cycle1            = 1;
extern int    Cycle2            = 0;
extern int    Cycle3            = 0;
extern int    Cycle4            = 0;
extern int    Cycle5            = 0;
extern int    Offset            = 0;

extern string info4             = "Detrend & smooth data before cycle detection";
extern bool   DetrendSmoothData = false; 
extern string DTmethodInfo      = "1=HP,2=ZLMA,3=RegLnZL";

extern int    DTmethod          = 1;
extern int    DT_HPper1         = 20;
extern int    DT_HPper2         = 80;
extern int    DT_ZLper1         = 10;
extern int    DT_ZLper2         = 40;
extern int    DT_RegZLsmoothPer = 5;

extern string info5             = "Replace Amplitude by Cycle Strength";
extern bool   UseCycleStrength  = true;

extern string info6             = "---Bartels Signifcance Test Settings---";
extern bool   FilterBartels     = true;
extern int    BartNoCycles      = 5; //considered cycles for significance
extern int    BartSmoothPer     = 2; // Min. Nyquist Period=2; Renko: =0
extern double BartSigLimit      = 50; 
extern bool   SortBartels       = false;

double goertzel[];
double goertzelUa[];
double goertzelUb[];
double goertzelFuture[];
double trend[];
double sourceValues[];

double workPast[][30];
double workFuture[][30];
double cycleBartelsBuffer[];
double sampleValues[];

string name;
int    ListOfCyclesWindow;
string indicatorFileName;
bool   calculateValue;
int    timeFrame;
string DT ;

int init(){
      // код доступен только после оплаты
   }

int deinit(){
   string searchFor    = ListOfCyclesID+":";
   int    searchLength = StringLen(searchFor);
   for (int i=ObjectsTotal()-1; i>=0; i--){
      string oname = ObjectName(i); 
      if (StringSubstr(oname,0,searchLength) == searchFor)ObjectDelete(oname);
   }
   return(0);
}

#define pi 3.141592653589793238462643383279502884197169399375105820974944592

int start(){
      // код доступен только после оплаты
   }

void interpolate(double& buffer[], datetime time, int i){
   for (int n = 1; (i+n) < Bars && Time[i+n] >= time; n++) continue;
   if (buffer[i] == EMPTY_VALUE || buffer[i+n] == EMPTY_VALUE) n=-1;
               double increment = (buffer[i+n] - buffer[i])/ n;
   for (int k = 1; k < n; k++)     buffer[i+k] = buffer[i] + k*increment;
}

double  goeWork1[];
double  goeWork2[];
double  goeWork3[];
double  goeWork4[];
double  cycleLengthBuffer[];
double  cycleAmplitBuffer[];
double  cyclePhaseBuffer[];

int iGoertzel(int forBar, int numBarsPast, double& goeWorkPast[][], int numBarsFuture, double& goeWorkFuture[][], bool useCosine = true, bool useAddition = true, bool squaredAmp=true){
   int sample = MathMin(Bars-forBar,SampleSize-forBar);
   if (ArraySize(goeWork4)!=sample+1){  
       ArrayResize(goeWork1,sample+1); ArrayResize(goeWork2,sample+1);
       ArrayResize(goeWork3,sample+1); ArrayResize(goeWork4,sample+1);
   }
   if (ArraySize(cycleLengthBuffer)!=MaxCycLength+1){
      ArrayResize(cycleLengthBuffer,MaxCycLength+1);
      ArrayResize(cycleAmplitBuffer,MaxCycLength+1);
      ArrayResize(cyclePhaseBuffer ,MaxCycLength+1);
   }
   if (ArrayRange(goeWorkPast,0)  !=numBarsPast)   ArrayResize(goeWorkPast  ,numBarsPast);
   if (ArrayRange(goeWorkFuture,0)!=numBarsFuture) ArrayResize(goeWorkFuture,numBarsFuture);

   double temp1 =  sampleValues[forBar + sample-1];
   double temp2 = (sampleValues[forBar] - temp1) / (sample-1);
   double temp3;
   for (int k = sample; k>0; k--) {
       goeWork4[k] = sampleValues[forBar+k-1] - (temp1 + temp2*(sample-k));
       goeWork3[k] = 0;
   }
   goeWork3[0]=0;

   for (k = 2; k <= MaxCycLength; k++){
       double w = 0;
       double x = 0;
       double y = 0;
       double z = MathPow(k, -1);
       temp1 = 2.0 * MathCos(2.0 * pi * z);
       for (int i = sample; i > 0; i--){
           w = temp1 * x - y + goeWork4[i];
           y = x;
           x = w;
       }
       temp2 = x - y / 2.0 * temp1;
  

Показано первые 50% кода (символов: 24907)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
2 490,70₽ ≈ $30.44