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

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 и перейдите к оплате.

Стоимость полного кода
18 439,80₽ ≈ $225.37