ZUP
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «zupp148.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор ZUP (ZigZag) для MetaTrader 4, предназначенный для построения линий ZigZag и обнаружения графических паттернов на ценовом графике. Поддерживает несколько алгоритмов построения ZigZag, включая классический, Ensign, Tauber, Gann Swing, DT-ZigZag и другие. Индикатор способен автоматически выявлять паттерны Гартли, Песавенто, ABCD, 3-Drives, Dragon и пользовательские конфигурации, отображая их на графике в виде линий, треугольников и текстовых меток. Также предоставляет функцию записи информации о найденных паттернах в файлы XML и CSV, а также мониторинг паттернов в реальном времени.
Настройки программы
| Настройка | Описание |
|---|---|
| ______________3_____________ | Заголовок раздела Gartley — Текстовый заголовок группы настроек для паттернов Гартли |
| AlgorithmSearchPatterns | Алгоритм поиска паттернов — Выбор алгоритма для расчёта и поиска паттернов Гартли |
| PotencialsLevels_retXD | Потенциальные уровни retXD — Управление отображением потенциальных уровней возврата XD |
| visibleLevelsABCD | Видимые уровни ABCD — Уровни отображения ABCD и связанные с ними линии |
| maxDepth | Максимальная глубина — Максимальная глубина поиска для алгоритма ZigZag |
| minDepth | Минимальная глубина — Минимальная глубина поиска для алгоритма ZigZag |
| false; (FiboStep) | Шаг Фибоначчи — Включение расширения шага обратного отступа по коэффициенту Фибоначчи |
| IterationStepDepth | Шаг итерации глубины — Шаг изменения глубины при итеративном поиске |
| maxSize_ | Максимальный размер — Максимальный размер для поиска паттернов |
| minSize_ | Минимальный размер — Минимальный размер для поиска паттернов |
| IterationStepSize | Шаг итерации размера — Шаг изменения размера при итеративном поиске |
| maxPercent_ | Максимальный процент — Максимальный процент для поиска паттернов |
| minPercent_ | Минимальный процент — Минимальный процент для поиска паттернов |
| IterationStepPercent | Шаг итерации процента — Шаг изменения процента при итеративном поиске |
| DirectionOfSearchMaxMin | Направление поиска — Направление поиска: от максимума к минимуму или наоборот |
| SelectPattern | Выбор паттерна — Выбор типа отображаемых паттернов Гартли |
| visiblePattern | Видимый паттерн — Строка с маской видимости конкретных паттернов |
| ????? ????????, ?? ???????? ??????????? ?????? ? ????????? ???????? ????????? ????? InfoTF (NumberPattern) | Номер паттерна — Номер паттерна для отображения информации в окне |
| ExtGartleyTypeSearch | Тип поиска Гартли — Тип расширенного поиска паттернов Гартли |
| ExtHiddenPP | Скрытый PP — Режим скрытия паттернов Песавенто |
| ExtGartleyOnOff | Гартли вкл/выкл — Включение или отключение обнаружения паттернов Гартли |
| maxBarToD | Максимальный бар до D — Максимальное количество баров до точки D паттерна |
| 2; (patternInfluence) | Влияние паттерна — Режим влияния паттерна на отображение |
| patternTrue | Паттерн истина — Условие отображения паттерна |
| AllowedBandPatternInfluence | Допустимый диапазон влияния — Допустимый диапазон влияния паттерна |
| RangeForPointD | Диапазон для точки D — Включение отображения диапазона для точки D |
| OldNewRangeForPointD | Старый/новый диапазон D — Переключение между старым и новым диапазоном точки D |
| ExtColorRangeForPointD | Цвет диапазона D — Цвет отображения диапазона точки D |
| VectorOfAMirrorTrend | Вектор зеркального тренда — Режим отображения вектора зеркального тренда |
| VectorOfAMirrorTrendColor | Цвет вектора тренда — Цвет линии вектора зеркального тренда |
| VectorOfAMirrorTrendStyle | Стиль вектора тренда — Стиль линии вектора зеркального тренда |
| shortNamePatterns | Короткие имена паттернов — Отображение коротких имён паттернов вместо полных |
| visibleLineOrTriangle | Линия или треугольник — Выбор отображения линий или треугольников для паттернов |
| PatternLineStyle | Стиль линии паттерна — Стиль линии для отображения паттернов |
| PatternLineWidth | Толщина линии паттерна — Толщина линии для отображения паттернов |
| ExtColorPatterns | Цвет паттернов — Основной цвет отображения паттернов |
| ExtColorPatternList | Список цветов паттернов — Список цветов для различных паттернов |
| ExtDeltaGartley | Дельта Гартли — Допустимое отклонение для паттернов Гартли |
| ExtDeltaGartleyPRZ | Дельта Гартли PRZ — Допустимое отклонение PRZ для паттернов Гартли |
| levelD | Уровень D — Уровень отображения точки D паттерна |
| colorLevelD | Цвет уровня D — Цвет отображения уровня точки D |
| Equilibrium | Равновесие — Включение отображения линий равновесия |
| ReactionType | Тип реакции — Тип реакции для линий равновесия |
| EquilibriumStyle | Стиль равновесия — Стиль линий равновесия |
| EquilibriumWidth | Ширина равновесия — Ширина линий равновесия |
| ColorEquilibrium | Цвет равновесия — Цвет линий равновесия |
| ColorReaction | Цвет реакции — Цвет линий реакции |
| Ext_3Drives | 3 Драйва — Включение обнаружения паттерна 3 Драйва |
| Ext_xO | Расширение xO — Коэффициент расширения для паттерна 3 Драйва |
| Dragon | Дракон — Включение обнаружения паттерна Dragon |
| PeakZZDragon | Пик ZZ Dragon — Количество пиков для поиска паттерна Dragon |
| Ext_4PointPattern | 4-точечный паттерн — Включение обнаружения 4-точечного паттерна |
| _maxXB | Максимум XB — Максимальный коэффициент XB для 4-точечного паттерна |
| ABCD | ABCD — Режим отображения паттерна ABCD |
| searchABCDAlternate | Поиск ABCD альтернативный — Включение альтернативного поиска ABCD |
| ABCDAlternate | Альтернативный ABCD — Альтернативные коэффициенты для ABCD |
| visibleABCDrayZZ | Видимый луч ABCD ZZ — Отображение лучей ABCD на графике ZigZag |
| Ext_noname | Без имени — Включение отображения паттернов без имени |
| 0 - ?? ????????? ???????????????? ??????? (CustomPattern) | Пользовательский паттерн — Тип пользовательского паттерна |
| NameCustomPattern | Имя пользовательского паттерна — Имя для пользовательского паттерна |
| 0.382; //0.5; (minXB) | Минимум XB — Минимальный коэффициент XB для пользовательского паттерна |
| 0.942; //0.618; (maxXB) | Максимум XB — Максимальный коэффициент XB для пользовательского паттерна |
| 0.447; //0.382; (minAC) | Минимум AC — Минимальный коэффициент AC для пользовательского паттерна |
| 0.942; //0.618; (maxAC) | Максимум AC — Максимальный коэффициент AC для пользовательского паттерна |
| 1.144; //1.128; (minBD) | Минимум BD — Минимальный коэффициент BD для пользовательского паттерна |
| 2.128; //1.272; (maxBD) | Максимум BD — Максимальный коэффициент BD для пользовательского паттерна |
| 0.5; //0.618; (minXD) | Минимум XD — Минимальный коэффициент XD для пользовательского паттерна |
| 0.942; //0.886; (maxXD) | Максимум XD — Максимальный коэффициент XD для пользовательского паттерна |
| filtrEquilibrium | Фильтр равновесия — Включение фильтрации по равновесию |
| readFromFileListPatterns | Чтение из файла списка — Режим чтения списка паттернов из файла |
| NameFileListPatterns | Имя файла списка — Имя файла для списка паттернов |
| writeToFileListPatterns | Запись в файл списка — Включение записи списка паттернов в файл |
| picture | Скриншот — Включение автоматического сохранения скриншота паттернов |
| writeInfoPatternsToFileXML | Запись XML — Режим записи информации о паттернах в XML-файл |
| writeInfoPatternsToFileCSV | Запись CSV — Режим записи информации о паттернах в CSV-файл |
| namefileSymbolPeriod | Имя файла с символом и периодом — Включение добавления символа и периода в имя файла |
| InfoPointD | Информация точки D — Отображение информации о точке D паттерна |
| MonitorPatterns | Мониторинг паттернов — Включение мониторинга найденных паттернов на графике |
| TextSize | Размер текста — Размер текста для отображения информации о паттернах |
| ExtGlobalVariableSet | Глобальная переменная — Установка глобальной переменной для текущего паттерна |
| ______________0_____________ | Заголовок раздела ZigZag — Текстовый заголовок группы настроек ZigZag |
| ExtIndicator | Индикатор — Выбор типа индикатора ZigZag |
| ParametresZZforDMLEWA | Параметры ZZ для DMLEWA — Набор предустановленных параметров для DMLEWA |
| minBars | Минимальные бары — Минимальное количество баров для ZigZag |
| minSize | Минимальный размер — Минимальный размер для ZigZag |
| ExtDeviation | Отклонение — Отклонение для расчёта ZigZag |
| ExtBackstep | Обратный шаг — Размер обратного шага для ZigZag |
| noBackstep | Без обратного шага — Отключение обратного шага при расчёте ZigZag |
| RecoverFiltr | Восстановление фильтра — Включение восстановления фильтра ZigZag |
| GrossPeriod | Основной период — Основной таймфрейм для расчёта ZigZag |
| 0.08 (minPercent) | Минимальный процент — Минимальный процент для фильтрации ZigZag |
| ?????????? ????? ??????? ??? ??????? Talex (ExtPoint) | Точка расширения — Точка расширения для расчёта ZigZag Talex |
| StLevel | Уровень St — Уровень St для расчёта ZigZag wellx |
| BigLevel | Уровень Big — Уровень Big для расчёта ZigZag wellx |
| auto | Авто — Автоматический расчёт уровней St и Big |
| minBar | Минимальный бар — Минимальный процент бара для расчёта |
| ExtStyleZZ | Стиль ZZ — Стиль отображения ZigZag |
| ?????????? ????? ??????? (0-???) (ExtMaxBar) | Максимальный бар — Максимальный бар для расчёта ZigZag |
| ExtMinBar | Минимальный бар — Минимальный бар для расчёта ZigZag |
| ExtNumberPeak | Номер пика — Включение нумерации пиков ZigZag |
Поиск по коду файла
#property stacksize 65535
#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 clrMagenta //clrRed
#property indicator_color2 clrGreen
#property indicator_color3 clrOrange
#property indicator_color4 clrLightSkyBlue
#property indicator_color5 clrLemonChiffon
#property indicator_color6 clrMagenta //clrYellow
#property version "2.148"
#property description "ZigZag ????????????? ? ?????????? ?????????"
#property description " "
#property description "?????? ??? ?????? ?????????"
#define pi 3.14159265
#define phi 1.6180339887
extern string ______________3_____________ = "Parameters for Gartley Patterns";
extern int AlgorithmSearchPatterns = 0;
extern int PotencialsLevels_retXD = 1;
extern int visibleLevelsABCD = 3;
extern int maxDepth = 5;
extern int minDepth = 3;
extern bool FiboStep = true; //false;
extern int IterationStepDepth = 2;
extern int maxSize_ = 150;
extern int minSize_ = 15;
extern int IterationStepSize = 3;
extern double maxPercent_ = 10.0;
extern double minPercent_ = 0.4;
extern double IterationStepPercent = 15;
extern bool DirectionOfSearchMaxMin = true;
extern int SelectPattern = 0;
extern string visiblePattern = "000000000000000000000000000000000";
extern int NumberPattern = 1; // ????? ????????, ?? ???????? ??????????? ?????? ? ????????? ???????? ????????? ????? InfoTF
extern int ExtGartleyTypeSearch = 0;
extern int ExtHiddenPP = 1;
extern bool ExtGartleyOnOff = true;
extern int maxBarToD = 15;
extern int patternInfluence = 1; //2;
extern bool patternTrue = true;
extern double AllowedBandPatternInfluence = 1.618;
extern bool RangeForPointD = true;
extern bool OldNewRangeForPointD = false;
extern color ExtColorRangeForPointD = clrBlue;
extern int VectorOfAMirrorTrend = 0;
extern color VectorOfAMirrorTrendColor = clrLawnGreen;
extern int VectorOfAMirrorTrendStyle = STYLE_DASH;
extern bool shortNamePatterns = false;
extern bool visibleLineOrTriangle = true;
extern int PatternLineStyle = 0;
extern int PatternLineWidth = 3;
extern color ExtColorPatterns = clrDodgerBlue;
extern string ExtColorPatternList = "clrBlue,clrDarkGreen,clrFireBrick,clrDeepPink,clrRoyalBlue,clrSienna,clrDodgerBlue,clrCornflowerBlue,clrTomato,clrSlateBlue,clrMediumSlateBlue,clrSlateGray,clrBlueViolet";
extern double ExtDeltaGartley = 0.09;
extern double ExtDeltaGartleyPRZ = 0.02;
extern int levelD = 0;
extern color colorLevelD = clrRed;
extern bool Equilibrium = false;
extern bool ReactionType = false;
extern int EquilibriumStyle = 1;
extern int EquilibriumWidth = 0;
extern color ColorEquilibrium = clrRed;
extern color ColorReaction = clrTomato;
extern bool Ext_3Drives = true;
extern double Ext_xO = 1.618;
extern bool Dragon = true;
extern int PeakZZDragon = 7;
extern bool Ext_4PointPattern = true;
extern double _maxXB = 0.618;
extern int ABCD = 2;
extern bool searchABCDAlternate = false;
extern string ABCDAlternate = "0.618,0.786,0.886,1.128,1.272,1.618,2.618";
extern bool visibleABCDrayZZ = true;
extern bool Ext_noname = false;
extern int CustomPattern = 0; // 0 - ?? ????????? ???????????????? ???????
extern string NameCustomPattern = "Custom";
extern double minXB = 0.67; // 0.382; //0.5;
extern double maxXB = 0.67; // 0.942; //0.618;
extern double minAC = 0.618; // 0.447; //0.382;
extern double maxAC = 0.618; // 0.942; //0.618;
extern double minBD = 2.46; // 1.144; //1.128;
extern double maxBD = 2.46; // 2.128; //1.272;
extern double minXD = 1.272; // 0.5; //0.618;
extern double maxXD = 1.272; // 0.942; //0.886;
extern bool filtrEquilibrium = true;
extern int readFromFileListPatterns = 1;
extern string NameFileListPatterns = "SN";
extern bool writeToFileListPatterns = false;
extern bool picture = false;
extern int writeInfoPatternsToFileXML = 0;
extern int writeInfoPatternsToFileCSV = 0;
extern bool namefileSymbolPeriod = false;
extern bool InfoPointD = false;
extern bool MonitorPatterns = true;
extern int TextSize = 10;
extern bool ExtGlobalVariableSet = false;
extern string ______________0_____________ = "Parameters for ZigZag";
extern int ExtIndicator = 11;
extern int ParametresZZforDMLEWA = 6;
extern int minBars = 8;
extern int minSize = 50;
extern int ExtDeviation = 5;
extern int ExtBackstep = 3;
extern bool noBackstep = false;
extern bool RecoverFiltr = false;
extern int GrossPeriod = 240;
extern double minPercent = 0.0; // 0.08
extern int ExtPoint=11; // ?????????? ????? ??????? ??? ??????? Talex
extern int StLevel = 28;
extern int BigLevel = 32;
extern bool auto = true;
extern double minBar=38.2, maxBar=61.8;
extern bool ExtStyleZZ = true;
extern int ExtMaxBar = 1400; // ?????????? ????? ??????? (0-???)
extern int ExtMinBar = 0;
extern bool ExtNumberPeak = false;
extern bool ExtNumberPeak10 = true;
extern bool ExtNumberPeakLow = true;
extern color ExtNumberPeakColor = clrRed;
extern int ExtNumberPeakFontSize = 11;
extern string ______________1_____________ = "Parameters for fibo Levels";
extern bool ExtFiboDinamic = false;
extern bool ExtFiboStatic = false;
extern int ExtFiboStaticNum = 2;
extern bool ExtFiboCorrectionExpansion = false;
extern color ExtFiboD = clrSienna;
extern color ExtFiboS = clrTeal;
extern int ExtFiboStyle = 2;
extern int ExtFiboWidth = 0;
extern string ______________2_____________ = "Parameters for Pesavento Patterns";
extern int ExtPPWithBars = 0;
extern int ExtHidden = 1;
extern int ExtFractal = 7;
extern int ExtFractalEnd = 7;
extern int ExtFiboChoice = 2;
extern bool ExtFiboZigZag = false;
extern double ExtDelta = 0.04;
extern int ExtDeltaType = 2;
extern int ExtSizeTxt = 9;
extern color ExtLine = clrDarkBlue;
extern color ExtLine886 = clrPurple;
extern color ExtNotFibo = clrBlack;
extern color ExtPesavento = clrBlue; // Yellow; ????? ??? ?????? ????. ????? ????? ??? ??????? ????
extern color ExtGartley886 = clrRed; // GreenYellow;
color colorPPattern;
extern string ______________4_____________ = "Parameters Exp";
extern bool chHL = false;
extern bool PeakDet = false;
extern bool chHL_PeakDet = true;
extern int ExtLabel = 0;
extern int ExtCodLabel = 116;
extern string ______________5_____________ = "Common Parameters";
extern int ExtFiboType = 1;
extern string ExtFiboTypeFree = "0,0.382,0.618,0.764,1,1.236,1.618"; // ???????????????? ?????? ????
extern color ExtObjectColor = clrNONE;
extern int ExtObjectStyle = 1;
extern int ExtObjectWidth = 0;
extern bool ExtDinamic = false; //true; //
extern string ExtVisibleDinamic = "01";
extern bool RefreshStaticNewRayZZ =true;
extern bool ZigZagHighLow = true;
extern bool ExtSendMail = false;
extern bool ExtAlert = false;
extern bool ExtPlayAlert = false;
extern string AlertText = "???????? ????? ???????";
extern bool ExtBack = true;
extern bool ExtSave = false;
extern string info_comment = "0011";
extern bool infoMerrillPattern= false;
extern bool infoTF = true;
extern bool bigText = true;
extern int bigTextSize = 16;
extern color bigTextColor = clrBlue;
extern color bigTextColorBearish = clrBlue;
extern int bigTextX = 50;
extern int bigTextY = 20;
extern bool ExtVisible = true;
extern int ExtComplekt = 3;
double zz[];
double zzL[];
double zzH[];
double nen_ZigZag[];
int _maxbarZZ; // ?????????? ?????, ??????????? ? ??????? ????????.
int _ExtBackstep, _minBars, _minSize;
double fi[];
string fitxt[];
string fitxt100[];
int Sizefi=0,Sizefi_1=0;
color ExtLine_;
double number[64];
string numbertxt[64];
int numberFibo[64];
int numberPesavento[64];
int numberGartley[64];
int numberMix[64];
int numberGilmorQuality[64];
int numberGilmorGeometric[64];
int numberGilmorHarmonic[64];
int numberGilmorArithmetic[64];
int numberGilmorGoldenMean[64];
int numberSquare[64];
int numberCube[64];
int numberRectangle[64];
int numberExt[64];
string nameObj="", nameObjtxt="", save="";
bool descript_b=false;
string PPWithBars="", descript="";
int afr[]={0,0,0,0,0,0,0,0,0,0};
double afrl[]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}, afrh[]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}, afrx[]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
double openTF[]={0.0,0.0,0.0,0.0,0.0}, closeTF[]={0.0,0.0,0.0,0.0,0.0}, lowTF[]={0.0,0.0,0.0,0.0,0.0}, highTF[]={0.0,0.0,0.0,0.0,0.0};
string TF[]={"MN","W1","D1","H4","H1","m30","m15","m5","m1"};
string Period_tf="";
bool afrm=true;
double ExtHL;
double HL,HLp,kk,kj,Angle;
double LowPrim,HighPrim,LowLast,HighLast;
int numLowPrim,numHighPrim,numLowLast,numHighLast,k1,k2,countLow1,countHigh1,shift1,shift2,shift3;
string txtkk="", txtRet="";
int timeFr1new,timeFr2new,timeFr3new;
int countFr;
int countBarEnd=0,TimeBarEnd;
int numBar=0;
int numOb;
bool flagFrNew=false;
bool newRay=true;
bool flagGartley=false;
int perTF;
bool Demo;
bool first=true;
int NewBarTime=0, countbars=0;
int realcnt=0;
double int_to_d=0, int_to_d1=0, int_to_d2=0;
int counted_bars, cbi, iBar;
double ha[],la[],hi,li,si,sip,di,hm,lm,ham[],lam[],him,lim,lLast=0,hLast=0;
int fs=0,fsp,countBar;
int ai,bi,ai0,bi0,aim,bim;
datetime tai,tbi,ti,tmh,tml;
bool fh=false,fl=false,fcount0,PeakDetIni;
/*
double lLast_m=0, hLast_m=0;
int countBarExt; // ??????? ??????? ?????
int countBarl,countBarh;
*/
bool hi_nen;
bool init_zz=true;
int mFibo[]={0,0};
double hBar, lBar;
datetime tiZZ;
string vBullBear = ""; // ?????????? ??? ??????????? ????? ??? ???????? ???????
string vNamePattern = ""; // ?????????? ??? ??????????? ???????????? ????????
string vBullBearToNumberPattern = "";
string vNamePatternToNumberPattern = "";
string _InfoPointD = "";
bool vPatOnOff = false, vPatNew = false, saveParametersZZ=false;
bool vWriteToFilePattern = false, vpicture=false;
datetime TimeForDmin = 0, TimeForDminToNumberPattern;
datetime TimeForDmax = 0, TimeForDmaxToNumberPattern;
double LevelForDmin = 0, LevelForDminToNumberPattern;
double LevelForDmax = 0, LevelForDmaxToNumberPattern;
double save_cenaPointD;
datetime save_timePointD_0;
double PeakCenaX[1],PeakCenaA[1],PeakCenaB[1],PeakCenaC[1],PeakCenaD[1];
datetime PeakTimeX[1],PeakTimeA[1],PeakTimeB[1],PeakTimeC[1],PeakTimeD[1];
string __NamePatterns[1][2];
int __D[1][4];
color __PatColor[1];
int countGartley = 0; // ??????? ?????????
int minBarsToNumberPattern;
int minSizeToNumberPattern;
int vBackstepToNumberPattern;
double minPercentToNumberPattern;
color ColorList[];
int ColorSize;
int countColor = 0;
bool flagExtGartleyTypeSearch2=false; // ?????? ?????????? ?????? ????????? ? ?????? ????????? ???????
int minBarsSave, minBarsX;
bool CustomPat_[33];
string namepatterns[33]=
{"Gartley","Bat","Alternate Bat","Butterfly","Crab","Deep Crab","Leonardo","Shark","Cypher","Nen STAR","5-0",
"A Gartley","A Bat","A Alternate Bat","A Butterfly","A Crab","A Deep Crab","A Leonardo","A Shark","A Cypher","A Nen STAR","A 5-0",
"Black Swan","White Swan","Navarro 200","max Bat","max Gartley","max Butterfly","TOTAL 1","TOTAL 2","TOTAL 3","TOTAL 4","TOTAL"};
int countPat;
int typepatterns[33];
double pp[33][16]= // priznakipatterns=pp
{0.618,0.618,0.382,0.886,1.128,1.618,0.786,0.786,0,0,0,0,0,0,0,1,
0.382,0.5,0.382,0.886,1.618,2.618,0.886,0.886,0,0,0,0,1.272,0,0,1,
0.382,0.382,0.382,0.886,2.0,4.236,1.128,1.128,0,0,0,0,1.618,0,0,1,
0.786,0.786,0.382,0.886,1.618,2.618,1.272,1.618,0,0,0,0,1.272,0,0,1,
0.382,0.618,0.382,0.886,2.236,4.236,1.618,1.618,0,0,0,0,0,0,0,1,
0.886,0.886,0.382,0.886,2.618,4.236,1.618,1.618,0,0,0,0,0,0,0,1,
0.5,0.5,0.382,0.886,1.128,2.618,0.786,0.786,0,0,0,0,0,0,0,1,
0,0,1.128,1.618,1.618,2.236,0.886,1.128,0,0,0,0,0,0,0,1,
0.382,0.618,0,0,0,0,0.786,0.786,1.272,1.414,0,0,0,0,0,1,
0.382,0.618,0,0,0,0,1.272,1.272,1.272,1.414,0,0,0,0,0,1,
1.128,1.618,1.618,2.236,0.5,0.5,0,0,0,0,0,0,0,0,0,0, //5-0
0.618,0.886,1.128,2.618,1.618,1.618,1.272,1.272,0,0,0,0,0,0,0,1,
0.382,0.618,1.128,2.618,2.0,2.618,1.128,1.128,0,0,0,0,0,0.786,0,1,
0.236,0.5,1.128,2.618,2.618,2.618,0.886,0.886,0,0,0,0,0,0.618,0,1,
0.382,0.618,1.128,2.618,1.272,1.272,0.618,0.786,0,0,0,0,0,0.786,0,1,
0.236,0.447,1.128,2.618,1.128,2.618,0.618,0.618,0,0,0,0,0,0,0,1,
0.236,0.382,1.128,2.618,1.128,1.128,0.618,0.618,0,0,0,0,0,0,0,1,
0.382,0.886,1.128,2.618,2.0,2.0,1.272,1.272,0,0,0,0,0,0,0,1,
0.447,0.618,0.618,0.886,0,0,0.886,1.128,0,0,0,0,0,0,0,1,
0,0,0,0,1.618,2.618,1.272,1.272,0,0,1.272,1.414,0,0,0,0,
0,0,0,0,1.618,2.618,0.786,0.786,0,0,1.272,1.414,0,0,0,1,
2.0,2.0,0.447,0.618,0.618,0.886,0,0,0,0,0,0,0,0,0,0,
1.382,2.618,0.236,0.5,1.128,2.0,1.128,2.618,0,0,0,0,0,0,0,1,
0.382,0.724,2.0,4.236,0.5,0.886,0.382,0.886,0,0,0,0,0,0,0,1,
0.786,0.786,0.886,1.128,0,0,0.886,1.128,0,0,0,0,0,0,1,0,
0.382,0.618,0.382,0.886,1.272,2.618,0.886,0.886,0,0,0,0,1.272,0,0,1,
0.382,0.618,0.382,0.886,1.128,2.236,0.618,0.786,0,0,0,0,0,0,0,1,
0.618,0.886,0.382,0.886,1.272,2.618,1.272,1.618,0,0,0,0,1.272,0,0,1,
0.382,0.786,0.382,0.886,1.272,2.618,0.786,0.886,0,0,0,0,0,0,0,1,
0.382,0.786,0.382,0.886,1.618,4.236,1.128,1.618,0,0,0,0,0,0,0,1,
0.236,0.618,1.128,2.618,1.272,2.618,0.618,0.886,0,0,0,0,0,0,0,1,
0.382,0.786,1.128,2.618,1.618,2.618,1.128,1.272,0,0,0,0,0,0,0,1,
0.236,0.786,0.382,2.618,1.272,4.236,0.618,1.618,0,0,0,0,0,0,0,1};
int retresmentXD[][2], retresmentBD[][2], arrXD_BD[2];
double minXB_[33], maxXB_[33], minAC_[33], maxAC_[33], minBD_[33], maxBD_[33], minXD_[33], maxXD_[33], minXXA_[33], maxXXA_[33], minXCD_[33], maxXCD_[33], minXAB_[33], maxXDC_[33];
int levelXD[32,2]; // ????? ????????, ??? ??????
double level_D[32]; // ???????? ???? ?????????????? ?????? ????? D ????????
string level_nameD[32]; // ???????????? ?????????????? ?????? ????? D ????????
double deltapatterns[3][20][2];
double retpatterns[20]={0.146,0.236,0.382,0.447,0.5,0.618,0.707,0.786,0.886,1.0,1.128,1.272,1.414,1.618,2.0,2.236,2.618,3.1416,3.618,4.236};
string retpatternstxt[20]={".146",".236",".382",".447",".5",".618",".707",".786",".886","1.0","1.128","1.272","1.414","1.618","2.0","2.236","2.618","3.14","3.618","4.236"};
double min_DeltaGartley, max_DeltaGartley;
int ret[5][2]; // XD-XB-AC-BD, ?? ?????? ????????? ??? ExtDeltaGartley - 2, ??? ExtDelta - 1, ??? ExtDeltaGartleyPRZ - 0
double _ABCDtype[];
string _ABCDtypetxt[];
int _ABCDsize;
int f=1; // ??? alerta
double mPeak0[5][2]={0,5,0,4,0,3,0,2,0,1}, mPeak1[5][2]={0,5,0,4,0,3,0,2,0,1};
string mMerrillPatterns[32][3]=
{"21435", "M1", "DownTrend",
"21453", "M2", "InvertedHeadAndShoulders",
"24135", "M3", "DownTrend",
"24153", "M4", "InvertedHeadAndShoulders",
"42135", "M5", "Broadening",
"42153", "M6", "InvertedHeadAndShoulders",
"24315", "M7", "*",
"24513", "M8", "InvertedHeadAndShoulders",
"42315", "M9", "*",
"42513", "M10", "InvertedHeadAndShoulders",
"45213", "M11", "InvertedHeadAndShoulders",
"24351", "M12", "*",
"24531", "M13", "Triangle",
"42351", "M14", "*",
"42531", "M15", "UpTrend",
"45231", "M16", "UpTrend",
"13245", "W1", "DownTrend",
"13524", "W2", "DownTrend",
"15324", "W3", "*",
"13224", "W4", "Triangle",
"15342", "W5", "*",
"31254", "W6", "HeadAndShoulders",
"42513", "W7", "HeadAndShoulders",
"51324", "W8", "*",
"31542", "W9", "HeadAndShoulders",
"51324", "W10", "*",
"35124", "W11", "HeadAndShoulders",
"53124", "W12", "Broadening",
"35142", "W13", "HeadAndShoulders",
"53142", "W14", "UpTrend",
"35412", "W15", "HeadAndShoulders",
"53412", "W16", "UpTrend"};
static int endbar = 0;
static double endpr = 0;
bool tik1 = true;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
ObjectDelete(StringConcatenate("fiboS",ExtComplekt,"_"));
ObjectDelete(StringConcatenate("LinePivotZZ","1",ExtComplekt,"_"));
ObjectDelete(StringConcatenate("LinePivotZZ","2",ExtComplekt,"_"));
ObjectDelete(StringConcatenate("#_TextPattern_#",ExtComplekt,"_"));
ObjectDelete(StringConcatenate("#_TextPatternMP_#",ExtComplekt,"_"));
delete_objects_dinamic();
delete_objects1();
delete_objects3();
delete_objects4();
delete_objects_number();
delete_objects_monitor();
if (infoTF) Comment("");
return(0);
}
int start()
{
// код доступен только после оплаты
} // start
void countFractal()
{
int shift;
countLow1=0;
countHigh1=0;
if (flagFrNew && !flagGartley)
{
for(shift=0; shift<=numBar; shift++)
{
if (zzL[shift]>0.0) {countLow1++;}
if (zzH[shift]>0.0) {countHigh1++;}
}
numBar=0;
counted_bars=Bars-4;
}
else
{
if (flagGartley) {counted_bars=0;}
for(shift=0; shift<=countBarEnd; shift++)
{
if (zzL[shift]>0.0) {countLow1++;}
if (zzH[shift]>0.0) {countHigh1++;}
}
}
}
void matriza()
{
if (afrm && ExtHidden<5)
{
afrm=false;
int shift,k,m;
double kl=0,kh=0;
if (ExtMaxBar>0) cbi=ExtMaxBar; else cbi=Bars;
k=0; m=0;
for (shift=0; shift<cbi && k<10; shift++)
{
if (zz[shift]>0)
{
afrx[k]=zz[shift];
afr[k]=Time[shift];
if (zz[shift]==zzL[shift])
{
kl=zzL[shift];
if (ZigZagHighLow) afrl[k]=Low[shift];
else
{
if (k==0) afrl[k]=Low[shift]; else afrl[k]=zzL[shift];
}
afrh[k]=0.0;
}
if (zz[shift]==zzH[shift])
{
kh=zzH[shift];
if (ZigZagHighLow) afrh[k]=High[shift];
else
{
if (k==0) afrh[k]=High[shift]; else afrh[k]=zzH[shift];
}
afrl[k]=0.0;
}
k++;
if (infoMerrillPattern)
{
if (m<6)
{
if (m<5)
{
mPeak0[m][0]=zz[shift];
}
if (m>0)
{
mPeak1[m-1][0]=zz[shift];
}
m++;
}
}
}
}
if (infoMerrillPattern)
{
ArraySort(mPeak1,5,0,MODE_ASCEND);
ArraySort(mPeak0,5,0,MODE_ASCEND);
}
if (PeakDet && chHL_PeakDet)
{
for (k=shift; k>0; k--)
{
if (zzH[k]>0) {kh=zzH[k];}
if (zzL[k]>0) {kl=zzL[k];}
if (kl>0) lam[k]=kl;
if (kh>0) ham[k]=kh;
}
}
if (ExtFiboStatic)
{
if (newRay && mFibo[1]>0) screenFiboS();
if (mFibo[1]==0) screenFiboS();
}
if (ExtFiboDinamic) screenFiboD();
search_Gartley();
_Monitor();
bigTextPattern_etc();
ExtSave=false;
}
if (newRay && ExtNumberPeak) NumberPeak();
newRay=false;
}
void search_Gartley()
{
if (ExtGartleyOnOff || PotencialsLevels_retXD>0)
{
switch (ExtIndicator )
{
case 0 : {_Gartley(StringConcatenate("ExtIndicator=0_",_minBars,"/",_ExtBackstep),_minBars);break;}
case 1 : {_Gartley(StringConcatenate("ExtIndicator=1_",minSize,"/",minPercent),0);break;}
case 2 : {_Gartley(StringConcatenate("ExtIndicator=2_",minBars,"/",minSize),minSize);break;}
case 3 : {_Gartley(StringConcatenate("ExtIndicator=3_",minBars),0);break;}
case 4 : {_Gartley(StringConcatenate("ExtIndicator=4_",minSize),0);break;}
case 5 : {_Gartley(StringConcatenate("ExtIndicator=5_",minBars),0);break;}
case 6 : {_Gartley(StringConcatenate("ExtIndicator=6_",minBars,"/",ExtBackstep),0);break;}
case 7 : {_Gartley(StringConcatenate("ExtIndicator=7_",minBars),0);break;}
case 8 : {_Gartley(StringConcatenate("ExtIndicator=8_",minBars,"/",ExtDeviation),0);break;}
case 10 : {_Gartley(StringConcatenate("ExtIndicator=10_",minBars),0);break;}
case 12 : {_Gartley(StringConcatenate("ExtIndicator=12_",minBars),0);break;}
case 13 : {_Gartley(StringConcatenate("ExtIndicator=13_",minBars,"/",minSize),0);break;}
case 14 : {_Gartley(StringConcatenate("ExtIndicator=14_",minBars),0);break;}
}
if (vPatOnOff && !vPatNew)
{
vPatNew=true;
if (ExtSendMail) _SendMail("There was a pattern",StringConcatenate("on ",Symbol()," ",Period()," pattern ",vBullBear," ",vNamePattern));
}
else if (!vPatOnOff && vPatNew) vPatNew=false;
}
}
void NumberPeak()
{
int n=0,i,endNumber;
string txt="";
if (ExtNumberPeak10) endNumber=iBarShift(Symbol(),Period(),afr[9]); else endNumber=Bars-minBars;
delete_objects_number();
for (i=iBarShift(Symbol(),Period(),afr[0])+1;i<endNumber;i++)
{
if (zz[i]>0)
{
n++;
if (ExtNumberPeakLow)
{
if (zzL[i]>0)
{
txt=DoubleToStr(n,0);
nameObj=StringConcatenate("NumberPeak_",ExtComplekt,"_",n);
ObjectCreate(nameObj,OBJ_TEXT,0,Time[i],zz[i]);
ObjectSetText(nameObj,txt,ExtNumberPeakFontSize,"Arial",ExtNumberPeakColor);
}
}
else
{
txt=DoubleToStr(n,0);
nameObj=StringConcatenate("NumberPeak_",ExtComplekt,"_",n);
ObjectCreate(nameObj,OBJ_TEXT,0,Time[i],zz[i]);
ObjectSetText(nameObj,txt,ExtNumberPeakFontSize,"Arial",ExtNumberPeakColor);
}
}
}
}
void screenFiboS()
{
nameObj=StringConcatenate("fiboS",ExtComplekt,"_");
if (mFibo[1]>0)
{
if (ExtSave)
{
nameObj=StringConcatenate(nameObj,save);
}
}
screenFibo_(ExtFiboS, " ", mFibo[0], mFibo[1], nameObj);
}
void screenFiboD()
{
nameObj=StringConcatenate("fiboD",ExtComplekt,"_");
screenFibo_(ExtFiboD, "", 1, 0, nameObj);
}
void screenFibo_(color colorFibo, string otstup, int a1, int a2, string _nameObj)
{
double fibo_0, fibo_100, fiboPrice, fiboPrice1;
ObjectDelete(_nameObj);
if (!ExtFiboCorrectionExpansion)
{
fibo_0=afrx[a1];fibo_100=afrx[a2];
fiboPrice=afrx[a1]-afrx[a2];fiboPrice1=afrx[a2];
}
else
{
fibo_100=afrx[a1];fibo_0=afrx[a2];
fiboPrice=afrx[a2]-afrx[a1];fiboPrice1=afrx[a1];
}
if (!ExtFiboCorrectionExpansion)
{
ObjectCreate(_nameObj,OBJ_FIBO,0,afr[a1],fibo_0,afr[a2],fibo_100);
}
else
{
ObjectCreate(_nameObj,OBJ_FIBO,0,afr[a2],fibo_0,afr[a1],fibo_100);
}
ObjectSet(_nameObj,OBJPROP_LEVELCOLOR,colorFibo);
ObjectSet(_nameObj,OBJPROP_COLOR,ExtObjectColor);
ObjectSet(_nameObj,OBJPROP_STYLE,ExtObjectStyle);
ObjectSet(_nameObj,OBJPROP_WIDTH,ExtObjectWidth);
ObjectSet(_nameObj,OBJPROP_LEVELSTYLE,ExtFiboStyle);
ObjectSet(_nameObj,OBJPROP_LEVELWIDTH,ExtFiboWidth);
ObjectSet(_nameObj,OBJPROP_BACK,ExtBack);
if (ExtFiboType==0)
{
fibo_standart(fiboPrice, fiboPrice1,"-"+Period_tf+otstup);
}
else if (ExtFiboType==1)
{
fibo_patterns(fiboPrice, fiboPrice1,"-"+Period_tf+otstup);
}
else if (ExtFiboType==2)
{
fibo_custom(fiboPrice, fiboPrice1,"-"+Period_tf+otstup);
}
}
void fibo_standart(double fiboPrice,double fiboPrice1,string fibo)
{
double fi_1[]={0, 0.146, 0.236, 0.382, 0.5, 0.618, 0.764, 0.854, 1.0, 1.236, phi, 2.618, 4.236, 6.854};
string fitxt100_1[]={"0.0", "14.6", "23.6", "38.2", "50.0", "61.8", "76.4", "85.4", "100.0", "123.6", "161.8", "2.618", "423.6", "685.4"};
int i;
Sizefi_1=14;
if (!ExtFiboCorrectionExpansion)
{
ObjectSet(nameObj,OBJPROP_FIBOLEVELS,Sizefi_1);
for (i=0;i<Sizefi_1;i++)
{
ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+i,fi_1[i]);
ObjectSetFiboDescription(nameObj, i, fitxt100_1[i]+" "+" %$"+fibo);
}
}
else
{
ObjectSet(nameObj,OBJPROP_FIBOLEVELS,Sizefi_1+2);
ObjectSet(nameObj,OBJPROP_FIRSTLEVEL,0);
ObjectSetFiboDescription(nameObj, 0, "Fe 1 "+" %$"+fibo);
ObjectSet(nameObj,OBJPROP_FIRSTLEVEL,1);
ObjectSetFiboDescription(nameObj, 1, "Fe 0 "+" %$"+fibo);
for (i=1;i<Sizefi_1;i++)
{
ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+i+2,1+fi_1[i]);
ObjectSetFiboDescription(nameObj, i+2, "Fe "+fitxt100_1[i]+" "+" %$"+fibo);
}
}
}
void fibo_patterns(double fiboPrice,double fiboPrice1,string fibo)
{
double fi_1[]={0.0, 0.382, 0.447, 0.5, 0.618, 0.707, 0.786, 0.854, 0.886, 1.0, 1.128, 1.272, 1.414, phi, 2.0, 2.618, 4.236};
string fitxt100_1[]={"0.0", "38.2", "44.7", "50.0", "61.8", "70.7", "78.6", "85.4", "88.6", "100.0", "112.8", "127.2", "141.4", "161.8", "200.0", "261.8", "423.6"};
int i;
Sizefi_1=17;
if (!ExtFiboCorrectionExpansion)
{
ObjectSet(nameObj,OBJPROP_FIBOLEVELS,Sizefi_1);
for (i=0;i<Sizefi_1;i++)
{
ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+i,fi_1[i]);
ObjectSetFiboDescription(nameObj, i, fitxt100_1[i]+" "+" %$"+fibo);
}
}
else
{
ObjectSet(nameObj,OBJPROP_FIBOLEVELS,Sizefi_1+2);
ObjectSet(nameObj,OBJPROP_FIRSTLEVEL,0);
ObjectSetFiboDescription(nameObj, 0, "Fe 1 "+" %$"+fibo);
ObjectSet(nameObj,OBJPROP_FIRSTLEVEL,1);
ObjectSetFiboDescription(nameObj, 1, "Fe 0 "+" %$"+fibo);
for (i=1;i<Sizefi_1;i++)
{
ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+i+2,1+fi_1[i]);
ObjectSetFiboDescription(nameObj, i+2, "Fe "+fitxt100_1[i]+" "+" %$"+fibo);
}
}
}
void fibo_custom(double fiboPrice,double fiboPrice1,string fibo)
{
int i;
if (!ExtFiboCorrectionExpansion)
{
ObjectSet(nameObj,OBJPROP_FIBOLEVELS,Sizefi);
for (i=0;i<Sizefi;i++)
{
ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+i,fi[i]);
ObjectSetFiboDescription(nameObj, i, fitxt100[i]+" "+" %$"+fibo);
}
}
else
{
ObjectSet(nameObj,OBJPROP_FIBOLEVELS,Sizefi+2);
ObjectSet(nameObj,OBJPROP_FIRSTLEVEL,0);
ObjectSetFiboDescription(nameObj, 0, "Fe 1 "+" %$"+fibo);
ObjectSet(nameObj,OBJPROP_FIRSTLEVEL,1);
ObjectSetFiboDescription(nameObj, 1, "Fe 0 "+" %$"+fibo);
for (i=0;i<Sizefi;i++)
{
if (fi[i]>0)
{
ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+i+2,1+fi[i]);
ObjectSetFiboDescription(nameObj, i+2, "Fe "+fitxt100[i]+" "+" %$"+fibo);
}
}
}
}
void delete_objects1()
{
int i;
string txt="";
counted_bars=0;
for (i=ObjectsTotal()-1; i>=0; i--)
{
txt=ObjectName(i);
if (StringFind(txt,"_" + ExtComplekt + "pl")>-1) ObjectDelete (txt);
if (StringFind(txt,"_" + ExtComplekt + "ph")>-1) ObjectDelete (txt);
}
}
void delete_objects2(string txt1)
{
int i;
string txt="";
for (i=ObjectsTotal()-1; i>=0; i--)
{
txt=ObjectName(i);
if (StringFind(txt,txt1)>-1)ObjectDelete (txt);
}
}
void delete_FiboStrongPattern()
{
int i;
string txt="";
for (i=ObjectsTotal()-1; i>=0; i--)
{
txt=ObjectName(i);
if (StringFind(txt,"_"+ExtComplekt+"StrongPattern_")>-1) ObjectDelete (txt);
}
}
void delete_objects3()
{
int i;
string txt="";
for (i=ObjectsTotal()-1; i>=0; i--)
{
txt=ObjectName(i);
if (StringFind(txt,StringConcatenate("_",ExtComplekt,"StrongPattern_"))>-1) ObjectDelete (txt);
if (StringFind(txt,StringConcatenate("_",ExtComplekt,"Triangle"))>-1) ObjectDelete (txt);
if (StringFind(txt,StringConcatenate("_",ExtComplekt,"ABCDzz"))>-1) ObjectDelete (txt);
if (StringFind(txt,StringConcatenate("_",ExtComplekt,"Line"))>-1) ObjectDelete (txt);
if (RangeForPointD)
{
if (StringFind(txt,StringConcatenate("_",ExtComplekt,"PointD"))>-1) ObjectDelete (txt);
}
if (StringFind(txt,StringConcatenate("_",ExtComplekt,"Equilibrium"))>-1) ObjectDelete (txt);
if (StringFind(txt,StringConcatenate("_",ExtComplekt,"Reaction"))>-1) ObjectDelete (txt);
if (StringFind(txt,StringConcatenate("_",ExtComplekt,"pg"))>-1) ObjectDelete (txt);
if (bigText)
{
if (StringFind(txt,StringConcatenate("#_TextPattern_#",ExtComplekt,"_"))>-1) ObjectDelete (txt);
}
vBullBearToNumberPattern="";
vNamePatternToNumberPattern="";
if (VectorOfAMirrorTrend>0) if (StringFind(txt,StringConcatenate("_",ExtComplekt,"VectorOfAMirrorTrend"))>-1) ObjectDelete (txt);
if (ExtGartleyTypeSearch>0)
{
ArrayInitialize(PeakCenaX,0);
ArrayInitialize(PeakCenaA,0);
ArrayInitialize(PeakCenaB,0);
ArrayInitialize(PeakCenaC,0);
ArrayInitialize(PeakCenaD,0);
ArrayInitialize(PeakTimeX,0);
ArrayInitialize(PeakTimeA,0);
ArrayInitialize(PeakTimeB,0);
ArrayInitialize(PeakTimeC,0);
ArrayInitialize(PeakTimeD,0);
__NamePatterns[0][0]="";
__NamePatterns[0][1]="";
ArrayInitialize(__D,0);
ArrayInitialize(__PatColor,0);
}
}
}
void delete_objects4()
{
int i;
string txt="";
for (i=ObjectsTotal()-1; i>=0; i--)
{
txt=ObjectName(i);
if (StringFind(txt,StringConcatenate("_",ExtComplekt,"pg"))>-1) ObjectDelete (txt);
}
}
void delete_objects_monitor()
{
int i;
string txt="";
for (i=ObjectsTotal()-1; i>=0; i--)
{
txt=ObjectName(i);
if (StringFind(txt,StringConcatenate("_",ExtComplekt,"_","MonitorPatterns_"))>-1) ObjectDelete(txt);
}
}
void delete_objects_number()
{
int i;
string txt="";
for (i=ObjectsTotal()-1; i>=0; i--)
{
txt=ObjectName(i);
if (StringFind(txt,StringConcatenate("NumberPeak_",ExtComplekt,"_"))>-1) ObjectDelete (txt);
}
}
void delete_objects_dinamic()
{
ObjectDelete(StringConcatenate("fiboD",ExtComplekt,"_"));
}
void ang_AZZ_()
{
int i,n;
bool endCyklDirection=true;
bool endSearchPattern=false;
int vSize;
double vPercent_, vPercent;
if (ExtMaxBar>0) cbi=ExtMaxBar; else cbi=Bars-1;
if (ExtIndicator==11)
{
if (AlgorithmSearchPatterns==1)
{
if (DirectionOfSearchMaxMin) vSize = maxSize_; else vSize = minSize_;
}
else
{
if (DirectionOfSearchMaxMin) vPercent_ = maxPercent_; else vPercent_ = minPercent_;
}
}
while (endCyklDirection)
{
if (ExtIndicator==11)
{
if (ExtLabel>0) {ArrayInitialize(la,0.0); ArrayInitialize(ha,0.0);}
ArrayInitialize(zz,0);ArrayInitialize(zzL,0);ArrayInitialize(zzH,0);
ti=0; fs=0; fsp=0; tbi=0; tai=0; si=0;
if (AlgorithmSearchPatterns==1)
{
if (DirectionOfSearchMaxMin)
{
if (vSize < minSize_)
{
if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) vSize=minSizeToNumberPattern;
else vSize=minSize_;
endSearchPattern=true;
}
di=vSize*Point/2;
vSize-=IterationStepSize;
}
else
{
if (vSize > maxSize_)
{
if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) vSize=minSizeToNumberPattern;
else vSize=minSize_;
endSearchPattern=true;
}
di=vSize*Point/2;
vSize+=IterationStepSize;
}
}
else
{
if (DirectionOfSearchMaxMin)
{
if (vPercent_ < minPercent_)
{
if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) vPercent_=minPercentToNumberPattern;
else vPercent_=minPercent_;
endSearchPattern=true;
}
vPercent=vPercent_;
vPercent_=vPercent_*(1-IterationStepPercent/100);
}
else
{
if (vPercent_ > maxPercent_)
{
if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) vPercent_=minPercentToNumberPattern;
else vPercent_=minPercent;
endSearchPattern=true;
}
vPercent=vPercent_;
vPercent_=vPercent_*(1+IterationStepPercent/100);
}
}
if (flagExtGartleyTypeSearch2)
{
endSearchPattern=true;
if (AlgorithmSearchPatterns==1)
{
vSize=minSizeToNumberPattern;
}
else
{
vPercent_=minPercentToNumberPattern;
}
}
}
else
{
endCyklDirection=false;
endSearchPattern=true;
}
for (i=cbi; i>=ExtMinBar; i--)
{
if (ti<Time[i]) {fsp=fs; sip=si;} ti=Time[i];
if (ExtIndicator==11)
{
if (AlgorithmSearchPatterns==2) di=vPercent*Close[i]/2/100;
}
else if (minSize==0 && minPercent!=0) di=minPercent*Close[i]/2/100;
if (High[i]>si+di && Low[i]<si-di) // ??????? ??? ?? ????????? ? ???????? ??????? di
{
if (fs==1) si=High[i]-di; //
if (fs==2) si=Low[i]+di; //
}
else // ?? ??????? ???
{
if (fs==1)
{
if (High[i]>=si+di) si=High[i]-di; //
else if (Low[i]<si-di) si=Low[i]+di; //
}
if (fs==2)
{
if (Low[i]<=si-di) si=Low[i]+di; //
else if (High[i]>si+di) si=High[i]-di; //
}
}
if (i>cbi-1) {si=(High[i]+Low[i])/2;}
if (si>sip) fs=1; // ????? ??????????
if (si<sip) fs=2; // ????? ??????????
if (fs==1 && fsp==2) // ????? ???????? ? ??????????? ?? ??????????
{
hm=High[i];
bi=iBarShift(Symbol(),Period(),tbi);
zz[bi]=Low[bi];
zzL[bi]=Low[bi];
tai=Time[i];
fsp=fs;
si=High[i]-di;
sip=si;
if ((ExtIndicator!=11 || endSearchPattern) && ExtLabel>0)
{
ha[i]=High[i]; la[bi]=Low[bi]; la[i]=0;
tmh=Time[i]; ha[i]=High[i]; la[i]=0; // ??????????? ????? ?? ?????????? ????
}
}
if (fs==2 && fsp==1) // ????? ???????? ? ??????????? ?? ??????????
{
lm=Low[i];
ai=iBarShift(Symbol(),Period(),tai);
zz[ai]=High[ai];
zzH[ai]=High[ai];
tbi=Time[i];
si=Low[i]+di;
fsp=fs;
sip=si;
if ((ExtIndicator!=11 || endSearchPattern) && ExtLabel>0)
{
ha[ai]=High[ai]; ha[i]=0; la[i]=Low[i];
tml=Time[i]; ha[i]=0; la[i]=Low[i]; // ??????????? ????? ?? ?????????? ????
}
}
if (fs==1 && High[i]>hm) {hm=High[i]; tai=Time[i]; si=High[i]-di;}
if (fs==2 && Low[i]<lm) {lm=Low[i]; tbi=Time[i]; si=Low[i]+di;}
if ((ExtIndicator!=11 || endSearchPattern))
{
if (chHL && chHL_PeakDet && ExtLabel==0) {ha[i]=si+di; la[i]=si-di;}
if (i==0)
{
ai0=iBarShift(Symbol(),Period(),tai);
bi0=iBarShift(Symbol(),Period(),tbi);
if (fs==1)
{
for (n=bi0-1; n>=0; n--) {zzH[n]=0; zz[n]=0; if (ExtLabel>0) ha[n]=0;}
zz[ai0]=High[ai0]; zzH[ai0]=High[ai0]; zzL[ai0]=0; if (ExtLabel>0) ha[ai0]=High[ai0];
}
if (fs==2)
{
for (n=ai0-1; n>=0; n--) {zzL[n]=0; zz[n]=0; if (ExtLabel>0) la[n]=0;}
zz[bi0]=Low[bi0]; zzL[bi0]=Low[bi0]; zzH[bi0]=0; if (ExtLabel>0) la[bi0]=Low[bi0];
}
if (ExtLabel>0)
{
if (fs==1) {aim=iBarShift(Symbol(),0,tmh); if (aim<bi0) ha[aim]=High[aim];}
else if (fs==2) {bim=iBarShift(Symbol(),0,tml); if (bim<ai0) la[bim]=Low[bim];}
}
}
}
}
if (ExtIndicator==11)
{
if (endSearchPattern) return;
_Gartley(StringConcatenate("ExtIndicator=11_",vSize,"/",vPercent), 0);
if (saveParametersZZ)
{
saveParametersZZ=false;
if (AlgorithmSearchPatterns==1) minSizeToNumberPattern=vSize;
else minPercentToNumberPattern=vPercent;
}
if (ExtGartleyTypeSearch==0 && vPatOnOff) return;
}
}
}
void GannSwing()
{
int i,n;
int vBars = minBars;
bool endCyklDirection=true;
bool endSearchPattern=false;
double lLast_m=0, hLast_m=0;
int countBarExt=0; // ??????? ??????? ?????
int countBarl=0,countBarh=0;
fs=0; ti=0;
if (ExtMaxBar>0) cbi=ExtMaxBar; else cbi=Bars-1;
if (ExtIndicator==11)
{
if (DirectionOfSearchMaxMin) vBars = minBars; else vBars = 0;
}
while (endCyklDirection)
{
if (ExtLabel>0) {ArrayInitialize(la,0.0); ArrayInitialize(ha,0.0);}
ArrayInitialize(zz,0);ArrayInitialize(zzL,0);ArrayInitialize(zzH,0);
if (ExtIndicator==11)
{
lLast=0; lLast_m=0; hLast_m=0; fs=0; ti=0;
if (DirectionOfSearchMaxMin)
{
if (vBars < 0)
{
if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) vBars=minBarsToNumberPattern;
else vBars=minBars;
endSearchPattern=true;
}
vBars--;
}
else
{
if (vBars > minBars)
{
if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) vBars=minBarsToNumberPattern;
else vBars=minBars;
endSearchPattern=true;
}
vBars++;
}
if (flagExtGartleyTypeSearch2)
{
endSearchPattern=true;
vBars=minSizeToNumberPattern;
}
}
else
{
vBars=minBars;
endCyklDirection=false;
endSearchPattern=true;
}
for (i=cbi; i>=ExtMinBar; i--)
{
if (lLast==0) {lLast=Low[i]; hLast=High[i]; ai=i; bi=i;}
if (ti!=Time[i])
{
ti=Time[i];
if (lLast_m==0 && hLast_m==0)
{
if (lLast>Low[i] && hLast<High[i]) // ??????? ???
{
lLast=Low[i];hLast=High[i];lLast_m=Low[i];hLast_m=High[i];countBarExt++;
if (fs==1) {countBarl=countBarExt; ai=i; tai=Time[i];}
else if (fs==2) {countBarh=countBarExt; bi=i; tbi=Time[i];}
else {countBarl++;countBarh++;}
}
else if (lLast<=Low[i] && hLast<High[i]) // ????????? ?? ??????? ???? ??????????
{
lLast_m=0;hLast_m=High[i];countBarl=0;countBarExt=0;
if (fs!=1) countBarh++;
else {lLast=Low[i]; hLast=High[i]; lLast_m=0; hLast_m=0; ai=i; tai=Time[i];}
}
else if (lLast>Low[i] && hLast>=High[i]) // ????????? ?? ??????? ???? ??????????
{
lLast_m=Low[i];hLast_m=0;countBarh=0;countBarExt=0;
if (fs!=2) countBarl++;
else {lLast=Low[i]; hLast=High[i]; lLast_m=0; hLast_m=0; bi=i; tbi=Time[i];}
}
}
else if (lLast_m>0 && hLast_m>0) // ??????? ??? (??????????)
{
if (lLast_m>Low[i] && hLast_m<High[i]) // ??????? ???
{
lLast=Low[i];hLast=High[i];lLast_m=Low[i];hLast_m=High[i];countBarExt++;
if (fs==1) {countBarl=countBarExt; ai=i; tai=Time[i];}
else if (fs==2) {countBarh=countBarExt; bi=i; tbi=Time[i];}
else {countBarl++;countBarh++;}
}
else if (lLast_m<=Low[i] && hLast_m<High[i]) // ????????? ?? ??????? ???? ??????????
{
lLast_m=0;hLast_m=High[i];countBarl=0;countBarExt=0;
if (fs!=1) countBarh++;
else {lLast=Low[i]; hLast=High[i]; lLast_m=0; hLast_m=0; ai=i; tai=Time[i];}
}
else if (lLast_m>Low[i] && hLast_m>=High[i]) // ????????? ?? ??????? ???? ??????????
{
lLast_m=Low[i];hLast_m=0;countBarh=0;countBarExt=0;
if (fs!=2) countBarl++;
else {lLast=Low[i]; hLast=High[i]; lLast_m=0; hLast_m=0; bi=i; tbi=Time[i];}
}
}
else if (lLast_m>0)
{
if (lLast_m>Low[i] && hLast<High[i]) // ??????? ???
{
lLast=Low[i];hLast=High[i];lLast_m=Low[i];hLast_m=High[i];countBarExt++;
if (fs==1) {countBarl=countBarExt; ai=i; tai=Time[i];}
else if (fs==2) {countBarh=countBarExt; bi=i; tbi=Time[i];}
else {countBarl++;countBarh++;}
}
else if (lLast_m<=Low[i] && hLast<High[i]) // ????????? ?? ??????? ???? ??????????
{
lLast_m=0;hLast_m=High[i];countBarl=0;countBarExt=0;
if (fs!=1) countBarh++;
else {lLast=Low[i]; hLast=High[i]; lLast_m=0; hLast_m=0; ai=i; tai=Time[i];}
}
else if (lLast_m>Low[i] && hLast>=High[i]) // ????????? ?? ??????? ???? ??????????
{
lLast_m=Low[i];hLast_m=0;countBarh=0;countBarExt=0;
if (fs!=2) countBarl++;
else {lLast=Low[i]; hLast=High[i]; lLast_m=0; hLast_m=0; bi=i; tbi=Time[i];}
}
}
else if (hLast_m>0)
{
if (lLast>Low[i] && hLast_m<High[i]) // ??????? ???
{
lLast=Low[i];hLast=High[i];lLast_m=Low[i];hLast_m=High[i];countBarExt++;
if (fs==1) {countBarl=countBarExt; ai=i; tai=Time[i];}
else if (fs==2) {countBarh=countBarExt; bi=i; tbi=Time[i];}
else {countBarl++;countBarh++;}
}
else if (lLast<=Low[i] && hLast_m<High[i]) // ????????? ?? ??????? ???? ??????????
{
lLast_m=0;hLast_m=High[i];countBarl=0;countBarExt=0;
if (fs!=1) countBarh++;
else {lLast=Low[i]; hLast=High[i]; lLast_m=0; hLast_m=0; ai=i; tai=Time[i];}
}
else if (lLast>Low[i] && hLast_m>=High[i]) // ????????? ?? ??????? ???? ??????????
{
lLast_m=Low[i];hLast_m=0;countBarh=0;countBarExt=0;
if (fs!=2) countBarl++;
else {lLast=Low[i]; hLast=High[i]; lLast_m=0; hLast_m=0; bi=i; tbi=Time[i];}
}
}
if (fs==0)
{
if (lLast<lLast_m && hLast>hLast_m) // ?????????? ???
{
lLast=Low[i]; hLast=High[i]; ai=i; bi=i; countBarl=0;countBarh=0;countBarExt=0;
}
if (countBarh>countBarl && countBarh>countBarExt && countBarh>vBars)
{
lLast=Low[i]; hLast=High[i]; lLast_m=0; hLast_m=0;
fs=1;countBarh=0;countBarl=0;countBarExt=0;
zz[bi]=Low[bi];
zzL[bi]=Low[bi];
zzH[bi]=0;
ai=i;
tai=Time[i];
}
else if (countBarl>countBarh && countBarl>countBarExt && countBarl>vBars)
{
lLast=Low[i]; hLast=High[i]; lLast_m=0; hLast_m=0;
fs=2;countBarl=0;countBarh=0;countBarExt=0;
zz[ai]=High[ai];
zzH[ai]=High[ai];
zzL[ai]=0;
bi=i;
tbi=Time[i];
}
}
else
{
if (lLast_m==0 && hLast_m==0)
{
countBarl=0;countBarh=0;countBarExt=0;
}
if (fs==1)
{
if (countBarl>countBarh && countBarl>countBarExt && countBarl>vBars) // ?????????? ????? ????? ?????????.
{
ai=iBarShift(Symbol(),Period(),tai);
fs=2;
countBarl=0;
zz[ai]=High[ai];
zzH[ai]=High[ai];
zzL[ai]=0;
bi=i;
if ((ExtIndicator!=11 || endSearchPattern) && ExtLabel>0)
{
ha[ai]=High[ai]; la[ai]=0; // ??????????? ????? ?? ??????????
tml=Time[i]; ha[i]=0; la[i]=Low[i]; // ??????????? ????? ?? ?????????? ????
}
tbi=Time[i];
lLast=Low[i]; hLast=High[i]; lLast_m=0; hLast_m=0;
for (n=0;countBarExt<vBars;n++)
{
if (lLast<Low[i+n+1] && hLast>High[i+n+1]) {countBarExt++; countBarh++; lLast=Low[i+n+1]; hLast=High[i+n+1]; hLast_m=High[i];}
else break;
}
lLast=Low[i]; hLast=High[i];
}
}
if (fs==2)
{
if (countBarh>countBarl && countBarh>countBarExt && countBarh>vBars) // ?????????? ????? ????? ?????????.
{
bi=iBarShift(Symbol(),Period(),tbi);
fs=1;
countBarh=0;
zz[bi]=Low[bi];
zzL[bi]=Low[bi];
zzH[bi]=0;
ai=i;
if ((ExtIndicator!=11 || endSearchPattern) && ExtLabel>0)
{
ha[bi]=0; la[bi]=Low[bi]; // ??????????? ????? ?? ?????????
tmh=Time[i]; ha[i]=High[i]; la[i]=0; // ??????????? ????? ?? ?????????? ????
}
tai=Time[i];
lLast=Low[i]; hLast=High[i]; lLast_m=0; hLast_m=0;
for (n=0;countBarExt<vBars;n++)
{
if (lLast<Low[i+n+1] && hLast>High[i+n+1]) {countBarExt++; countBarl++; lLast=Low[i+n+1]; hLast=High[i+n+1]; lLast_m=Low[i];}
else break;
}
lLast=Low[i]; hLast=High[i];
}
}
}
}
if ((ExtIndicator!=11 || endSearchPattern))
{
if (i==0)
{
if (hLast<High[i] && fs==1) // ????????? ?? ??????? ???? ??????????
{
ai=i; tai=Time[i]; zz[ai]=High[ai]; zzH[ai]=High[ai]; zzL[ai]=0;
if ((ExtIndicator!=11 || endSearchPattern) && ExtLabel>0) {ha[ai]=High[ai]; la[ai]=0;} // ???????? ?????
}
else if (lLast>Low[i] && fs==2) // ????????? ?? ??????? ???? ??????????
{
bi=i; tbi=Time[i]; zz[bi]=Low[bi]; zzL[bi]=Low[bi]; zzH[bi]=0;
if ((ExtIndicator!=11 || endSearchPattern) && ExtLabel>0) {la[bi]=Low[bi]; ha[bi]=0;} // ???????? ?????
}
ai0=iBarShift(Symbol(),Period(),tai);
bi0=iBarShift(Symbol(),Period(),tbi);
if (bi0>1) if (fs==1)
{
for (n=bi0-1; n>=0; n--) {zzH[n]=0.0; zz[n]=0.0; if (ExtLabel>0) ha[n]=0;}
zz[ai0]=High[ai0]; zzH[ai0]=High[ai0]; zzL[ai0]=0.0; if (ExtLabel>0) ha[ai0]=High[ai0];
}
if (ai0>1) if (fs==2)
{
for (n=ai0-1; n>=0; n--) {zzL[n]=0.0; zz[n]=0.0; if (ExtLabel>0) la[n]=0;}
zz[bi0]=Low[bi0]; zzL[bi0]=Low[bi0]; zzH[bi0]=0.0; if (ExtLabel>0) la[bi0]=Low[bi0];
}
if (ExtLabel>0)
{
if (fs==1) {aim=iBarShift(Symbol(),0,tmh); if (aim<bi0) ha[aim]=High[aim];}
else if (fs==2) {bim=iBarShift(Symbol(),0,tml); if (bim<ai0) la[bim]=Low[bim];}
}
if (ti<Time[1]) i=2;
}
}
}
if (ExtIndicator==11)
{
if (endSearchPattern) return;
_Gartley(StringConcatenate("ExtIndicator=11_",vBars), 0);
if (saveParametersZZ)
{
saveParametersZZ=false;
minBarsToNumberPattern=vBars;
}
if (ExtGartleyTypeSearch==0 && vPatOnOff) return;
}
}
}
/*------------------------------------------------------------------+
| ZigZag_Talex, ???? ????? ???????? ?? ???????. ?????????? ????? |
| ???????? ??????? ?????????? ExtPoint. |
+------------------------------------------------------------------*/
void ZZTalex()
{
int i,j,k,zzbarlow,zzbarhigh,curbar,curbar1,curbar2,EP,Mbar[];
double curpr,Mprice[];
bool flag,fd;
int vBars = minBars;
bool endCyklDirection=true;
bool endSearchPattern=false;
if (DirectionOfSearchMaxMin) vBars = maxDepth; else vBars = minDepth;
ArrayResize(Mbar,ExtPoint);
ArrayResize(Mprice,ExtPoint);
while (endCyklDirection)
{
ArrayInitialize(zz,0);ArrayInitialize(zzL,0);ArrayInitialize(zzH,0);
ArrayInitialize(Mbar,0);ArrayInitialize(Mprice,0);
if (ExtIndicator==11)
{
if (DirectionOfSearchMaxMin)
{
if (vBars < 0)
{
if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) vBars=minBarsToNumberPattern;
else vBars=minBars;
endSearchPattern=true;
}
vBars-=IterationStepDepth;
}
else
{
if (vBars > minBars)
{
if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) vBars=minBarsToNumberPattern;
else vBars=minBars;
endSearchPattern=true;
}
vBars+=IterationStepDepth;
}
if (flagExtGartleyTypeSearch2)
{
endSearchPattern=true;
vBars=minSizeToNumberPattern;
}
}
else
{
vBars=minBars;
endCyklDirection=false;
endSearchPattern=true;
}
EP=ExtPoint;
zzbarlow=iLowest(NULL,0,MODE_LOW,vBars,0);
zzbarhigh=iHighest(NULL,0,MODE_HIGH,vBars,0);
if(zzbarlow<zzbarhigh) {curbar=zzbarlow; curpr=Low[zzbarlow];}
if(zzbarlow>zzbarhigh) {curbar=zzbarhigh; curpr=High[zzbarhigh];}
if(zzbarlow==zzbarhigh){curbar=zzbarlow;curpr=funk1(zzbarlow, vBars);}
j=0;
endpr=curpr;
endbar=curbar;
Mbar[j]=curbar;
Mprice[j]=curpr;
EP--;
if(curpr==Low[curbar]) flag=true;
else flag=false;
fl=flag;
i=curbar+1;
while(EP>0)
{
if(flag)
{
while(i<=Bars-1)
{
curbar1=iHighest(NULL,0,MODE_HIGH,vBars,i);
curbar2=iHighest(NULL,0,MODE_HIGH,vBars,curbar1);
if(curbar1==curbar2){curbar=curbar1;curpr=High[curbar];flag=false;i=curbar+1;j++;break;}
else i=curbar2;
}
Mbar[j]=curbar;
Mprice[j]=curpr;
EP--;
}
if(EP==0) break;
if(!flag)
{
while(i<=Bars-1)
{
curbar1=iLowest(NULL,0,MODE_LOW,vBars,i);
curbar2=iLowest(NULL,0,MODE_LOW,vBars,curbar1);
if(curbar1==curbar2){curbar=curbar1;curpr=Low[curbar];flag=true;i=curbar+1;j++;break;}
else i=curbar2;
}
Mbar[j]=curbar;
Mprice[j]=curpr;
EP--;
}
}
/* ??????????? ?????? */
if(Mprice[0]==Low[Mbar[0]])fd=true; else fd=false;
for(k=0;k<=ExtPoint-1;k++)
{
if(k==0)
{
if(fd==true)
{
Mbar[k]=iLowest(NULL,0,MODE_LOW,Mbar[k+1]-Mbar[k],Mbar[k]);Mprice[k]=Low[Mbar[k]];endbar=vBars;
}
if(fd==false)
{
Mbar[k]=iHighest(NULL,0,MODE_HIGH,Mbar[k+1]-Mbar[k],Mbar[k]);Mprice[k]=High[Mbar[k]];endbar=vBars;
}
}
if(k<ExtPoint-2)
{
if(fd==true)
{
Mbar[k+1]=iHighest(NULL,0,MODE_HIGH,Mbar[k+2]-Mbar[k]-1,Mbar[k]+1);Mprice[k+1]=High[Mbar[k+1]];
}
if(fd==false)
{
Mbar[k+1]=iLowest(NULL,0,MODE_LOW,Mbar[k+2]-Mbar[k]-1,Mbar[k]+1);Mprice[k+1]=Low[Mbar[k+1]];
}
}
if(fd==true)fd=false;else fd=true;
/* ????????? ZigZag'a */
zz[Mbar[k]]=Mprice[k];
if (k==0)
{
if (Mprice[k]>Mprice[k+1])
{
zzH[Mbar[k]]=Mprice[k];
}
else
{
zzL[Mbar[k]]=Mprice[k];
}
}
else
{
if (Mprice[k]>Mprice[k-1])
{
zzH[Mbar[k]]=Mprice[k];
}
else
{
zzL[Mbar[k]]=Mprice[k];
}
}
}
if (ExtIndicator==11)
{
if (endSearchPattern) return;
_Gartley(StringConcatenate("ExtIndicator=11_",vBars), 0);
if (saveParametersZZ)
{
saveParametersZZ=false;
minBarsToNumberPattern=vBars;
}
if (ExtGartleyTypeSearch==0 && vPatOnOff) return;
}
}
}
/*-------------------------------------------------------------------+
/ ?????? ??? ?????? ? ??????? ???? (???? ?? ???????) ????? ????????? |
/ ????? ???????????? ? ???????? ???????. ??? ZigZag_Talex. |
/-------------------------------------------------------------------*/
double funk1(int zzbarlow, int ExtDepth)
{
double pr;
int fbarlow,fbarhigh;
fbarlow=iLowest(NULL,0,MODE_LOW,ExtDepth,zzbarlow);
fbarhigh=iHighest(NULL,0,MODE_HIGH,ExtDepth,zzbarlow);
if(fbarlow>fbarhigh) pr=High[zzbarlow];
if(fbarlow<fbarhigh) pr=Low[zzbarlow];
if(fbarlow==fbarhigh)
{
fbarlow=iLowest(NULL,0,MODE_LOW,2*ExtDepth,zzbarlow);
fbarhigh=iHighest(NULL,0,MODE_HIGH,2*ExtDepth,zzbarlow);
if(fbarlow>fbarhigh) pr=High[zzbarlow];
if(fbarlow<fbarhigh) pr=Low[zzbarlow];
if(fbarlow==fbarhigh)
{
fbarlow=iLowest(NULL,0,MODE_LOW,3*ExtDepth,zzbarlow);
fbarhigh=iHighest(NULL,0,MODE_HIGH,3*ExtDepth,zzbarlow);
if(fbarlow>fbarhigh) pr=High[zzbarlow];
if(fbarlow<fbarhigh) pr=Low[zzbarlow];
}
}
return(pr);
}
void ZigZag_tauber()
{
int shift, lasthighpos,lastlowpos;
double res;
double curlow,curhigh,lasthigh,lastlow;
int vSize;
bool endCyklDirection=true;
bool endSearchPattern=false;
int metka=0; // =0 - ?? ??????? ???????? ZZ. =1 - ???? ????? ??????????. =2 - ???? ????? ?????????.
double peak, wrpeak;
if (ExtIndicator==11)
{
if (DirectionOfSearchMaxMin) vSize = maxSize_; else vSize = minSize_;
}
while (endCyklDirection)
{
if (ExtLabel>0) {ArrayInitialize(la,0.0); ArrayInitialize(ha,0.0);}
ArrayInitialize(zz,0);ArrayInitialize(zzL,0);ArrayInitialize(zzH,0);
if (ExtIndicator==11)
{
if (DirectionOfSearchMaxMin)
{
if (vSize < minSize_)
{
if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) vSize=minSizeToNumberPattern;
else vSize=minSize_;
endSearchPattern=true;
}
di=minSize*Point;
vSize-=IterationStepSize;
}
else
{
if (vSize > maxSize_)
{
if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) vSize=minSizeToNumberPattern;
else vSize=minSize_;
endSearchPattern=true;
}
di=minSize*Point;
vSize+=IterationStepSize;
}
if (flagExtGartleyTypeSearch2)
{
endSearchPattern=true;
vSize=minSizeToNumberPattern;
}
}
else
{
vSize=minSize;
endCyklDirection=false;
endSearchPattern=true;
}
GetHigh(0,Bars,0.0,0,vSize);
lasthigh=-1; lasthighpos=-1;
lastlow=-1; lastlowpos=-1;
for(shift=Bars; shift>=0; shift--)
{
curlow=zzL[shift];
curhigh=zzH[shift];
if((curlow==0)&&(curhigh==0)) continue;
if(curhigh!=0)
{
if(lasthigh>0)
{
if(lasthigh<curhigh) zzH[lasthighpos]=0;
else zzH[shift]=0;
}
if(lasthigh<curhigh || lasthigh<0)
{
lasthigh=curhigh;
lasthighpos=shift;
}
lastlow=-1;
}
if(curlow!=0)
{
if(lastlow>0)
{
if(lastlow>curlow) zzL[lastlowpos]=0;
else zzL[shift]=0;
}
if((curlow<lastlow)||(lastlow<0))
{
lastlow=curlow;
lastlowpos=shift;
}
lasthigh=-1;
}
}
for(shift=Bars-1; shift>=0; shift--)
{
zz[shift]=zzL[shift];
res=zzH[shift];
if(res!=0.0) zz[shift]=res;
}
if ((ExtIndicator!=11 || endSearchPattern) && ExtLabel>0) // ??????????? ?????
{
for(shift=Bars-1; shift>=0; shift--)
{
if (zz[shift]>0)
{
if (zzH[shift]>0)
{
peak=High[shift]; wrpeak=Low[shift];
ha[shift]=High[shift]; la[shift]=0;
metka=2; shift--;
}
else
{
peak=Low[shift]; wrpeak=High[shift];
la[shift]=Low[shift]; ha[shift]=0;
metka=1; shift--;
}
}
if (metka==1)
{
if (wrpeak<High[shift])
{
if (High[shift]-peak>minSize*Point) {metka=0; ha[shift]=High[shift];}
}
else
{
wrpeak=High[shift];
}
}
else if (metka==2)
{
if (wrpeak>Low[shift])
{
if (peak-Low[shift]>minSize*Point) {metka=0; la[shift]=Low[shift];}
}
else
{
wrpeak=Low[shift];
}
}
}
}
if (ExtIndicator==11)
{
if (endSearchPattern) return;
_Gartley(StringConcatenate("ExtIndicator=11_",AlgorithmSearchPatterns), 0);
if (saveParametersZZ)
{
saveParametersZZ=false;
minSizeToNumberPattern=vSize;
}
if (ExtGartleyTypeSearch==0 && vPatOnOff) return;
}
}
}
void GetHigh(int start, int end, double price, int step, int vSize)
{
int count=end-start;
if (count<=0) return;
int i=iHighest(NULL,0,MODE_HIGH,count+1,start);
double val=High[i];
if ((val-price)>(vSize*Point))
{
zzH[i]=val;
if (i==start) {GetLow(start+step,end-step,val,1-step,vSize); if (zzL[start-1]>0) zzL[start]=0; return;}
if (i==end) {GetLow(start+step,end-step,val,1-step,vSize); if (zzL[end+1]>0) zzL[end]=0; return;}
GetLow(start,i-1,val,0,vSize);
GetLow(i+1,end,val,0,vSize);
}
}
void GetLow(int start, int end, double price, int step, int vSize)
{
int count=end-start;
if (count<=0) return;
int i=iLowest(NULL,0,MODE_LOW,count+1,start);
double val=Low[i];
if ((price-val)>(vSize*Point))
{
zzL[i]=val;
if (i==start) {GetHigh(start+step,end-step,val,1-step,vSize); if (zzH[start-1]>0) zzH[start]=0; return;}
if (i==end) {GetHigh(start+step,end-step,val,1-step,vSize); if (zzH[end+1]>0) zzH[end]=0; return;}
GetHigh(start,i-1,val,0,vSize);
GetHigh(i+1,end,val,0,vSize);
}
}
void Ensign_ZZ()
{
int i,n;
int vSize;
bool endCyklDirection=true;
bool endSearchPattern=false;
if (ExtMaxBar>0) cbi=ExtMaxBar; else cbi=Bars-1;
if (ExtIndicator==11)
{
if (DirectionOfSearchMaxMin) vSize = maxSize_; else vSize = minSize_;
}
while (endCyklDirection)
{
if (ExtIndicator==11)
{
if (ExtLabel>0) {ArrayInitialize(la,0.0); ArrayInitialize(ha,0.0);}
ArrayInitialize(zz,0);ArrayInitialize(zzL,0);ArrayInitialize(zzH,0);
ti=0; fs=0; tbi=0; tai=0; si=0;
if (DirectionOfSearchMaxMin)
{
if (vSize < minSize_)
{
if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) vSize=minSizeToNumberPattern;
else vSize=minSize_;
endSearchPattern=true;
}
di=vSize*Point;
vSize-=IterationStepSize;
}
else
{
if (vSize > maxSize_)
{
if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) vSize=minSizeToNumberPattern;
else vSize=minSize_;
endSearchPattern=true;
}
di=vSize*Point;
vSize+=IterationStepSize;
}
if (flagExtGartleyTypeSearch2)
{
endSearchPattern=true;
vSize=minSizeToNumberPattern;
}
}
else
{
endCyklDirection=false;
endSearchPattern=true;
}
for (i=cbi; i>=ExtMinBar; i--)
{
if (lLast==0) {lLast=Low[i];hLast=High[i]; if (ExtIndicator==3) di=hLast-lLast;}
if (fs==0)
{
if (lLast<Low[i] && hLast<High[i]) {fs=1; hLast=High[i]; si=High[i]; ai=i; tai=Time[i]; if (ExtIndicator==3) di=High[i]-Low[i];} // ????? ??????????
if (lLast>Low[i] && hLast>High[i]) {fs=2; lLast=Low[i]; si=Low[i]; bi=i; tbi=Time[i]; if (ExtIndicator==3) di=High[i]-Low[i];} // ????? ??????????
}
{
ti=Time[i];
ai0=iBarShift(Symbol(),Period(),tai);
bi0=iBarShift(Symbol(),Period(),tbi);
fcount0=false;
if ((fh || fl) && countBar>0) {countBar--; if (i==0 && countBar==0) fcount0=true;}
if (fs==1)
{
if (hLast>High[i] && !fh) fh=true;
if (i==0)
{
if (Close[i+1]<lLast && fh) {fs=2; countBar=minBars; fh=false;}
if (countBar==0 && si-di>Low[i+1] && High[i+1]<hLast && ai0>i+1 && fh && !fcount0) {fs=2; countBar=minBars; fh=false;}
if (fs==2) // ????? ???????? ? ??????????? ?? ?????????? ?? ?????????? ????
{
zz[ai0]=High[ai0];
zzH[ai0]=High[ai0];
lLast=Low[i+1];
if (ExtIndicator==3) di=High[i+1]-Low[i+1];
si=Low[i+1];
bi=i+1;
tbi=Time[i+1];
if ((ExtIndicator!=11 || endSearchPattern) && ExtLabel>0)
{
ha[ai0]=High[ai0];
tml=Time[i+1]; ha[i+1]=0; la[i+1]=Low[i+1]; // ??????????? ????? ?? ?????????? ????
}
}
}
else
{
if (Close[i]<lLast && fh) {fs=2; countBar=minBars; fh=false;}
if (countBar==0 && si-di>Low[i] && High[i]<hLast && fh) {fs=2; countBar=minBars; fh=false;}
if (fs==2) // ????? ???????? ? ??????????? ?? ??????????
{
zz[ai]=High[ai];
zzH[ai]=High[ai];
lLast=Low[i];
if (ExtIndicator==3) di=High[i]-Low[i];
si=Low[i];
bi=i;
tbi=Time[i];
if ((ExtIndicator!=11 || endSearchPattern) && ExtLabel>0)
{
ha[ai]=High[ai];
tml=Time[i]; ha[i]=0; la[i]=Low[i]; // ??????????? ????? ?? ?????????? ????
}
}
}
}
else // fs==2
{
if (lLast<Low[i] && !fl) fl=true;
if (i==0)
{
if (Close[i+1]>hLast && fl) {fs=1; countBar=minBars; fl=false;}
if (countBar==0 && si+di<High[i+1] && Low[i+1]>lLast && bi0>i+1 && fl && !fcount0) {fs=1; countBar=minBars; fl=false;}
if (fs==1) // ????? ???????? ? ??????????? ?? ?????????? ?? ?????????? ????
{
zz[bi0]=Low[bi0];
zzL[bi0]=Low[bi0];
hLast=High[i+1];
if (ExtIndicator==3) di=High[i+1]-Low[i+1];
si=High[i+1];
ai=i+1;
tai=Time[i+1];
if ((ExtIndicator!=11 || endSearchPattern) && ExtLabel>0)
{
la[bi0]=Low[bi0];
tmh=Time[i+1]; ha[i+1]=High[i+1]; la[i+1]=0; // ??????????? ????? ?? ?????????? ????
}
}
}
else
{
if (Close[i]>hLast && fl) {fs=1; countBar=minBars; fl=false;}
if (countBar==0 && si+di<High[i] && Low[i]>lLast && fl) {fs=1; countBar=minBars; fl=false;}
if (fs==1) // ????? ???????? ? ??????????? ?? ??????????
{
zz[bi]=Low[bi];
zzL[bi]=Low[bi];
hLast=High[i];
if (ExtIndicator==3) di=High[i]-Low[i];
si=High[i];
ai=i;
tai=Time[i];
if ((ExtIndicator!=11 || endSearchPattern) && ExtLabel>0)
{
la[bi]=Low[bi];
tmh=Time[i]; ha[i]=High[i]; la[i]=0; // ??????????? ????? ?? ?????????? ????
}
}
}
}
}
if (fs==1 && High[i]>si) {ai=i; tai=Time[i]; hLast=High[i]; si=High[i]; countBar=minBars; fh=false; if (ExtIndicator==3) di=High[i]-Low[i];}
if (fs==2 && Low[i]<si) {bi=i; tbi=Time[i]; lLast=Low[i]; si=Low[i]; countBar=minBars; fl=false; if (ExtIndicator==3) di=High[i]-Low[i];}
if ((ExtIndicator!=11 || endSearchPattern))
{
if (chHL && chHL_PeakDet && ExtLabel==0)
{
if (fs==1) {ha[i]=si; la[i]=si-di;}
if (fs==2) {ha[i]=si+di; la[i]=si;}
}
if (i==0)
{
ai0=iBarShift(Symbol(),Period(),tai);
bi0=iBarShift(Symbol(),Period(),tbi);
if (fs==1)
{
for (n=bi0-1; n>=0; n--) {zzH[n]=0; zz[n]=0; if (ExtLabel>0) ha[n]=0;}
zz[ai0]=High[ai0]; zzH[ai0]=High[ai0]; zzL[ai0]=0; if (ExtLabel>0) ha[ai0]=High[ai0];
}
if (fs==2)
{
for (n=ai0-1; n>=0; n--) {zzL[n]=0; zz[n]=0; if (ExtLabel>0) la[n]=0;}
zz[bi0]=Low[bi0]; zzL[bi0]=Low[bi0]; zzH[bi0]=0; if (ExtLabel>0) la[bi0]=Low[bi0];
}
if (ExtLabel>0)
{
if (fs==1) {aim=iBarShift(Symbol(),0,tmh); if (aim<bi0) ha[aim]=High[aim];}
else if (fs==2) {bim=iBarShift(Symbol(),0,tml); if (bim<ai0) la[bim]=Low[bim];}
}
}
}
}
if (ExtIndicator==11)
{
if (endSearchPattern) return;
_Gartley(StringConcatenate("ExtIndicator=11_",minBars,"/",vSize), 0);
if (saveParametersZZ)
{
saveParametersZZ=false;
minSizeToNumberPattern=vSize;
}
if (ExtGartleyTypeSearch==0 && vPatOnOff) return;
}
}
}
void ZigZag_()
{
int shift, back, lasthighpos, lastlowpos,lastpos;
double val;
double curlow,curhigh,lasthigh,lastlow;
int vDepth = 0, Depth;
int vBackstep = ExtBackstep;
bool endCyklDirection=true;
bool endSearchPattern=false;
int i;
if (ExtMaxBar>0) _maxbarZZ=ExtMaxBar; else _maxbarZZ=Bars;
if (ExtIndicator==11)
{
Depth = minDepth;
}
else
{
Depth = _minBars;
minDepth = _minBars;
maxDepth = _minBars;
vBackstep = _ExtBackstep;
}
if (DirectionOfSearchMaxMin) vDepth = maxDepth; else vDepth = minDepth;
while (endCyklDirection)
{
if (ExtIndicator==11)
{
if (ExtLabel>0) {ArrayInitialize(la,0.0); ArrayInitialize(ha,0.0);}
ArrayInitialize(zz,0);ArrayInitialize(zzL,0);ArrayInitialize(zzH,0);
if (DirectionOfSearchMaxMin)
{
if (vDepth < minDepth || endSearchPattern)
{
if (NumberPattern==0) {vDepth=_minBars; vBackstep=_ExtBackstep;}
else
{
if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) {vDepth=minBarsToNumberPattern; vBackstep=vBackstepToNumberPattern;}
else {vDepth+=IterationStepDepth; if (FiboStep && vBackstep!=ExtBackstep) {vBackstep=vDepth*1.618;}}
}
endSearchPattern=true;
}
Depth = vDepth;
vDepth-=IterationStepDepth;
}
else
{
if (vDepth > maxDepth || endSearchPattern)
{
if (NumberPattern==0) {vDepth=_minBars; vBackstep=_ExtBackstep;}
else
{
if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) {vDepth=minBarsToNumberPattern; vBackstep=vBackstepToNumberPattern;}
else {vDepth-=IterationStepDepth; if (FiboStep && vBackstep!=ExtBackstep) {vBackstep=vDepth*1.618;}}
}
endSearchPattern=true;
}
Depth = vDepth;
vDepth+=IterationStepDepth;
}
if (flagExtGartleyTypeSearch2) {endSearchPattern=true; Depth=minBarsToNumberPattern;}
}
else
{
endCyklDirection=false;
}
minBarsX=Depth;
for(shift=_maxbarZZ-Depth; shift>=ExtMinBar; shift--)
{
i=iLowest(NULL,0,MODE_LOW,Depth,shift);
if (i==shift)
{
val=Low[i];
if (!noBackstep)
{
if(val==lastlow) val=0.0;
else
{
lastlow=val;
for(back=1; back<=vBackstep; back++)
{
if(val<zzL[shift+back]) zzL[shift+back]=0.0;
}
}
}
zzL[shift]=val;
if (ExtLabel>0) la[shift]=val;
}
i=iHighest(NULL,0,MODE_HIGH,Depth,shift);
if (i==shift)
{
val=High[i];
if (!noBackstep)
{
if(val==lasthigh) val=0.0;
else
{
lasthigh=val;
for(back=1; back<=vBackstep; back++)
{
if(val>zzH[shift+back]) zzH[shift+back]=0.0;
}
}
}
zzH[shift]=val;
if (ExtLabel>0) ha[shift]=val;
}
}
lasthigh=-1; lasthighpos=-1;
lastlow=-1; lastlowpos=-1;
for(shift=_maxbarZZ-Depth; shift>=ExtMinBar; shift--)
{
curlow=zzL[shift];
curhigh=zzH[shift];
if((curlow==0)&&(curhigh==0)) continue;
if(curhigh!=0)
{
if(lasthigh>0)
{
if(lasthigh<curhigh) zzH[lasthighpos]=0;
else zzH[shift]=0;
}
if(lasthigh<curhigh || lasthigh<0)
{
lasthigh=curhigh;
lasthighpos=shift;
}
lastlow=-1;
}
if(curlow!=0)
{
if(lastlow>0)
{
if(lastlow>curlow) zzL[lastlowpos]=0;
else zzL[shift]=0;
}
if((curlow<lastlow)||(lastlow<0))
{
lastlow=curlow;
lastlowpos=shift;
}
lasthigh=-1;
}
}
lasthigh=-1; lasthighpos=-1;
lastlow=-1;
lastpos=-1;
for(shift=_maxbarZZ-1; shift>=ExtMinBar; shift--)
{
zz[shift]=zzL[shift];
if(shift>=_maxbarZZ-Depth) {zzH[shift]=0.0; zzL[shift]=0.0; zz[shift]=0.0;}
else
{
if (!noBackstep)
{
if(zzH[shift]!=0.0) zz[shift]=zzH[shift];
}
else
{
if(zzH[shift]>0.0)
{
if (zz[shift]>0)
{
if (lasthigh>0 && iLow(NULL,0,shift)<iLow(NULL,0,lastpos) && iHigh(NULL,0,shift)>iHigh(NULL,0,lastpos)) zz[shift]=zzH[shift];
}
else zz[shift]=zzH[shift];
}
}
if (zz[shift]>0)
{
lastpos=shift;
if (zzL[shift]==zz[shift])
{
curlow=zz[shift];
lasthigh=-1; curhigh=0;
if (noBackstep)
{
if(lastlow>0)
{
if(lastlow>curlow) zz[lastlowpos]=0;
else zz[shift]=0;
}
if(curlow<lastlow || lastlow<0)
{
lastlow=curlow;
lastlowpos=shift;
}
}
continue;
}
lastlow=-1;
curhigh=zzH[shift];
if(lasthigh>0)
{
if(lasthigh<curhigh) zz[lasthighpos]=0;
else zz[shift]=0;
}
if(lasthigh<curhigh || lasthigh<0)
{
lasthigh=curhigh;
lasthighpos=shift;
}
}
}
}
if (RecoverFiltr)
{
lasthigh=-1;
lastlow= -1;
for(shift=_maxbarZZ-Depth; shift>=ExtMinBar; shift--)
{
if (zz[shift]>0)
{
if (zzL[shift]==zz[shift])
{
lasthigh=-1;
lastlowpos=shift; lastlow=zz[shift];
}
if (zzH[shift]==zz[shift])
{
lastlow=-1;
lasthighpos=shift; lasthigh=zz[shift];
}
}
if (lastlow>0)
{
if (lastlow>iLow(NULL,0,shift))
{
lastlow=iLow(NULL,0,shift);
zz[shift]=iLow(NULL,0,shift);
zz[lastlowpos]=0;
zzL[shift]=iLow(NULL,0,shift);
zzL[lastlowpos]=0;
lastlowpos=shift;
}
}
if (lasthigh>0)
{
if (lasthigh<iHigh(NULL,0,shift))
{
lasthigh=iHigh(NULL,0,shift);
zz[shift]=iHigh(NULL,0,shift);
zz[lasthighpos]=0;
zzH[shift]=iHigh(NULL,0,shift);
zzH[lasthighpos]=0;
lasthighpos=shift;
}
}
}
}
if (ExtIndicator!=11 && ExtLabel>0) // ??????????? ????? ?? ?????, ??? ???????? ????? ??? ? ?? ????????? ???????
{
Metka();
}
if (ExtIndicator==11)
{
if (ExtLabel>0 && endSearchPattern) // ??????????? ????? ?? ?????, ??? ???????? ????? ??? ? ?? ????????? ???????
{
Metka();
}
if (endSearchPattern)
{
if (NumberPattern!=0)
{
minBarsToNumberPattern=Depth;
vBackstepToNumberPattern=vBackstep;
}
return;
}
_Gartley(StringConcatenate("ExtIndicator=11_0_",Depth,"/",vBackstep), Depth);
if (saveParametersZZ)
{
saveParametersZZ=false;
if (NumberPattern!=0)
{
minBarsToNumberPattern=Depth;
vBackstepToNumberPattern=vBackstep;
}
}
if (ExtGartleyTypeSearch==0 && vPatOnOff)
{
if (NumberPattern==0) endSearchPattern=true; //{vDepth=_minBars; vBackstep=_ExtBackstep; endSearchPattern=true;}
else return;
}
if (FiboStep && !endSearchPattern) {vBackstep=vDepth*1.618;}
} // ????? ????????? ?????
}
}
void Metka()
{
int shift, metka=0; // =0 - ?? ??????? ???????? ZZ. =1 - ???? ????? ??????????. =2 - ???? ????? ?????????.
for(shift=Bars-1; shift>=0; shift--)
{
if (zz[shift]>0)
{
if (zzH[shift]>0)
{
metka=2; la[shift]=0; shift--;
}
else
{
metka=1; ha[shift]=0; shift--;
}
}
if (metka==0)
{
ha[shift]=0; la[shift]=0;
}
else if (metka==1)
{
if (ha[shift]>0) metka=0;
la[shift]=0;
}
else if (metka==2)
{
if (la[shift]>0) metka=0;
ha[shift]=0;
}
}
}
void visibleLevelD(int i, string _vBullBear, int& iu, int & aXABCD[], double baza, double levelbaza, double AB, double BC, bool extremumAorC)
{
if (!levelD || ExtGartleyTypeSearch>0 || PotencialsLevels_retXD==0) return;
double levelBx, levelDx, levelABCD, levelDmin, levelDmax;
int ii, j, m, n, savem;
string txt;
string vBear = "Bearish";
double abcd[4]={1,1.272,1.618,2.618};
string txtabcd[4]={"AB","1.272*AB","1.618*AB","2.618*AB"};
string txtabcd1[4]={"AB=CD","1.272*AB=CD","1.618*AB=CD","2.618*AB=CD"};
j=0; m=0;
while (retresmentXD[j][0]<i) j++;
while (retresmentBD[m][0]<i) m++;
savem=m;
while (j<arrXD_BD[0])
{
if (retresmentXD[j][0]==i)
{
levelDx=baza*retpatterns[retresmentXD[j][1]];
if (_vBullBear==vBear)
{
levelDmin=levelbaza+levelDx*min_DeltaGartley;
levelDmax=levelbaza+levelDx*max_DeltaGartley;
}
else
{
levelDmin=levelbaza+levelDx*max_DeltaGartley;
levelDmax=levelbaza+levelDx*min_DeltaGartley;
}
levelDx=levelbaza+levelDx;
if (extremumAorC)
{
for (ii=0;ii<4;ii++)
{
levelABCD=levelbaza-AB*abcd[ii]; // X*AB
if (levelABCD>levelDmin && levelABCD<levelDmax)
{
for (n=0;n<32;n++)
{
if (level_D[n]==levelDx) break;
if (level_D[n]==0)
{
iu++;
level_D[iu]=levelDx;
level_nameD[iu]=StringConcatenate(namepatterns[i]," = ",retpatternstxt[retresmentXD[j][1]]);
break;
}
}
if (visibleLevelsABCD>1)
{
for (n=0;n<32;n++)
{
if (level_D[n]==levelABCD && level_nameD[n]==txtabcd[ii]) break;
if (level_D[n]==0)
{
iu++;
level_D[iu]=levelABCD;
level_nameD[iu]=txtabcd[ii];
break;
}
}
}
}
levelABCD=zz[aXABCD[4]]-AB*abcd[ii]; // X*AB=CD
if (levelABCD>levelDmin && levelABCD<levelDmax)
{
for (n=0;n<32;n++)
{
if (level_D[n]==levelDx) break;
if (level_D[n]==0)
{
iu++;
level_D[iu]=levelDx;
level_nameD[iu]=StringConcatenate(namepatterns[i]," = ",retpatternstxt[retresmentXD[j][1]]);
break;
}
}
if (visibleLevelsABCD>1)
{
for (n=0;n<32;n++)
{
if (level_D[n]==levelABCD && level_nameD[n]==txtabcd1[ii]) break;
if (level_D[n]==0)
{
iu++;
level_D[iu]=levelABCD;
level_nameD[iu]=txtabcd1[ii];
break;
}
}
}
}
}
}
m=savem;
while (m<arrXD_BD[1])
{
if (retresmentBD[m][0]>i) break;
levelBx=zz[aXABCD[4]] + BC*retpatterns[retresmentBD[m][1]]; // zz[aXABCD[C]]
if (levelBx>levelDmin && levelBx<levelDmax)
{
txt=StringConcatenate(namepatterns[i]," = ",retpatternstxt[retresmentXD[j][1]]);
for (n=0;n<32;n++)
{
if (level_D[n]==levelDx && level_nameD[n]==txt) break;
if (level_D[n]==0)
{
iu++;
level_D[iu]=levelDx;
level_nameD[iu]=txt;
break;
}
}
if (visibleLevelsABCD==1 || visibleLevelsABCD==3)
{
txt=StringConcatenate("Ret BD = ",retpatternstxt[retresmentBD[m][1]]);
for (n=0;n<32;n++)
{
if (level_D[n]==levelBx && level_nameD[n]==txt) break;
if (level_D[n]==0)
{
iu++;
level_D[iu]=levelBx;
level_nameD[iu]=txt;
break;
}
}
}
}
m++;
}
}
else break;
j++;
}
}
void mreadFromFileListPatterns()
{
int i, j, k, handle;
string file, str;
file=StringConcatenate("ZUP\ListPatterns\\",NameFileListPatterns,".csv");
handle=FileOpen(file, FILE_CSV|FILE_READ);
if (handle<0)
{
Print("File "+NameFileListPatterns+".csv not found");
file="ZUP\ListPatterns\listpatternsdefault.csv";
handle=FileOpen(file, FILE_CSV|FILE_READ);
if (handle<0) {Print("File listpatternsdefault.csv not found"); return;}
else Print("Read patterns from file listpatternsdefault.csv");
}
if (readFromFileListPatterns==1) {k=0; for (i=0;i<countPat;i++) namepatterns[i]=""; ArrayInitialize(pp,0);} // "????????" ???????
if (readFromFileListPatterns==2) {countPat=ArraySize(namepatterns); k=countPat; countPat++; ArrayResize(namepatterns,countPat); ArrayResize(pp,countPat);}
j=0; str="0";
while(true)
{
str=FileReadString(handle);
if (j>0)
{
if (StringLen(str)==0) str="0";
pp[k][j-1]=StrToDouble(str);
}
else
{
if (StringLen(str)==0)
{
FileClose(handle); // ????????? ???? ?? ??????? ?????????
ArrayResize(namepatterns,countPat); ArrayResize(pp,countPat);
return;
}
if (k==countPat) {countPat++; ArrayResize(namepatterns,countPat); ArrayResize(pp,countPat);}
namepatterns[k]=str;
}
j++;
if (j==17) {j=0; k++;}
}
FileClose(handle);
}
void mwriteToFileListPatterns()
{
int i, handle;
string file;
if (readFromFileListPatterns==0) file="\\ZUP\ListPatterns\listpatternsdefault.csv";
else if (readFromFileListPatterns==1) file="\\ZUP\ListPatterns\listpatternscustom.csv";
else if (readFromFileListPatterns==2) file="\\ZUP\ListPatterns\listpatternsmixt.csv";
handle=FileOpen(file,FILE_CSV|FILE_WRITE,';');
for (i=0;i<countPat;i++)
{
FileSeek(handle, 0, SEEK_END);
FileWrite(handle, namepatterns[i], pp[i][0], pp[i][1], pp[i][2], pp[i][3], pp[i][4], pp[i][5], pp[i][6], pp[i][7], pp[i][8], pp[i][9], pp[i][10],
pp[i][11], pp[i][12], pp[i][13], pp[i][14], pp[i][15]);
}
FileClose(handle);
}
string _ChartTimeFrame (int Period__)
{
string chartTimeFrame="";
if(Period__==1) chartTimeFrame="M1";
else if(Period__==5) chartTimeFrame="M5";
else if(Period__==15) chartTimeFrame="M15";
else if(Period__==30) chartTimeFrame="M30";
else if(Period__==60) chartTimeFrame="H1";
else if(Period__==240) chartTimeFrame="H4";
else if(Period__==1440) chartTimeFrame="D1";
else if(Period__==10080) chartTimeFrame="W1";
else if(Period__==43200) chartTimeFrame="MN1";
return(chartTimeFrame);
}
void writepicture()
{
string txt, file;
int k;
if (namefileSymbolPeriod)
{
file=StringConcatenate(Symbol(),"_",Period(),"_Patterns");
}
else
{
k = StringFind(txt,"*");
if (k>=0) txt = StringConcatenate(StringSubstr(txt,0,k),StringSubstr(txt,k+1));
file = StringConcatenate("_",Symbol(),"_",_ChartTimeFrame(Period()),"_",vBullBearToNumberPattern);
k = StringFind(txt,"[");
}
if (k>0) file=StringSubstr(txt,0,k)+file;
else file = txt+file;
WindowScreenShot(StringConcatenate("ZUP\PicturePatterns\\",file,".gif"),900,600); // Write picture on MT4 files repository
}
void WriteFilePattern(string BullBear,int patternNumber, int & aXABCD[],datetime tDragonE,double cDragonE, bool yes)
{
int handle, k;
string FileName = "", txt, Name;
k=StringFind(vNamePattern,"[",0);
if (k>=0) txt=StringSubstr(vNamePattern,0,k-1); else txt=vNamePattern;
if (namefileSymbolPeriod)
{
FileName = StringConcatenate(Symbol(),"_",Period(),"_Patterns");
}
else
{
FileName = StringConcatenate(txt,"_",Symbol(),"_",_ChartTimeFrame(Period()),"_",vBullBear);
k = StringFind(FileName,"*");
if (k>=0) FileName = StringConcatenate(StringSubstr(FileName,0,k),StringSubstr(FileName,k+1));
}
if (!yes && namefileSymbolPeriod)
{
if (writeInfoPatternsToFileXML>0)
{
Name = StringConcatenate("ZUP\\XML\\",FileName,".xml");
FileDelete(Name);
}
if (writeInfoPatternsToFileCSV>0)
{
Name = StringConcatenate("ZUP\CSV\\",FileName,".csv");
FileDelete(Name);
}
return;
}
int O=0, X=1, A=2, B=3, C=4, D=5, numbarD;
datetime TimeX, TimeA, TimeB, TimeC, TimeD;
double cenaD;
TimeX=iTime(Symbol(),Period(),aXABCD[X]);
TimeA=iTime(Symbol(),Period(),aXABCD[A]);
TimeB=iTime(Symbol(),Period(),aXABCD[B]);
TimeC=iTime(Symbol(),Period(),aXABCD[C]);
if (StringFind(vNamePattern,"Dragon",0)>=0)
{
TimeD=tDragonE;
cenaD=cDragonE;
}
else
{
TimeD=iTime(Symbol(),Period(),aXABCD[D]);
cenaD=zz[aXABCD[D]];
}
numbarD=iBarShift(Symbol(),Period(),TimeD,false);
if (writeInfoPatternsToFileXML>0)
{
Name = StringConcatenate("ZUP\\XML\\",FileName,".xml");
handle=FileOpen(Name,FILE_CSV|FILE_WRITE,' ');
if(handle<1)
{
Print("File ",Name," not found , the last error is ", GetLastError());
}
else
{
FileWrite(handle, "<Pattern>");
FileWrite(handle, StringConcatenate("<Paire>",Symbol(),"</Paire>"));
FileWrite(handle, StringConcatenate("<TimeFrame>",_ChartTimeFrame(Period()),"</TimeFrame>"));
FileWrite(handle, StringConcatenate("<BullBear>",BullBear,"</BullBear>"));
FileWrite(handle, StringConcatenate("<Pattern>",txt,"</Pattern>"));
FileWrite(handle, StringConcatenate("<X>",DoubleToStr(zz[aXABCD[X]],Digits),"</X>"));
if (writeInfoPatternsToFileXML==1)
{
FileWrite(handle, StringConcatenate("<X_Date>",TimeToStr(TimeX),"</X_Date>"));
FileWrite(handle, StringConcatenate("<A>",DoubleToStr(zz[aXABCD[A]],Digits),"</A>"));
FileWrite(handle, StringConcatenate("<A_Date>",TimeToStr(TimeA),"</A_Date>"));
FileWrite(handle, StringConcatenate("<B>",DoubleToStr(zz[aXABCD[B]],Digits),"</B>"));
FileWrite(handle, StringConcatenate("<B_Date>",TimeToStr(TimeB),"</B_Date>"));
FileWrite(handle, StringConcatenate("<C>",DoubleToStr(zz[aXABCD[C]],Digits),"</C>"));
FileWrite(handle, StringConcatenate("<C_Date>",TimeToStr(TimeC),"</C_Date>"));
FileWrite(handle, StringConcatenate("<D>",DoubleToStr(zz[aXABCD[D]],Digits),"</D>"));
FileWrite(handle, StringConcatenate("<D_Date>",TimeToStr(TimeD),"</D_Date>"));
FileWrite(handle, StringConcatenate("<bar_D>",aXABCD[D],"</bar_D>"));
FileWrite(handle, StringConcatenate("<TimeForDmin>",TimeToStr(TimeForDmin),"</TimeForDmin>"));
FileWrite(handle, StringConcatenate("<LevelForDmin>",DoubleToStr(LevelForDmin,Digits),"</LevelForDmin>"));
FileWrite(handle, StringConcatenate("<TimeForDmax>",TimeToStr(TimeForDmax),"</TimeForDmax>"));
FileWrite(handle, StringConcatenate("<LevelForDmax>",DoubleToStr(LevelForDmax,Digits),"</LevelForDmax>"));
FileWrite(handle, "</Pattern>");
}
else
{
FileWrite(handle, StringConcatenate("<X_Date>",TimeX,"</X_Date>"));
FileWrite(handle, StringConcatenate("<A>",DoubleToStr(zz[aXABCD[A]],Digits),"</A>"));
FileWrite(handle, StringConcatenate("<A_Date>",TimeA,"</A_Date>"));
FileWrite(handle, StringConcatenate("<B>",DoubleToStr(zz[aXABCD[B]],Digits),"</B>"));
FileWrite(handle, StringConcatenate("<B_Date>",TimeB,"</B_Date>"));
FileWrite(handle, StringConcatenate("<C>",DoubleToStr(zz[aXABCD[C]],Digits),"</C>"));
FileWrite(handle, StringConcatenate("<C_Date>",TimeC,"</C_Date>"));
FileWrite(handle, StringConcatenate("<D>",DoubleToStr(zz[aXABCD[D]],Digits),"</D>"));
FileWrite(handle, StringConcatenate("<D_Date>",TimeD,"</D_Date>"));
FileWrite(handle, StringConcatenate("<bar_D>",aXABCD[D],"</bar_D>"));
FileWrite(handle, StringConcatenate("<TimeForDmin>",TimeForDmin,"</TimeForDmin>"));
FileWrite(handle, StringConcatenate("<LevelForDmin>",DoubleToStr(LevelForDmin,Digits),"</LevelForDmin>"));
FileWrite(handle, StringConcatenate("<TimeForDmax>",TimeForDmax,"</TimeForDmax>"));
FileWrite(handle, StringConcatenate("<LevelForDmax>",DoubleToStr(LevelForDmax,Digits),"</LevelForDmax>"));
FileWrite(handle, "</Pattern>");
}
FileClose(handle);
}
}
if (writeInfoPatternsToFileCSV>0)
{
Name = StringConcatenate("ZUP\CSV\\",FileName,".csv");
handle=FileOpen(Name,FILE_CSV|FILE_WRITE,";");
if(handle<1)
{
Print("File ",Name," not found, the last error is ", GetLastError());
}
else
{
if (writeInfoPatternsToFileCSV==1)
{
FileWrite(handle,Symbol(),patternNumber,numbarD,Period(),BullBear,txt,DoubleToStr(zz[aXABCD[X]],Digits),TimeToStr(TimeX),
DoubleToStr(zz[aXABCD[A]],Digits),TimeToStr(TimeA),DoubleToStr(zz[aXABCD[B]],Digits),TimeToStr(TimeB),
DoubleToStr(zz[aXABCD[C]],Digits),TimeToStr(TimeC),DoubleToStr(cenaD,Digits),TimeToStr(TimeD),aXABCD[D],
TimeToStr(TimeForDmin),DoubleToStr(LevelForDmin,Digits),TimeToStr(TimeForDmax),DoubleToStr(LevelForDmax,Digits));
}
else
{
FileWrite(handle,Symbol(),patternNumber,numbarD,Period(),BullBear,txt,DoubleToStr(zz[aXABCD[X]],Digits),TimeX,
DoubleToStr(zz[aXABCD[A]],Digits),TimeA,DoubleToStr(zz[aXABCD[B]],Digits),TimeB,
DoubleToStr(zz[aXABCD[C]],Digits),TimeC,DoubleToStr(cenaD,Digits),TimeD,aXABCD[D],
TimeForDmin,DoubleToStr(LevelForDmin,Digits),TimeForDmax,DoubleToStr(LevelForDmax,Digits));
}
FileClose(handle);
}
}
return;
}
void _Gartley(string _Depth, int Depth)
{
int i, in=0, ik[2], iu, j, k, m, shift, countRet;
double LevelForD;
datetime timeLineD;
double bartoD=10000;
double vlXB=0, vhXB=0, vlAC=0, vhAC=0, vlBD=0, vhBD=0, vlXD=0, vhXD=0;
double vl618=min_DeltaGartley * 0.618;
double vh786=max_DeltaGartley * 0.786;
double vl886=min_DeltaGartley * 0.886;
double vh886=max_DeltaGartley * 0.886;
double vl1272=min_DeltaGartley * 1.272;
double vh1618=max_DeltaGartley * 1.618;
int countDots=5;
int patternNumber=-1;
int aXABCD[6]; // ?????? ????? ? ??????? O-X-A-B-C-D ???????????? ?????????
double retXD, retXB, retBD, retAC, retOA;
double xxa, xcd, xab, xdc, xxb;
double OX, XA, BC, XC, BD, AB, AD, CD;
double baza, levelbaza;
bool extremumAorC; // A - true, C - false
bool PatternNews;
bool NoLevelD;
double vDelta0 = 0.00000001;
int O=0, X=1, A=2, B=3, C=4, D=5;
string nameObj1="", nameObj2="";
string vBull = "Bullish";
string vBear = "Bearish";
string v4Point = "4-Point Continuation";
string vABCD = "AB=CD";
string v3Drives = "3 Drives";
string vDragon = "Dragon";
string txt = "";
bool v50 = false;
datetime tDragonE = 0;
double cDragonE = 0;
int aNumBarPeak[];
double tangensXB;
color colorPattern=0;
bool filtrXB_;
int maxPeak = 0;
LevelForDmin = 0;
LevelForDmax = 0;
vBullBear = "";
vNamePattern = "";
if (ExtIndicator!=11) delete_objects3();
if (PotencialsLevels_retXD>0) delete_FiboStrongPattern();
if ((ExtGartleyTypeSearch==0 && ExtIndicator==11) || ExtIndicator!=11) vPatOnOff = false;
ArrayResize(aNumBarPeak, ArraySize(zz));
for(shift=0; shift<_maxbarZZ; shift++)
{
if (zz[shift]>0) {aNumBarPeak[maxPeak] = shift; maxPeak++;}
}
ArrayResize(aNumBarPeak, maxPeak);
if (ExtIndicator>5 && ExtIndicator<11 && GrossPeriod>Period())
{
bartoD=maxBarToD;
}
else
{
if (patternInfluence==1)
{
bartoD=AllowedBandPatternInfluence*(aNumBarPeak[4]-aNumBarPeak[0]);
}
else if (patternInfluence==0)
{
bartoD=maxBarToD;
}
}
ArrayInitialize(aXABCD,-1);
PatternNews=false;
NoLevelD=(PatternNews && (ExtIndicator==11)) || ExtIndicator!=11;
k = 0;
while (k < maxPeak-6 && (aXABCD[D] < bartoD+2 || patternInfluence==2))
{
aXABCD[O] = aNumBarPeak[k + 5];
aXABCD[X] = aNumBarPeak[k + 4];
aXABCD[A] = aNumBarPeak[k + 3];
aXABCD[B] = aNumBarPeak[k + 2];
aXABCD[C] = aNumBarPeak[k + 1];
if (k>=0) aXABCD[D] = aNumBarPeak[k]; else aXABCD[D] = aNumBarPeak[0];
vBullBear = "";
vNamePattern = "";
PatternNews=false;
_InfoPointD = "";
filtrXB_=false;
countDots=0;
tangensXB=(zz[aXABCD[B]]-zz[aXABCD[X]])/(aXABCD[X]-aXABCD[B]);
if (zz[aXABCD[C]]>zz[aXABCD[D]])
{
vBullBear = vBull;
if ((zz[aXABCD[B]]+(aXABCD[B]-aXABCD[D])*tangensXB)>zz[aXABCD[D]])Показано первые 50% кода (символов: 184398)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.