Goertzel browser
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «goertzel_browser_5.602 @freeindecators.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.