//+-------------------------------------------------------------------------+ //| | //| | //| Посвящается памяти моего друга | //| Денисова Владимира Николаевича | //| сентябрь 2007, г. Новокуйбышевск | //| | //| | //|-------------------------------------------------------------------------| //|ZigZag универсальный с паттернами Песавенто | //|-------------------------------------------------------------------------| //| | //| "Parameters for ZigZag" | //| | //|-------------------------------------------------------------------------| //|ExtIndicator - выбор варианта индикатора, на основе которого | //| строятся паттерны Песавенто | //| 0 - Zigzag из метатрейдера, стандартный, немного | //| оптимизированный | //| 1 - Zigzag Алекса, | //| 2 - индикатор подобный встроенному в Ensign | //| 3 - ZigZag Ensign с переменным значением minBars | //| 4 - ZigZag, разработал tauber | //| 5 - вариация на тему свингов Ганна | //| 6 - DT-ZigZag с внешним ZigZag_new_nen3.mq4. В его основе | //| стандартный ZigZag | //| 7 - DT-ZigZag с внешним DT_ZZ.mq4 (разработал klot) | //| 8 - DT-ZigZag с внешним CZigZag.mq4 (разработал Candid) | //| 10 - DT-ZigZag с внешним Swing_zz - это ExtIndicator=5 | //| в режиме DT | //| 11 - включает поиск паттернов Gartley на основе стандартного | //| ZigZag | //| 12 - ZigZag, разработал Talex | //| 13 - SQZZ зигзаг, разработал Товаровед | //| 14 - ZZ_2L_nen, разработал wellx (авторасчет уровней - nen) | //| | //|ParametresZZforDMLEWA - задает набор параметров | //| minBars - ExtBackstep | //| для режимов ExtIndicator=0 и ExtIndicator=6, | //| используемых в тактике DML&EWA | //| | //| 1 - minBars=5 ExtBackstep=8 | //| 2 - minBars=8 ExtBackstep=13 | //| 3 - minBars=13 ExtBackstep=21 | //| 4 - minBars=21 ExtBackstep=34 | //| 5 - minBars=34 ExtBackstep=55 | //| 6 - minBars=55 ExtBackstep=89 | //| 7 - minBars=89 ExtBackstep=144 | //| 8 - minBars=144 ExtBackstep=233 | //| | //| 0 - значение задается параметрами | //| minBars - ExtBackstep | //| | //|minBars - фильтр баровый (задается количество баров) | //|minSize - фильтр по количеству пунктов (задается количество пунктов) | //| | //|ExtBackstep - параметр оставшийся от ZigZag из MT4 | //| | //|GrossPeriod - значение таймфрейма, выраженное в минутах (число минут), | //| данные с которого берутся для построения ZigZag в режиме DT-ZigZag | //| | //|minPercent - процентный фильтр (задается процент, например 0.5) | //| Если используются проценты - ставим число и | //| задаем minSize=0 | //| | //|ExtPoint=11 - количество точек зигзага для зигзага Talex | //| | //|StLevel - первый уровень зигзага (wellx) | //|BigLevel - второй уровень зигзага (wellx) | //|auto - задание автоматического расчета уровней StLevel и BigLevel | //|minBar - значение % для расчета StLevel | //|maxBar - значение % для расчета BigLevel | //| | //| | //|ExtStyleZZ - = true - задает стиль линий ZigZag через вкладку ЦВЕТА | //| = false - Zigzag выводится точками у экстремумов | //| | //|ExtMaxBar - задает количество баров, участвующих в расчете зигзага | //| 0 - зигзаги рассчитываются на всей истории | //|ExtMinBar - задает минимальный номер бара, до которого рассчитывается | //| зигзаг | //| | //|ExtNumberPeak - включает нумерацию переломов ZigZag начиная с 1 | //|ExtNumberPeak10 - разрешает вывод номеров только у первых 10 переломов | //|ExtNumberPeakLow - вывод чисел только у Low или у High и Low | //|ExtNumberPeakColor - цвет чисел | //|ExtNumberPeakFontSize - размер чисел | //|-------------------------------------------------------------------------| //| | //| "Parameters for fibo Levels" | //| | //|-------------------------------------------------------------------------| //|ExtFiboDinamic - разрешает вывод днамических уровней фибо. | //| Динамические уровни фибо выводятся на первом луче | //| ZigZag-a. | //| | //|ExtFiboStatic - разрешает вывод статических уровней фибо | //| | //|ExtFiboStaticNum - номер луча ZigZag-a, на котором будут выводиться | //| статические уровни Фибоначчи. 10.14 и <5. | //| 2 - показывает только те линии, где ретресмент | //| равен числам Песавенто (и 0.447, 0.886, 2.236, 3,14, | //| 3,618 для построения паттернов Gartley) | //| 3 - показывает числа, перечисленные в пункте 2 | //| и соответствующие линии | //| 4 - показывает числа не Песавенто и соответствующие линии | //| 5 - скрывает всю оснастку. Остается только ZigZag | //| и вывод паттернов Gartley | //| | //|ExtFractal - количество экстремумов (максимумов, минимумов), | //| от которых идут линии к другим экстремумам | //| | //|ExtFractalEnd - количество экстремумов, к которым идут линии | //| дальше этого экстремума соединяющих линий не будет | //| Если ExtFractalEnd=0 то последний экстремум равен | //| максимальному числу экстремумов. | //| Минимальное значение ExtFractalEnd=1 | //| | //|ExtFiboChoice - выбор набора чисел для построения паттернов Песавенто. | //| Параметр задается числами от 0 до 11 | //| | //|ExtFiboZigZag - разрешает вывод "ZiaZag Fibonacci" | //| | //|ExtDelta - допуск. Если текущий ретресмент отличается от ближайшего | //| значения числа Песавенто не более величины допуска, то | //| то выводится на график число Песавенто. Задает величину | //| потенциальной разворотной зоны. Должно быть 00 разрешает показ зоны развития точки D | //| =2 дополнительно выводятся линии потенциальных | //| уровней точки D | //| | //|VectorOfAMirrorTrend = 2 выводится Вектор зеркального тренда | //| | //|ExtColorRangeForPointD - цвет рамки зоны развития точки D | //|ExtLineForPointD_AB - задает цвет потенциального уровня точки D | //|ExtLineForPointD_BC - задает цвет потенциального уровня точки D | //| | //|ExtColorPatterns - цвет треугольников паттернов | //| | //|ExtColorPatternList - задается список цветов для закраски крыльев | //| паттернов Gartley. Названия цветов перечислены | //| через запятую. Если какой либо цвет будет | //| записан с ошибкой, то для этого цвета выбирается | //| красный цвет | //| | //|ExtDeltaGartley - допуск на отклонение цены для поиска паттернов | //| по умолчанию 9% - 0.09 | //|ExtDeltaStrongGartley - допуск на отклонение цены для поиска | //| точных паттернов | //| | //|varStrongPatterns - варианты алгоритма поиска точных паттернов | //| = 0 поиск точных пятиточечных паттернов по алгоритму, | //| существовавшему до 122 версии включительно. Паттерн считался | //| найденным, если ретресменты XD-XB-AC-BD попадали в границы | //| допуска. | //| | //| = 1 при поиске паттернов в границы допуска должны | //| попадать только ретресменты XB-AC-BD. | //| Ретресмент XD в данном случае учитывается справочно, | //| участвует только для расчета границы развития точки D паттерна| //| | //|levelD - включает вывод на график уровней ретресментов XD возможных | //| вариантов точных паттернов для текущей комбинации | //| ретресментов XB-AC-BD | //| | //|colorLevelD - задает цвет уровней ретресментов XD | //| | //|Equilibrium - включает вывод линий Equilibrium, Reaction1 и Reaction2 | //|ReactionType - задает тип линий реакции | //|EquilibriumStyle - задает стиль линий | //|EquilibriumWidth - задает толщину линий | //|ColorEquilibrium - задает цвет для Equilibrium | //|ColorReaction - задает цвет для Reaction1 и Reaction2 | //| | //|Dragon - разрешает вывод паттерна Dragon | //|PeakZZDragon - задает номер экстремума зигзага, до которого | //| производится поиск паттерна Dragon | //| | //|Ext_4PointPattern - разрешает поиск 4-хточечного паттерна продолжения | //|_maxXB - задает максимальное значение ретресмента XB | //| Узнать об этом паттерне можно здесь: http://kanetrading.com/ | //| | //|_50 - разрешает поиск паттерна 5-0 | //| | //|ABCD - разрешает поиск паттернов AB=CD | //|visibleABCDrayZZ - разрешает вывод паттернов ABCD в виде линии | //|ABCDrayZZStyle - задает стиль линии паттерна ABCD | //|ABCDrayZZWidth - задает толщину линии паттерна ABCD | //| | //|ABCDAlternate - задает список альтернативных паттернов ABCD. В данном | //| списке через запятую перечисляются коэффициенты X из | //| формулы X*AB=CD | //| | //|CustomPattern - определяет выводить или нет пользовательские паттерны | //|0 - не выводится пользовательский паттерн | //|1 - выводится вместе с Gartley | //|2 - выводится без Gartley, только custom | //|minXB - задает минимальное значение ретресмента XB | //|maxXB - задает максимальное значение ретресмента XB | //|minAC - задает минимальное значение ретресмента AC | //|maxAC - задает максимальное значение ретресмента AC | //|minBD - задает минимальное значение ретресмента BD | //|maxBD - задает максимальное значение ретресмента BD | //|minXD - задает минимальное значение ретресмента XD | //|maxXD - задает максимальное значениEquilibriumе ретресмента XD | //| Минимум и максимум ретресмента задают диапазон для поиска | //| | //|filtrEquilibrium - включает в качестве фильтра линию, проходящую через | //| точки X и B паттерна. Если фильтр включен, то паттерн будет | //| прорисован, когда цена пробьет эту линию при движении от точки C | //| паттерна в сторону точки D. | //| Работает только с пользовательскими паттернами. | //|-------------------------------------------------------------------------| //| | //| "Parameters for Andrews Pitchfork" | //| | //|-------------------------------------------------------------------------| //|ExtPitchforkDinamic > 0 (=1) выводятся динамические вилы Эндрюса от | //| последних двух экстремумов ZigZag | //| =2 50% медиана | //| =3 50% вилы | //| =4 линии Шиффа | //| | //|AutoAPDinamicTestRedZone = true - автоматически выводятся | //| динамические вилы Эндрюса после тестирования | //| красной зоны динамических вил | //| | //|ExtPitchforkDinamicCustom - выбор положения первой точки привязки | //| динамических вил для ExtPitchforkDinamic=3 | //| | //|ExtLinePitchforkD задает цвет динамических вил | //| | //|ExtPitchforkStatic > 0 (=1) выводятся статические вилы Эндрюса от | //| экстремума ZigZag с номером ExtPitchforkStaticNum | //| =2 50% медиана | //| =3 50% вилы | //| =4 линии Шиффа | //| | //|3= 0 - выводятся Метки при пересечении текущих (базовых) вил | //| с внешними вилами | //| = 1 - Метки пересечения SSL | //| = 2 - Метки пересечения медианы | //| = 3 - Метки пересечения FSL | //| = 4 - зона пересечения канала медианы | //| = 5 - зона пересечения канала вил | //| = 6 - Метки пересечения 1/2 медианы | //| = 7 - зона пересечения канала 1/2 медианы | //| = 8 - зона пересечения канала линий Шиффа | //| = 9 - Метки пересечения UTL | //| | //|mTypeBasiclAP - выбор типа базовых вил | //| = 0 - статические вилы из текущего комплекта | //| = 1 - динамические вилы из текущего комплекта | //| | //|mTypeExternalAP - выбор типа внешних вил | //| = 0 - динамические или статические вилы текущего комплекта | //| (противоположные базовым) | //| = 1 - сохраненные вилы из текущего комплекта | //| = 2 - любые вилы из текущего комплекта | //| = 3 - статические вилы из других комплектов ZUP с текущего графика | //| = 4 - динамические вилы из других комплектов ZUP с текущего графика | //| = 5 - любые вилы из других комплектов ZUP с текущего графика | //| = 6 - вилы с текущего графика, выведенные вручную, не с помощью ZUP | //| = 7 - любые внешние вилы | //| | //|mExternalHandAP - задание прорисовки инструментов вил, выведенных | //| вручную, при задании вывода Меток при пересечении с данными вилами | //| = 0 - вывод Меток только при пересечении с медианой и SSL/FSL данных вил| //| = 1 - прорисовка линий инструментов вил, с которыми задается вывод Меток| //| = 2 - вывод только Меток без прорисовки самих инструментов внешних вил | //| | //|mAuto_d, mAuto_s - включает автоматический вывод меток в статических | //| динамических вилах Эндрюса | //| | //|mSaveWL_TL - при автоматическом выводе меток сохраняет автоматически | //| выведенные предупреждающие линии - UWL и LWL - | //| и контрольные линии - UTL и LTL до перерисовки вил при | //| значении true | //| | //|mOutRedZone - включает вывод меток при выходе цены за пределы красной | //| зоны | //| | //|mExitFSL_SSL = false - разрешает вывод линий UTL-LTL-UWL-LWL только после| //| касания линий FSL или SSL | //| | //|mPivotPoints - точки привязки вил Эндрюса | //|mPivotPointsChangeColor - true - меняется цвет Меток PivotPoints в | //| зависимости от текущего рынка | //| false - не меняется цвет Меток PivotPoints | //| | //|Следующие двенадцать параметров могут принимать значение от 0 до 9 | //| | //| Наименование Меток для статических вил | //|mSSL - starting signal line (начальная сигнальная линия) | //|m1_2Mediana – 1/2 median (50%-я медиана) | //|mISL382 – internal signal line 38.2 (внутренняя сигнальная линия 38.2%) | //|mMediana – (медиана) | //|mISL618 – internal signal line 61.8 (внутренняя сигнальная линия 61.8%) | //|mFSL – final signal line (конечная сигнальная линия) | //|mSLM – сигнальные линии 38.2 и 61.8 50% медианы | //|mFSLShiffLines - линия FSL линий Шиффа для статических вил Эндрюса | //|mUTL - контрольная линия UTL | //|mLTL - контрольная линия LTL | //|mUWL - предупреждающая линия | //|mLWL - предупреждающая линия | //| | //|mCriticalPoints – точки пересечения 50%-й медианы с ISL 38.2 | //| и начальной сигнальной линией. | //| | //|Следующие восемь параметров могут принимать значение от 0 до 9 | //| | //| Наименование Меток для динамических вил | //|mSSL_d - starting signal line (начальная сигнальная линия) | //|m1_2Mediana_d – 1/2 median (50%-я медиана) | //|mISL382_d – internal signal line 38.2 (внутренняя сигнальная линия 38.2%)| //|mMediana_d – (медиана) | //|mISL618_d – internal signal line 61.8 (внутренняя сигнальная линия 61.8%)| //|mFSL_d – final signal line (конечная сигнальная линия) | //|mSLM_d – сигнальные линии 38.2 и 61.8 50% медианы | //|mFSLShiffLines_d - линия FSL линий Шиффа для динамических вил Эндрюса | //| | //|mCriticalPoints_d – точки пересечения 50%-й медианы с ISL 38.2 | //| и начальной сигнальной линией. | //| | //|mAllLevels - включение/выключение всех Меток | //|mColorUP - цвет когда точка выше текущей цены | //|mColorDN - цвет когда точка ниже текущей цены | //|mColor - цвет когда точка на текущей цене | //|mColorRectangleUP - цвет когда цена выше прямоугольника | //|mColorRectangleDN - цвет когда цена ниже прямоугольника | //|mColorRectangle - цвет когда цена в прямоугольнике | //|mBack - задает вывод Метки в виде фона | //|mBackZones - задает вывод прямоугольника (линии) в виде фона | //|mLineZonesWidth - задает толщину меток в режимах 8 и 9 | //|mVisibleST - разрешает вывод Меток левее первой точки привязки вил | //|mVisibleISL - разрешает вывод наименований ISL для внешних ручных вил | //|mWriteToFile - задает запись значений Меток в файл *.csv | //| метки для динамических вил записываются в папку Price Label D | //| метки для статических вил записываются в папку Price Label S | //| | //|mPeriodWriteToFile - задает количество минут, чеез которое в файл | //| записываются новые значения Меток | //| | //|-------------------------------------------------------------------------| //| | //| "Parameters for micmed Channels" | //| | //|-------------------------------------------------------------------------| //| Каналы micmed'a строятся с помощью вил Эндрюса | //| | //|ExtCM_0_1A_2B_Static, ExtCM_0_1A_2B_Dinamic - каналы micmed'a. | //| Значение выбирается из 0-5 | //| | //|ExtCM_FiboStatic, ExtCM_FiboDinamic - задается положение срединной | //| линии вил Эндрюса для построения каналов micmed'a | //|-------------------------------------------------------------------------| //| | //| "Parameters for fibo Fan" | //| | //|-------------------------------------------------------------------------| //|ExtFiboFanColor - включает произвольные фибовееры заданием цвета. | //| | //|ExtFiboFanNum - номер луча ZigZag-a, на котором будут выводиться | //| произвольные фибовееры. 12 и <=9 статические расширения Фибоначчи | //| | //|ExtFiboExpansionColor - задает цвет линий расширений Фибоначчи | //| | //|ExtExpansionStyle - устанавливает стиль линий уровней расширений | //| Фибоначчи | //| | //|ExtExpansionWidth - устанавливает толщину линий уровней расширений | //| Фибоначчи | //|-------------------------------------------------------------------------| //| | //| "Parameters for versum Levels" | //| | //|-------------------------------------------------------------------------| //|ExtVLDinamicColor - включае Versum Levels динамические выбором цвета | //| | //|ExtVLStaticColor - включает Versum Levels статические выбором цвета | //| | //|ExtVLStaticNum - задает номер вершины, от которой выводятся | //| Versum Levels | //| | //|ExtVLStyle - устанавливает стиль линий уровней Versum Levels | //| | //|ExtVLWidth - устанавливает толщину линий уровней Versum Levels | //|-------------------------------------------------------------------------| //| | //| "Parameters for fibo Arc" | //| | //|-------------------------------------------------------------------------| //|ExtArcDinamicNum - задает номер переломов ZigZag до которых | //| строятся динамические фибо дуги | //| | //|ExtArcStaticNum - задает номер переломов ZigZag на которых | //| строятся статические фибо дуги | //| | //|ExtArcDinamicColor - задает цвет динамических фибо дуг | //| | //|ExtArcStaticColor - задает цвет статических фибо дуг | //| | //|ExtArcDinamicScale - задает масштаб динамических фибо дуг | //| 0 - автомасштаб; >0 - масштаб задается пользователем | //| | //|ExtArcStaticScale задает масштаб стамических фибо дуг | //| 0 - автомасштаб; >0 - масштаб задается пользователем | //| | //|ExtArcStyle - устанавливает стиль линий уровней фибо дуг | //| | //|ExtArcWidth - устанавливает толщину линий уровней фибо дуг | //|-------------------------------------------------------------------------| //| | //| "Golden Spiral" | //| | //|-------------------------------------------------------------------------| //|ExtSpiralNum - задает номер переломов ZigZag, на которых | //| строится золотая спираль | //| | //|goldenSpiralCycle - задает расстояние между витками. Чем больше число, | //| тем меньше расстояние между витками спирали. | //| | //|accurity - задает длину отрезков прямых линий, которыми строится | //| спираль | //| | //|NumberOfLines задает количество отрезков прямых линий, из которых | //| строится спираль | //| | //|clockWiseSpiral - задает направление закручивания спирали | //| true - спираль закручивается по часовой стрелке | //| false - спираль закручивается против часовой стрелки | //| | //|spiralColor1 - задает первый цвет линии спирали | //| | //|spiralColor2 - задает второй цвет линии спирали | //| | //|ExtSpiralStyle - устанавливает стиль линии спирали | //| | //|ExtSpiralWidth - устанавливает толщину линии спирали | //|-------------------------------------------------------------------------| //| | //| "Parameters for Pivot ZigZag" | //| | //|-------------------------------------------------------------------------| //|ExtPivotZZ1Color - задает цвет Pivot ZigZag 1 | //| | //|ExtPivotZZ2Color - задает цвет Pivot ZigZag 2 | //| | //|ExtPivotZZ1Num - задает номера луча, на котором рассчитывается 1 | //| Pivot ZigZag | //| | //|ExtPivotZZ2Num - задает номера луча, на котором рассчитывается 2 | //| Pivot ZigZag | //| | //|ExtPivotZZStyle - устанавливает стиль линий уровней Pivot ZigZag | //| | //|ExtPivotZZWidth - устанавливает толщину линий уровней Pivot ZigZag | //|-------------------------------------------------------------------------| //| | //| "Parameters for Channels" | //| | //|-------------------------------------------------------------------------| //|ExtTypeChannels - Задает тип канала. | //| 1 - линия тренда проходит через перелом зигзага и | //| по касательной к рынку. Линия целей проходит | //| параллельно линии тренда. Этот канал строится | //| или на одном луче, или на двух последовательных | //| | //| 2 - линия тренда и линия целей проходят параллельно | //| лучу зигзага по касательной к рынку. Луч зигзага | //| может проходить между любыми переломами от 1 до 9 | //| | //|ExtTypeLineChannels - задает тип линий тренда и целей. Может | //| принимать значения от 0 до 3 | //| | //|ExtChannelsNum - задает номера переломов зигзага, между которыми | //| строится канал. | //| | //|ExtLTColor - задает цвет линии тренда | //|ExtLCColor - задает цвет линии целей | //|ExtLTChannelsStyle - задает стиль линии тренда | //|ExtLTChannelsWidth - задает толщину линии тренда | //|ExtLCChannelsStyle - задает стиль линии целей | //|ExtLCChannelsWidth - задает толщину линии целей | //|ExtRay -разрешает или запрещает вывод канала вправо | //|-------------------------------------------------------------------------| //| | //| "Parameters for Fibo Time" | //| | //|-------------------------------------------------------------------------| //|ExtFiboTimeNum - задает переломы зигзага, от которых строятся | //| ExtFiboTime, не привязанные к вилам Эндрюса | //| | //|ExtFiboTime1x- включает временные зоны фибо 1. | //| | //|ExtFiboTime2x- включает временные зоны фибо 2. | //| | //|ExtFiboTime3x- включает временные зоны фибо 3. | //| | //|ExtFiboTime1Cx- задает цвет линий временной зоны 1. | //| | //|ExtFiboTime2Cx- задает цвет линий временной зоны 2. | //| | //|ExtFiboTime3Cx- задает цвет линий временной зоны 3. | //| | //|ExtVisibleDateTimex- включает показ значений даты и времени временных | //| зон | //| | //|ExtVisibleNumberFiboTimex- позволяет выделить те Fibo Time, у которых | //| необходимо показать значение даты и времени | //| | //| 1 - выводится значение даты и времени | //| 0 - не выводится | //| | //| первая цифра - для Fibo Time 1 | //| вторая цифра - для Fibo Time 2 | //| третья цифра - для Fibo Time 3 | //|-------------------------------------------------------------------------| //| | //| "Parameters Exp" | //| | //|-------------------------------------------------------------------------| //|chHL = true - выводит уровни подтверждения для режимов | //| ExtIdicator=1, ExtIdicator=2, ExtIdicator=3 | //| | //|PeakDet = true - выводит уровни предыдущих максимумов для всех | //| режимов ExtIndicator | //| | //|chHL_PeakDet_or_vts - true - По умолчанию разрешает вывод линий | //| подтверждения (ценовой канал) и уровни предыдущих максимумов ZigZag. | //| false - выводится индикатор i-vts. | //| | //|ExtLabel =0 обычный режим вывода зигзагов | //| =1 вывод меток в расчетном месте появления нового луча | //| для редима DT - в виде полосок символов | //| =3 вывод меток в расчетном месте появления нового луча | //| для режима DT - в виде одного символа | //| | //|ExtCodLabel - код символа для вывода метки | //| | //|NumberOfBars - Количество баров обсчёта (0-все) для i-vts. | //| | //|NumberOfVTS - это, я так понимаю, параметр сглаживания для i-vts. | //| | //|NumberOfVTS1 - параметр сглаживания для второй копии i-vts. | //|-------------------------------------------------------------------------| //| | //| "Common Parameters" | //| | //|-------------------------------------------------------------------------| //|ExtFiboType - задает, на какие значения фиб настроены фибо инструменты | //| | //| 0 - стандартные фибы | //| 1 - фибы с числами Песавенто и т.д. | //| 2 - фибы, заданные пользователем | //| | //|ExtFiboTypeFree - задание пользовательских фиб для: | //| 1) фибо вееров вдоль медианы вил Эндрюса | //| 2) произвольных фибо вееров | //| 3) уровней фибо | //| 4) расширений фибоначчи | //| 6) фибо дуг | //| | //|ExtObjectColor - задает цвет линии, соединяющей базовые точки объектов | //|ExtObjectStyle - задает cтиль линии, соединяющей базовые точки объектов | //|ExtObjectWidth - задает толщину линии, соединяющей базовые точки объектов| //| | //|ExtDinamic - разрешает вывод статических инструментов как динамических | //| при этом при появлении нового луча статические | //| инструменты перемещаются на другие переломы зигзага | //| | //|ExtVisibleDinamic - позволяет выделить, какие статические | //| инструменты выводить в динамическом режиме | //| | //| Всего 11 инструментов. | //| | //| Перечислю их по порядку следования в списке: | //| 1 - нумерация переломов зигзага | //| 2 - статические фибо уровни и первый тип расширений фибо | //| 3 - статические вилы Эндрюса и все, что связано с вилами | //| 4 - статические фибо вееры | //| 5 - статические фибо расширения | //| 6 - статические Versum Levels | //| 7 - статические фибо дуги | //| 8 - статическая фибо спираль | //| 9 - статический Pivot ZigZag | //| 10 - каналы | //| 11 - Fibo Time | //| | //| По умолчанию ExtVisibleDinamic = "01000000000" | //| 0 - выводится в статическом режиме | //| 1 - выводится в динамическом режиме | //| | //|RefreshStaticNewRayZZ - разрешает перерисовку статических инструментов | //| в случаев образования вместо трех первых лучей зигзага | //| одного луча. | //| | //|AutoTestRedZone - при = true и | //| ExtDinamic = true и ExtVisibleDinamic = "00100000000" | //| статические вилы меняют положение только после выхода цены | //| за красную зону в новом положении вил Эндрюса | //| | //|ZigZagHighLow - задает, от каких точек делать построение | //| паттернов Песавенто, вил Эндрюса и т.д. | //| true - от экстремумов баров | //| false - от переломов ZigZag, когда они висят в "воздухе" | //| | //|ExtSendMail - отправка сообщения на email о появившемся паттерне. | //| | //|ExtAlert - разрешает вывод сообщения и звукового сигнала при | //| возникновении нового луча ZigZag | //| | //|ExtPlayAlert - разрешает вывод сообщения и звукового сигнала при | //| появлении нового паттерна | //| | //|ExtBack - задает вывод всех объектов в виде фона | //| | //|ExtSave - разрешает сохранение комплекта статических вил и | //| Fibo Time | //| | //|info_comment - позволяет выделить группу параметров для вывода этой | //| группы в информационной строке. | //| Всего 5 групп параметров. | //| 0 - группа параметров не выводится | //| 1 - группа параметров выводится | //| | //| Группы параметров: | //| 1 - информация о свечах со старших таймфреймов | //| 2 - % изменения луча для лучевой тактики | //| 3 - параметры зигзагов | //| 4 - информация о найденном паттерне Gartley | //| 5 - вывод расчетных значений RL, если правую границу | //| RedZone вил Эндрюса проводить по касательной к рынку | //| | //|infoMerrillPattern - true - выводить информацию о паттернах | //| false - не выводить информацию о паттернах | //| | //|infoTF - включает информацию по 5 старшим таймфреймам.(стакан цен) | //| Выводится наименование таймфрейма. Размер свечи в пунктах. | //| Текущее положение цены относительно минимума. | //| Также показывает Высоту луча зигзага выраженную в процентах. | //| Показывает режим работы индикатора и параметры зигзагов. | //| Показывает названия паттернов Gartley и ценовой размер зоны | //| возможного развития точки D для паттернов Gartley. | //| Выводит значение размера RedZone вил Эндрюса для значений | //| ExtRedZoneDinamic = 1 и ExtRedZoneStatic = 1 | //| | //| Вывод вертикальной линии на нулевом баре | //|CursorLine - разрешает вывод вертикальной линии на нулевом баре | //|CLColor - задает цвет вертикальной линии | //|CLWidth - задает толщину вертикальной линии | //|CLStyle - задает стиль вертикальной линии | //|CLBack - задает вывод линии над или под графиком | //| | //| Следующая группа параметров выводит наименование паттернов Gartley | //| крупным шрифтом | //|bigText - разрешает вывод наименования паттерна крупным шрифтом | //| Также выводится наименование паттернов Меррилла крупным шрифтом | //|bigTextSize - задает размер шрифта | //|bigTextColor - задает цвет шрифта (для Gartley Bullish паттерны) | //|bigTextColorBearish - задает цвет шрифта для Gartley Bearish паттернов | //|bigTextX - расстояние по горизонтали до места вывода надписи | //|bigTextY - расстояние по вертикали до места вывода надписи | //| | //|ExtVisible - отключение вывода ZUP без выгрузки из памяти | //|ExtComplekt - задает номер индикатора. При выводе на график нескольких | //| индикаторов через этот параметр задается номер копии. | //| При этом все копии индикатора будут работать корректно. | //+-------------------------------------------------------------------------+ #property copyright "nen" #property link "http://www.onix-trade.net/forum/topic/118-gartley-patterns-и-их-модификации/page__view__findpost__p__433712" // описание http://onix-trade.net/forum/index.php?s=&showtopic=373&view=findpost&p=72865 #property stacksize 65535 #property indicator_chart_window #property indicator_buffers 6 #property indicator_color1 Magenta //Red //#property indicator_width6 5 #property indicator_color2 Green #property indicator_color3 Orange #property indicator_color4 LightSkyBlue #property indicator_color5 LemonChiffon //#property indicator_color4 Chartreuse //#property indicator_color5 Red #property indicator_color6 Magenta //Yellow #import "user32.dll" int GetClientRect(int hWnd,int lpRect[]); #import #define pi 3.14159265 #define phi 1.6180339887 //=================================== //---- indicator parameters extern string ______________0_____________ = "Parameters for ZigZag"; extern int ExtIndicator = 0; extern int ParametresZZforDMLEWA = 6; extern int minBars = 8; extern int minSize = 50; // Переменные от ZigZag из МТ extern int ExtDeviation = 5; extern int ExtBackstep = 3; // Переменная для nen-ZigZag extern int GrossPeriod = 240; //---- extern double minPercent = 0.0; // 0.08 extern int ExtPoint=11; // количество точек зигзага для зигзага Talex // Параметры для зигзага, разработанного wellx 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 = Red; 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 = Sienna; extern color ExtFiboS = Teal; 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 = 7; extern color ExtLine = DarkBlue; extern color ExtLine886 = Purple; extern color ExtNotFibo = SlateGray; extern color ExtPesavento = FireBrick; // Yellow; Цвета для белого фона. Убрал цвета для черного фона extern color ExtGartley886 = Red; // GreenYellow; color colorPPattern; // Паттерны Gartley extern string ______________3_____________ = "Parameters for Gartley Patterns"; extern int AlgorithmSearchPatterns = 0; extern int PotencialsLevels_retXD = 1; extern int visibleLevelsABCD = 3; extern int PotencialsLevelsNum = 5; // Праметры для зигзага из MT4 и зигзага Talex extern int maxDepth = 55; extern int minDepth = 3; extern bool FiboStep = true; //false; extern int IterationStepDepth = 2; // Параметры для зигзага Алекса 1 и зигзага Ensign - меняем размер extern int maxSize_ = 150; extern int minSize_ = 15; extern int IterationStepSize = 3; // Параметры для зигзага Алекса 2 - меняем процент extern double maxPercent_ = 10.0; extern double minPercent_ = 0.4; extern double IterationStepPercent = 15; // extern bool DirectionOfSearchMaxMin = true; extern int SelectPattern = 1; extern string visiblePattern = "000000000000000000000000000"; extern int NumberPattern = 1; // Номер паттерна, по которому калибруется зигзаг и параметры которого выводятся через InfoTF extern int ExtGartleyTypeSearch = 0; extern int ExtHiddenPP = 1; extern bool ExtGartleyOnOff = false; //extern int VarDisplay=0; extern int maxBarToD = 15; extern int patternInfluence = 1; //2; extern bool patternTrue = true; extern double AllowedBandPatternInfluence = 1.618; extern int RangeForPointD = 2; // 0; // extern int VectorOfAMirrorTrend = 2; extern color ExtColorRangeForPointD = Red; extern color ExtLineForPointD_AB = MediumBlue; //Aqua; extern color ExtLineForPointD_BC = Chocolate; //Gold; extern color ExtColorPatterns = Blue; extern string ExtColorPatternList = "Blue,DarkGreen,Navy,Sienna,MediumBlue,RoyalBlue,DodgerBlue,CornflowerBlue,LightSkyBlue,SlateBlue,MediumSlateBlue,SlateGray,LightSteelBlue"; extern double ExtDeltaGartley = 0.09; extern double ExtDeltaStrongGartley = 0.07; extern int varStrongPatterns = 1; extern int levelD = 1; extern color colorLevelD = Red; //--------------- extern bool Equilibrium = true; extern bool ReactionType = false; extern int EquilibriumStyle = 1; extern int EquilibriumWidth = 0; extern color ColorEquilibrium = Red; extern color ColorReaction = Tomato; //Yellow; //--------------- Dragon ------------ extern bool Dragon = true; extern int PeakZZDragon = 5; //--------------- 4-Point Pattern ------------ extern bool Ext_4PointPattern = true; extern double _maxXB = 0.618; //--------------- 5-0 ------------ extern bool _50 = true; //--------------- AB=CD ------------ extern bool ABCD = true; extern bool visibleABCDrayZZ = true; extern int ABCDrayZZStyle = 0; extern int ABCDrayZZWidth = 4; extern string ABCDAlternate = "0.382,0.5,0.618,0.786,0.886,1.272,1.618,2.0,2.618"; //--------------- Custom 5-Point Pattern extern int CustomPattern = 0; // 0 - не выводится пользовательский паттерн // 1 - выводится вместе с основной группой паттернов // 2 - выводится только 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 string ______________4_____________ = "Parameters for Andrews Pitchfork"; extern int ExtPitchforkDinamic = 2; extern bool AutoAPDinamicTestRedZone = true; extern double ExtPitchforkDinamicCustom = 0; extern color ExtLinePitchforkD = DarkOrange; //MediumSlateBlue; extern int ExtPitchforkStatic = 2; extern int ExtPitchforkStaticNum = 3; extern double ExtPitchforkStaticCustom = 0; extern color ExtLinePitchforkS = MediumBlue; // DarkKhaki; // extern int ExtMasterPitchfork = 0; extern color ExtPitchforkStaticColor = CLR_NONE; extern int ExtPitchforkStyle = 1; extern int ExtPitchforkWidth = 0; // Линии реакции RL extern bool ExtRLDinamic = true; extern int ExtRLStyleDinamic = 1; extern bool ExtVisibleRLDinamic = true; extern bool ExtRLStatic = true; // false; // extern int ExtRLStyleStatic = 1; extern bool ExtVisibleRLStatic = true; extern bool ExtRL146 = true; extern bool ExtRLineBase = true; // RedZone для линий реакции extern int ExtRedZoneDinamic = 2; extern int ExtRedZoneStatic = 2; extern double ExtRZDinamicValue = 0; extern double ExtRZStaticValue = 0; extern color ExtRZDinamicColor = Salmon; extern color ExtRZStaticColor = Salmon; // Внутренние Сигнальные Линии extern bool ExtISLDinamic = true; // false; // extern int ExtISLStyleDinamic = 1; extern bool ExtVisibleISLDinamic = true; extern bool ExtISLStatic = true; // false; extern int ExtISLStyleStatic = 1; extern bool ExtVisibleISLStatic = true; extern int ExtISLWidth = 0; //extern color ExtISLChannelDinamicColor = DarkViolet; //extern color ExtISLChannelStaticColor = CadetBlue; extern color ExtISLChannelDinamicColor = Turquoise; // CLR_NONE; extern color ExtISLChannelStaticColor = Aqua; // DarkSlateGray; // CLR_NONE; // // Сигнальные линии 50% медианы extern bool ExtSLMDinamic = true; //false; extern color ExtSLMDinamicColor = DarkOrange; //MediumSlateBlue; extern bool ExtSLMStatic = true; // false; // extern color ExtSLMStaticColor = MediumBlue; // DarkKhaki; // extern bool ExtFSLShiffLinesDinamic = true; //false; // вывод линии FSL линий Шиффа для динамических вил Эндрюса extern color ExtFSLShiffLinesDinamicColor = DarkOrange; //MediumSlateBlue; // MediumBlue; // DarkKhaki; // extern bool ExtFSLShiffLinesStatic = true; // false; // вывод линии FSL линий Шиффа для статических вил Эндрюса extern color ExtFSLShiffLinesStaticColor = MediumBlue; // DarkKhaki; // // Предупреждающие и Контрольные линии статических Вил Эндрюса extern bool ExtUTL = false; // true; // extern bool ExtLTL = false; // true; // extern bool ExtUWL = false; // true; // extern bool ExtVisibleUWL = false; extern bool ExtLWL = false; // true; // extern bool ExtVisibleLWL = false; extern bool ExtLongWL = false; // Разворотная зона Pivot Zone extern color ExtPivotZoneDinamicColor = CLR_NONE; extern color ExtPivotZoneStaticColor = CLR_NONE; extern bool ExtPivotZoneFramework = false; // Переменные для построения вил Эндрюса от произвольных свечей extern bool ExtCustomStaticAP = false; // true; // extern bool AutoMagnet = true; extern int AMBars = 5; // Построение комплекта вил от выбранных свечей //---------------------------------------------------------------------- //extern datetime ExtDateTimePitchfork_1 = D'11.07.2006 00:00'; //extern datetime ExtDateTimePitchfork_2 = D'19.07.2006 00:00'; //extern datetime ExtDateTimePitchfork_3 = D'09.08.2006 00:00'; //---------------------------------------------------------------------- // Ниже выбраны временные параметры для построения вил Эндрюса для всей истории eurusd для дневок //---------------------------------------------------------------------- extern bool ExtPitchforkCandle = false; extern datetime ExtDateTimePitchfork_1 = D'15.06.1989 00:00'; extern datetime ExtDateTimePitchfork_2 = D'08.03.1995 00:00'; extern datetime ExtDateTimePitchfork_3 = D'26.10.2000 00:00'; extern bool ExtPitchfork_1_HighLow = false; // Переменные для фибовееров extern bool ExtFiboFanDinamic = false; // может выводиться самостоятельно extern bool ExtFiboFanStatic = false; // выводится только совместно со статическими вилами extern bool ExtFiboFanExp = true; extern bool ExtFiboFanHidden = false; extern color ExtFiboFanD = Sienna; extern color ExtFiboFanS = Teal; extern color ExtFiboFanMedianaDinamicColor = CLR_NONE; extern color ExtFiboFanMedianaStaticColor = CLR_NONE; // Временные зоны Фибо в составе вил Эндрюса extern bool ExtFiboTime1 = false; extern bool ExtFiboTime2 = false; extern bool ExtFiboTime3 = false; extern color ExtFiboTime1C = Teal; extern color ExtFiboTime2C = Sienna; extern color ExtFiboTime3C = Aqua; extern bool ExtVisibleDateTime = false; extern string ExtVisibleNumberFiboTime = "111"; //---------------------------------------------------------------------- // Задание пользовательских уровней фибо для инструментов, встроенных в вилы Эндрюса extern bool ExtFiboFreePitchfork = true; extern string ExtFiboFreeRLDinamic = "0.236,0.382,0.618,1.0,1.618,2.618,4.236,6.854,11.09,17.944,29.034,46.979,76.013"; extern string ExtFiboFreeRLStatic = "0.236,0.382,0.618,1.0,1.618,2.618,4.236,6.854,11.09,17.944,29.034,46.979,76.013"; extern string ExtFiboFreeISLDinamic = "0.236,0.382,0.618,0.764"; extern string ExtFiboFreeISLStatic = "0.236,0.382,0.618,0.764"; extern string ExtFiboFreeUWL = "0.382,0.618,1.0,1.618,2.618,4.236"; extern string ExtFiboFreeLWL = "0.382,0.618,1.0,1.618,2.618,4.236"; extern string ExtFiboFreeFT1 = "0.382,0.618,1.0,1.618,2.618"; extern string ExtFiboFreeFT2 = "0.382,0.618,1.0,1.618,2.618"; extern string ExtFiboFreeFT3 = "0.382,0.618,1.0,1.618,2.618"; //---------------------------------------------------------------------- // Целевые уровни и зоны extern int mSelectVariantsPRZ = 0; extern int mTypeBasiclAP = 0; extern int mTypeExternalAP = 0; extern int mExternalHandAP = 0; extern bool mAuto_d = true; // false; // extern bool mAuto_s = true; // false; // extern bool mSaveWL_TL = true; extern bool mOutRedZone = false; // true; // extern bool mExitFSL_SSL = true; // false; // extern bool mPivotPoints = true; extern bool mPivotPointsChangeColor = false; extern int mSSL = 0; extern int m1_2Mediana = 0; extern int mISL382 = 0; extern int mMediana = 0; extern int mISL618 = 0; extern int mFSL = 0; extern int mSLM = 0; extern int mFSLShiffLines = 0; extern int mUTL = 0; extern int mLTL = 0; extern int mUWL = 0; extern int mLWL = 0; extern bool mCriticalPoints = false; extern int mSSL_d = 0; extern int m1_2Mediana_d = 0; extern int mISL382_d = 0; extern int mMediana_d = 0; extern int mISL618_d = 0; extern int mFSL_d = 0; extern int mSLM_d = 0; extern int mFSLShiffLines_d = 0; extern bool mCriticalPoints_d = false; extern bool mAllLevels = true; extern color mColorUP = Blue; extern color mColorDN = Red; extern color mColor = DarkOrchid; extern color mColorRectangleUP = LightBlue; extern color mColorRectangleDN = Pink; extern color mColorRectangle = Thistle; extern bool mBack = false; extern bool mBackZones = true; extern int mLineZonesWidth = 5; extern bool mVisibleST = false; extern bool mVisibleISL = true; extern int mPeriodWriteToFile = 60; extern bool mWriteToFile = false; // true; // //---------------------------------------------------------------------- // Каналы micmed'a extern string ________________5_____________ = "Parameters for micmed Channels"; extern int ExtCM_0_1A_2B_Dinamic = 0, ExtCM_0_1A_2B_Static = 0; extern double ExtCM_FiboDinamic = 0.618, ExtCM_FiboStatic = 0.618; //---------------------------------------------------------------------- // Комплект инструментов, работающих совместно с вилами Эндрюса. Конец. //---------------------------------------------------------------------- // Фибовееры дополнительные extern string ______________6_____________ = "Parameters for fibo Fan"; extern color ExtFiboFanColor = CLR_NONE; extern int ExtFiboFanNum = 0; extern int ExtFanStyle = 1; extern int ExtFanWidth = 0; // Расширения Фибоначчи extern string ______________7_____________ = "Parameters for fibo Expansion"; extern int ExtFiboExpansion = 0; extern color ExtFiboExpansionColor = Yellow; extern int ExtExpansionStyle = 2; extern int ExtExpansionWidth = 0; //-------------------------------------- extern string ______________8_____________ = "Parameters for versum Levels"; extern color ExtVLDinamicColor = CLR_NONE; extern color ExtVLStaticColor = CLR_NONE; extern int ExtVLStaticNum = 0; extern int ExtVLStyle = 0; extern int ExtVLWidth = 0; //-------------------------------------- extern string ______________9_____________ = "Parameters for fibo Arc"; extern int ExtArcDinamicNum = 0; extern int ExtArcStaticNum = 0; extern color ExtArcDinamicColor = Sienna; extern color ExtArcStaticColor = Teal; extern double ExtArcDinamicScale = 0; extern double ExtArcStaticScale = 0; extern int ExtArcStyle = 0; extern int ExtArcWidth = 0; extern string ______________10_____________ = "Golden Spiral"; extern int ExtSpiralNum = 0; extern double goldenSpiralCycle = 1; extern double accurity = 0.2; extern int NumberOfLines = 200; extern bool clockWiseSpiral = true; extern color spiralColor1 = Blue; extern color spiralColor2 = Red; extern int ExtSpiralStyle = 0; extern int ExtSpiralWidth = 0; extern string ______________11_____________ = "Pivot ZigZag"; extern color ExtPivotZZ1Color = Blue; extern color ExtPivotZZ2Color = Red; extern int ExtPivotZZ1Num = 0; extern int ExtPivotZZ2Num = 0; extern int ExtPivotZZStyle = 0; extern int ExtPivotZZWidth = 2; extern string ______________12_____________ = "Parameters for Channels"; extern int ExtTypeChannels = 0; extern int ExtTypeLineChannels = 1; extern int ExtChannelsNum = 2; extern color ExtLTColor = Red; extern color ExtLCColor = Green; extern int ExtLTChannelsStyle = 0; extern int ExtLTChannelsWidth = 1; extern int ExtLCChannelsStyle = 2; extern int ExtLCChannelsWidth = 0; extern bool ExtRay = false; extern string ______________13_____________ = "Parameters Fibo Time"; // Временные зоны Фибо extern int ExtFiboTimeNum = 0; extern bool ExtFiboTime1x = false; extern bool ExtFiboTime2x = false; extern bool ExtFiboTime3x = false; extern color ExtFiboTime1Cx = Teal; extern color ExtFiboTime2Cx = Sienna; extern color ExtFiboTime3Cx = Aqua; extern bool ExtVisibleDateTimex = false; extern string ExtVisibleNumberFiboTimex = "111"; extern string ______________14_____________ = "Parameters Exp"; extern bool chHL = false; extern bool PeakDet = false; // Переменные для i-vts extern bool chHL_PeakDet_or_vts = true; extern int ExtLabel = 0; extern int ExtCodLabel = 116; extern int NumberOfBars = 1000; // Количество баров обсчёта (0-все) extern int NumberOfVTS = 13; extern int NumberOfVTS1 = 1; extern string ______________15_____________ = "Common Parameters"; //-------------------------------------- extern int ExtFiboType = 1; extern string ExtFiboTypeFree = "0,0.382,0.618,0.764,1,1.236,1.618"; // пользовательские уровни фибо extern color ExtObjectColor = CLR_NONE; extern int ExtObjectStyle = 1; extern int ExtObjectWidth = 0; // вывод статических объектов в режиме динамических extern bool ExtDinamic = false; //true; // extern string ExtVisibleDinamic = "01100000000"; extern bool RefreshStaticNewRayZZ =true; extern bool AutoTestRedZone = false; //true; // extern bool ZigZagHighLow = true; // -------------------------------- // Дополнительные финкции extern bool ExtSendMail = false; extern bool ExtAlert = false; extern bool ExtPlayAlert = false; // Вывод объектов в виде фона extern bool ExtBack = true; // Сохранение статических вил Эндрюса, Fibo Time и т.д. extern bool ExtSave = false; extern string info_comment = "00111"; extern bool infoMerrillPattern= false; extern bool infoTF = true; // Вывод вертикальной линии на нулевом баре extern bool CursorLine = false; extern color CLColor = Black; extern int CLWidth = 1; extern int CLStyle = 2; extern bool CLBack = False; // Вывод названий паттернов крупным шрифтом extern bool bigText = true; extern int bigTextSize = 16; extern color bigTextColor = Blue; extern color bigTextColorBearish = Red; extern int bigTextX = 50; extern int bigTextY = 50; extern bool ExtVisible = true; extern int ExtComplekt = 132; //=================================== // Массивы для ZigZag // Массив для отрисовки ZigZag double zz[]; // Массив минимумов ZigZag double zzL[]; // Массив максимумов ZigZag double zzH[]; // Массивы для nen-ZigZag double nen_ZigZag[]; int _maxbarZZ; // количество баров, участвующих в расчете зигзагов. // Массив чисел, заданных пользователем 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="", nameObjAPMaster=""; string nameUWL="", nameLWL="", nameUTL="", nameLTL="", nameUWLd="", nameLWLd="", nameUTLd="", nameLTLd=""; // bool descript_b=false; // PPWithBars - текст, выводимый у соединительной линии // descript - описание объектов string PPWithBars="", descript=""; // Матрица для поиска исчезнувших баров afr - массив значений времени пяти последних фракталов и отрисовки динамических и статических фиб // afrl - минимумы, afrh - максимумы 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}; double close_TF=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; // LowPrim,HighPrim,LowLast,HighLast - значения минимумов и максимумов баров double LowPrim,HighPrim,LowLast,HighLast; // numLowPrim,numHighPrim,numLowLast,numHighLast -номера баров int numLowPrim,numHighPrim,numLowLast,numHighLast,k,k1,k2,ki,kiPRZ=0,countLow1,countHigh1,shift,shift1,shift2,shift3; string txtkk=""; // Время бара с первым, вторым и третьим от нулевого бара фракталом int timeFr1new,timeFr2new,timeFr3new; // Счетчик фракталов int countFr; // Бар, до которого надо рисовать соединительные линии от нулевого бара int countBarEnd=0,TimeBarEnd; // Бар, до которого надо пересчитывать от нулевого бара int numBar=0; // Номер объекта int numOb; // flagFrNew=true - образовался новый фрактал или первый фрактал сместился на другой бар. =false - по умолчанию. bool flagFrNew=false; // идентификатор нового луча bool newRay=true; // flagGartley - появление нового паттерна Gartley или исчезновение паттерна Gartley bool flagGartley=false; // Период текущего графика int perTF; bool Demo; // Переменные для зигзага, разработанного wellx bool first=true; int NewBarTime=0, countbars=0; int lasthighpos,lastlowpos,realcnt=0; double lasthigh,lastlow; double int_to_d=0, int_to_d1=0, int_to_d2=0; int counted_bars, cbi, iBar; // средний размер бара текущего таймфрейма // The average size of a bar double ASBar; // Переменные для ZigZag Алекса и индикатора подобного встроенному в Ensign 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; // fcount0 - при обнулении счетчика пропущенных баров на 0 баре fcount0=true. // На следующем баре =false и можно определять точку перелома bool fh=false,fl=false,fcount0,PeakDetIni; /* // Переменные для Свингов Ганна double lLast_m=0, hLast_m=0; int countBarExt; // счетчик внешних баров int countBarl,countBarh; */ // Переменные для nen-ZigZag bool hi_nen; bool init_zz=true; // Переменные для расширенного режима работы индикатора int mFibo[]={0,0}, mPitch[]={0,0,0}, mFan[]={0,0}, mExpansion[]={0,0,0}, mVL[]={0,0,0}, mArcS[]={0,0}, mArcD[]={0,0}, mSpiral[]={0,0},mChannels[]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; // Переменные для построения вил Эндрюса по свечам int mPitchTime[]={0,0,0}; int mPitchTimeSave; double mPitchCena[]={0.0,0.0,0.0}; double hBar, lBar; datetime tiZZ; int _ExtPitchforkStatic=0, _ExtPitchforkDinamic=0; // переменные для vts double ms[2]; // Переменные для паттернов Gartley string vBullBear = ""; // переменная для обозначения бычий или медвежий паттерн string vNamePattern = ""; // переменная для обозначения наименования паттерна string vBullBearToNumberPattern = ""; string vNamePatternToNumberPattern = ""; string vNameStrongToNumberPattern = ""; string vNameStrongPattern = ""; int maxPeak; bool vPatOnOff = false, vPatNew = false, saveParametersZZ=false; int Depth; datetime TimeForDmin = 0, TimeForDminToNumberPattern; datetime TimeForDmax = 0, TimeForDmaxToNumberPattern; double LevelForDmin = 0, LevelForDminToNumberPattern; double LevelForDmax = 0, LevelForDmaxToNumberPattern; double PeakCenaX[1],PeakCenaA[1],PeakCenaB[1],PeakCenaC[1],PeakCenaD[1]; datetime PeakTimeX[1],PeakTimeA[1],PeakTimeB[1],PeakTimeC[1],PeakTimeD[1]; int countGartley = 0; // Счетчик паттернов int minBarsToNumberPattern; int minSizeToNumberPattern; double minPercentToNumberPattern; color ColorList[]; int ColorSize; int countColor = 0; bool flagExtGartleyTypeSearch2=false; int minBarsSave, minBarsX; string info_RZS_RL="",info_RZD_RL=""; bool CustomPat_[27]; string namepatterns[27]= {"Gartley", "Bat", "A Alternate Shark", "A Nen STAR", "Butterfly", "Crab", "A Shark", "A Cypher", "A Butterfly", "A Crab", "Shark", "Cypher", "A Gartley", "A Bat", "Alternate Shark", "Nen STAR", "Alternate Bat", "Deep Crab", "Black swan", "max Bat", "max Gartley", "max Butterfly", "TOTAL 1", "TOTAL 2", "TOTAL 3", "TOTAL 4", "TOTAL"}; double minXB_[27]= {0.618, 0.382, 0.446, 0.5, 0.786, 0.382, 0.446, 0.5, 0.382, 0.276, 0.382, 0.382, 0.618, 0.382, 0.382, 0.382, 0.382, 0.886, 1.382, 0.382, 0.382, 0.618, 0.382, 0.382, 0.276, 0.382, 0.276}; double maxXB_[27]= {0.618, 0.5, 0.618, 0.786, 0.786, 0.618, 0.618, 0.786, 0.618, 0.446, 0.618, 0.618, 0.786, 0.618, 0.618, 0.618, 0.382, 0.886, 2.618, 0.618, 0.618, 0.886, 0.786, 0.786, 0.618, 0.786, 0.786}; double minAC_[27]= {0.382, 0.382, 0.618, 0.707, 0.382, 0.382, 0.618, 0.707, 1.128, 1.128, 1.128, 1.128, 1.128, 1.128, 1.128, 1.128, 0.382, 0.382, 0.236, 0.382, 0.382, 0.382, 0.382, 0.382, 1.128, 1.128, 0.382}; double maxAC_[27]= {0.886, 0.886, 0.886, 0.886, 0.886, 0.886, 0.886, 0.886, 2.618, 2.618, 1.618, 1.414, 2.618, 2.618, 1.618, 1.414, 0.886, 0.886, 0.5, 0.886, 0.886, 0.886, 0.886, 0.886, 2.618, 2.618, 2.618}; double minBD_[27]= {1.272, 1.618, 1.618, 1.618, 1.618, 2.24, 1.618, 1.618, 1.272, 1.618, 1.618, 1.272, 1.618, 2.0, 1.618, 1.272, 2.0, 2.618, 1.128, 1.272, 1.128, 1.272, 1.272, 1.618, 1.272, 1.618, 1.272}; double maxBD_[27]= {1.618, 2.618, 2.618, 2.618, 2.618, 3.618, 2.618, 2.618, 1.272, 2.618, 2.236, 2.0, 1.618, 2.618, 2.236, 2.0, 3.618, 3.618, 2.0, 2.618, 2.236, 2.618, 2.618, 3.618, 2.618, 2.618, 3.618}; double minXD_[27]= {0.786, 0.886, 0.886, 0.786, 1.272, 1.618, 1.128, 1.272, 0.618, 0.618, 0.886, 0.786, 1.272, 1.128, 1.128, 1.272, 1.128, 1.618, 1.128, 0.886, 0.618, 1.272, 0.786, 1.128, 0.618, 1.128, 0.618}; double maxXD_[27]= {0.786, 0.886, 0.886, 0.786, 1.618, 1.618, 1.128, 1.272, 0.786, 0.618, 0.886, 0.786, 1.272, 1.128, 1.128, 1.272, 1.128, 1.618, 2.618, 0.886, 0.786, 1.618, 0.886, 1.618, 0.886, 1.272, 1.618}; // массив кодов точных паттернов int codPatterns[788,3]= {5,10912,9,5,10913,9,5,10914,9,5,10915,9,5,11012,9,5,11013,9,5,11014,9,5,11015,9,5,11112,9,5,11113,9,5,11114,9,5,11115,9,5,11212,9,5,11213,9,5,11214,9,5,11215,9,5,11312,9,5,11313,9, 5,11314,9,5,11315,9,5,11412,9,5,11413,9,5,11414,9,5,11415,9,5,11512,9,5,11513,9,5,11514,9,5,11515,9,5,20910,8,5,20912,9,5,20913,9,5,20914,9,5,20915,9,5,21010,8,5,21012,9,5,21013,9, 5,21014,9,5,21015,9,5,21110,8,5,21112,9,5,21113,9,5,21114,9,5,21115,9,5,21210,8,5,21212,9,5,21213,9,5,21214,9,5,21215,9,5,21310,8,5,21312,9,5,21313,9,5,21314,9,5,21315,9,5,21410,8, 5,21412,9,5,21413,9,5,21414,9,5,21415,9,5,21510,8,5,21512,9,5,21513,9,5,21514,9,5,21515,9,5,30910,8,5,30912,9,5,30913,9,5,30914,9,5,30915,9,5,31010,8,5,31012,9,5,31013,9,5,31014,9, 5,31015,9,5,31110,8,5,31112,9,5,31113,9,5,31114,9,5,31115,9,5,31210,8,5,31212,9,5,31213,9,5,31214,9,5,31215,9,5,31310,8,5,31312,9,5,31313,9,5,31314,9,5,31315,9,5,31410,8,5,31412,9, 5,31413,9,5,31414,9,5,31415,9,5,31510,8,5,31512,9,5,31513,9,5,31514,9,5,31515,9,5,40910,8,5,41010,8,5,41110,8,5,41210,8,5,41310,8,5,41410,8,5,41510,8,5,50910,8,5,51010,8,5,51110,8, 5,51210,8,5,51310,8,5,51410,8,5,51510,8,6,20910,8,6,21010,8,6,21110,8,6,21210,8,6,21310,8,6,21410,8,6,21510,8,6,30910,8,6,31010,8,6,31110,8,6,31210,8,6,31310,8,6,31410,8,6,31510,8, 6,40910,8,6,41010,8,6,41110,8,6,41210,8,6,41310,8,6,41410,8,6,41510,8,6,50910,8,6,51010,8,6,51110,8,6,51210,8,6,51310,8,6,51410,8,6,51510,8,7,20910,11,7,20911,11,7,20912,11, 7,20913,11,7,21010,8,7,21110,11,7,21111,11,7,21112,11,7,21113,11,7,21210,8,7,21310,8,7,21410,8,7,21510,8,7,30910,11,7,30911,11,7,30912,11,7,30913,11,7,31010,8,7,31110,11,7,31111,11, 7,31112,11,7,31113,11,7,31210,8,7,31310,8,7,31410,8,7,31510,8,7,40612,3,7,40613,3,7,40614,3,7,40615,3,7,40712,3,7,40713,3,7,40714,3,7,40715,3,7,40812,3,7,40813,3,7,40814,3,7,40815,3, 7,40910,11,7,40911,11,7,40912,11,7,40913,11,7,41010,8,7,41110,11,7,41111,11,7,41112,11,7,41113,11,7,41210,8,7,41310,8,7,41410,8,7,41510,8,7,50210,0,7,50211,0,7,50212,0,7,50310,0, 7,50311,0,7,50312,0,7,50410,0,7,50411,0,7,50412,0,7,50510,0,7,50511,0,7,50512,0,7,50610,0,7,50611,0,7,50612,0,7,50613,3,7,50614,3,7,50615,3,7,50710,0,7,50711,0,7,50712,0,7,50713,3, 7,50714,3,7,50715,3,7,50810,0,7,50811,0,7,50812,0,7,50813,3,7,50814,3,7,50815,3,7,50910,11,7,50911,11,7,50912,11,7,50813,11,7,51009,8,7,51110,11,7,51110,11,7,51112,11,7,51113,11, 7,51210,8,7,51310,8,7,51410,8,7,51510,8,7,60612,3,7,60613,3,7,60614,3,7,60615,3,7,60712,3,7,60713,3,7,60714,3,7,60715,3,7,60812,3,7,60813,3,7,60814,3,7,60815,3,7,70612,3,7,70613,3, 7,70614,3,7,70615,3,7,70712,3,7,70713,3,7,70714,3,7,70715,3,7,70812,3,7,70813,3,7,70814,3,7,70815,3,8,20215,1,8,20315,1,8,20415,1,8,20515,1,8,20614,1,8,20615,1,8,20714,1,8,20715,1, 8,20813,1,8,20814,1,8,20815,1,8,20912,10,8,20913,10,8,20914,10,8,21112,10,8,21113,10,8,21114,10,8,21212,10,8,21213,10,8,21214,10,8,30512,2,8,30513,2,8,30514,2,8,30515,2,8,30612,2, 8,30613,2,8,30614,2,8,30615,2,8,30712,2,8,30713,2,8,30714,2,8,30715,2,8,30812,2,8,30813,2,8,30814,2,8,30815,2,8,30912,10,8,30913,10,8,30914,10,8,31112,10,8,31113,10,8,31114,10, 8,31212,10,8,31213,10,8,31214,10,8,40214,1,8,40215,1,8,40314,1,8,40315,1,8,40413,1,8,40414,1,8,40315,1,8,40512,1,8,40513,1,8,40514,1,8,40515,1,8,40612,1,8,40613,1,8,40614,1,8,40615,1, 8,40712,1,8,40713,1,8,40714,1,8,40715,1,8,40812,1,8,40813,1,8,40814,1,8,40815,1,8,40912,10,8,40913,10,8,40914,10,8,41112,10,8,41113,10,8,41114,10,8,41212,10,8,41213,10,8,41214,10, 8,50512,2,8,50513,2,8,50514,2,8,50515,2,8,50612,2,8,50613,2,8,50614,2,8,50615,2,8,50712,2,8,50713,2,8,50714,2,8,50715,2,8,50812,2,8,50813,2,8,50814,2,8,50815,2,8,50912,10,8,50913,10, 8,50914,10,8,51112,10,8,51113,10,8,51114,10,8,51211,10,8,51213,10,8,51214,10,9,20215,16,9,20217,16,9,20314,16,9,20315,16,9,20317,16,9,20414,16,9,20415,16,9,20417,16,9,20513,16, 9,20514,16,9,20515,16,9,20517,16,9,20613,16,9,20614,16,9,20615,16,9,20617,16,9,20713,16,9,20714,16,9,20715,16,9,20813,16,9,20814,16,9,20815,16,9,20913,14,9,20914,14,9,20915,14, 9,20917,14,9,20918,14,9,21013,13,9,21014,13,9,21015,13,9,21113,14,9,21114,14,9,21115,14,9,21117,14,9,21118,14,9,21213,14,9,21214,14,9,21215,14,9,21217,14,9,21218,14,9,21313,13, 9,21314,13,9,21315,13,9,21413,13,9,21414,13,9,21415,13,9,21513,13,9,21514,13,9,21515,13,9,30512,6,9,30513,6,9,30514,6,9,30515,6,9,30612,6,9,30613,6,9,30614,6,9,30615,6,9,30712,6, 9,30713,6,9,30714,6,9,30715,6,9,30812,6,9,30813,6,9,30814,6,9,30815,6,9,30913,14,9,30914,14,9,30915,14,9,30917,14,9,30918,14,9,31013,13,9,31014,13,9,31015,13,9,31113,14,9,31114,14, 9,31115,14,9,31117,14,9,31213,14,9,31214,14,9,31215,14,9,31217,14,9,31313,13,9,31314,13,9,31315,13,9,31413,13,9,31414,13,9,31415,13,9,31513,13,9,31514,13,9,31515,13,9,40512,6, 9,40513,6,9,40514,6,9,40514,6,9,40612,6,9,40613,6,9,40614,6,9,40615,6,9,40712,6,9,40713,6,9,40714,6,9,40715,6,9,40812,6,9,40813,6,9,40814,6,9,40815,6,9,40913,14,9,40914,14,9,40915,14, 9,40917,14,9,41013,13,9,41014,13,9,41015,13,9,41113,14,9,41114,14,9,41115,14,9,41117,14,9,41213,14,9,41214,14,9,41215,14,9,41313,13,9,41314,13,9,41315,13,9,41413,13,9,41414,13, 9,41415,13,9,41513,13,9,41514,13,9,41515,13,9,50512,6,9,50513,6,9,50514,6,9,50415,6,9,50612,6,9,50613,6,9,50614,6,9,50615,6,9,50712,6,9,50713,6,9,50714,6,9,50715,6,9,50812,6, 9,50813,6,9,50814,6,9,50815,6,9,50913,14,9,50914,14,9,50915,14,9,50917,14,9,51013,13,9,51014,13,9,51015,13,9,51113,14,9,51114,14,9,51115,14,9,51117,14,9,51213,14,9,51214,14,9,51215,14, 9,51312,13,9,51314,13,9,51315,13,9,51413,13,9,51413,13,9,51415,13,9,51513,13,9,51514,13,9,51514,13,10,20910,15,10,20911,15,10,20912,15,10,20913,15,10,20915,15,10,21110,15,10,21111,15, 10,21112,15,10,21113,15,10,21115,15,10,30910,15,10,30911,15,10,30912,15,10,30913,15,10,30915,15,10,31110,15,10,31111,15,10,31112,15,10,31113,15,10,31115,15,10,40612,7,10,40613,7, 10,40614,7,10,40615,7,10,40712,7,10,40713,7,10,40714,7,10,40715,7,10,40812,7,10,40813,7,10,40814,7,10,40815,7,10,40910,15,10,40911,15,10,40912,15,10,40913,15,10,40915,15,10,41110,15, 10,41111,15,10,41112,15,10,41113,15,10,41115,15,10,50612,7,10,50613,7,10,50614,7,10,50615,7,10,50712,7,10,50713,7,10,50714,7,10,50715,7,10,50812,7,10,50813,7,10,50814,7,10,50815,7, 10,50910,15,10,50911,15,10,50912,12,10,50913,15,10,51012,12,10,51110,15,10,51111,15,10,51112,12,10,51113,15,10,51212,12,10,51312,12,10,51412,12,10,51512,12,10,60612,7,10,60613,7, 10,60614,7,10,60515,7,10,60712,7,10,60713,7,10,60714,7,10,60715,7,10,60812,7,10,60813,7,10,60814,7,10,60815,7,10,60912,12,10,61012,12,10,61112,12,10,61212,12,10,61312,12,10,61412,12, 10,61512,12,10,70212,4,10,70213,4,10,70214,4,10,70215,4,10,70312,4,10,70313,4,10,70314,4,10,70315,4,10,70412,4,10,70413,4,10,70414,4,10,70415,4,10,70512,4,10,70513,4,10,70514,4, 10,70515,4,10,70612,4,10,70613,4,10,70614,4,10,70615,4,10,70712,4,10,70713,4,10,70714,4,10,70715,4,10,70812,4,10,70813,4,10,70814,4,10,70815,4,10,70912,12,10,71012,12,10,71112,12, 10,71212,12,10,71312,12,10,71412,12,10,71512,12,11,70212,4,11,70213,4,11,70214,4,11,70312,4,11,70313,4,11,70314,4,11,70412,4,11,70413,4,11,70414,4,11,70512,4,11,70513,4,11,70514,4, 11,70612,4,11,70613,4,11,70614,4,11,70712,4,11,70713,4,11,70714,4,11,70812,4,11,70813,4,11,70814,4,12,20212,5,12,20213,5,12,20214,5,12,20215,5,12,20216,5,12,20217,5,12,20118,5, 12,20312,5,12,20313,5,12,20314,5,12,20315,5,12,20316,5,12,20317,5,12,20318,5,12,20412,5,12,20413,5,12,20414,5,12,20415,5,12,20416,5,12,20417,5,12,20418,5,12,20512,5,12,20513,5, 12,20514,5,12,20515,5,12,20516,5,12,20517,5,12,20612,5,12,20613,5,12,20614,5,12,20615,5,12,20615,5,12,20616,5,12,20712,5,12,20713,5,12,20714,5,12,20715,5,12,20716,5,12,20717,5, 12,20812,5,12,20813,5,12,20814,5,12,20815,5,12,20816,5,12,20817,5,12,30212,5,12,30213,5,12,30214,5,12,30215,5,12,30216,5,12,30217,5,12,30218,5,12,30312,5,12,30313,5,12,30214,5, 12,30614,5,12,40217,5,12,40317,5,12,40417,5,12,40517,5,12,40617,5,12,40716,5,12,40717,5,12,40816,5,12,40817,5,12,50217,5,12,50317,5,12,50416,5,12,50616,5,12,50617,5,12,50715,5, 12,50716,5,12,50717,5,12,50814,5,12,50815,5,12,50816,5,12,70212,4,12,70213,4,12,70214,4,12,70312,4,12,70313,4,12,70314,4,12,70412,4,12,70413,4,12,70414,4,12,70512,4,12,70513,4, 12,70514,4,12,70612,4,12,70613,4,12,70614,4,12,70712,4,12,70713,4,12,70614,4,12,70812,4,12,70813,4,12,70814,4,12,80215,17,12,80216,17,12,80217,17,12,80315,17,12,80316,17,12,80317,17, 12,80415,17,12,80416,17,12,80417,17,12,80515,17,12,80516,17,12,80518,17,12,80614,17,12,80615,17,12,80616,17,12,80714,17,12,80715,17,12,80716,17,12,80814,17,12,80815,17,12,80716,5}; // индексный массив для точных паттернов int index[788,2]= {0,10912,1,10913,2,10914,3,10915,4,11012,5,11013,6,11014,7,11015,8,11112,9,11113,10,11114,11,11115,12,11212,13,11213,14,11214,15,11215,16,11312,17,11313,18,11314,19,11315,20,11412, 21,11413,22,11414,23,11415,24,11512,25,11513,26,11514,27,11515,676,20118,670,20212,671,20213,672,20214,258,20215,360,20215,673,20215,674,20216,361,20217,675,20217,677,20312,678,20313, 362,20314,679,20314,259,20315,363,20315,680,20315,681,20316,364,20317,682,20317,683,20318,684,20412,685,20413,365,20414,686,20414,260,20415,366,20415,687,20415,688,20416,367,20417, 689,20417,690,20418,691,20512,368,20513,692,20513,369,20514,693,20514,261,20515,370,20515,694,20515,695,20516,371,20517,696,20517,697,20612,372,20613,698,20613,262,20614,373,20614, 699,20614,263,20615,374,20615,700,20615,701,20615,702,20616,375,20617,703,20712,376,20713,704,20713,264,20714,377,20714,705,20714,265,20715,378,20715,706,20715,707,20716,708,20717, 709,20812,266,20813,379,20813,710,20813,267,20814,380,20814,711,20814,268,20815,381,20815,712,20815,713,20816,714,20817,28,20910,112,20910,140,20910,528,20910,141,20911,529,20911, 29,20912,142,20912,269,20912,530,20912,30,20913,143,20913,270,20913,382,20913,531,20913,31,20914,271,20914,383,20914,32,20915,384,20915,532,20915,385,20917,386,20918,33373,21010, 113,21010,144,21010,34,21012,35,21013,387,21013,36,21014,388,21014,37,21015,389,21015,38,21110,114,21110,145,21110,533,21110,146,21111,534,21111,39,21112,147,21112,272,21112,535,21112, 40,21113,148,21113,273,21113,390,21113,536,21113,41,21114,274,21114,391,21114,42,21115,392,21115,537,21115,393,21117,394,21118,43,21210,115,21210,149,21210,44,21212,275,21212, 45,21213,276,21213,395,21213,46,21214,277,21214,396,21214,47,21215,397,21215,398,21217,399,21218,48,21310,116,21310,150,21310,49,21312,50,21313,400,21313,51,21314,401,21314,52,21315, 402,21315,53,21410,117,21410,151,21410,54,21412,55,21413,403,21413,56,21414,404,21414,57,21415,405,21415,58,21510,118,21510,152,21510,59,21512,60,21513,406,21513,61,21514,407,21514, 62,21515,408,21515,715,30212,716,30213,717,30214,724,30214,718,30215,719,30216,720,30217,721,30218,722,30312,723,30313,278,30512,409,30512,279,30513,410,30513,280,30514,411,30514, 281,30515,412,30515,282,30612,413,30612,283,30613,414,30613,284,30614,415,30614,725,30614,285,30615,416,30615,286,30712,417,30712,287,30713,418,30713,288,30714,419,30714,289,30715, 420,30715,290,30812,421,30812,291,30813,422,30813,292,30814,423,30814,293,30815,424,30815,63,30910,119,30910,153,30910,538,30910,154,30911,539,30911,64,30912,155,30912,294,30912, 540,30912,65,30913,156,30913,295,30913,425,30913,541,30913,66,30914,296,30914,426,30914,67,30915,427,30915,542,30915,428,30917,429,30918,68,31010,120,31010,157,31010,69,31012,70,31013, 430,31013,71,31014,431,31014,72,31015,432,31015,73,31110,121,31110,158,31110,543,31110,159,31111,544,31111,74,31112,160,31112,297,31112,545,31112,75,31113,161,31113,298,31113, 433,31113,546,31113,76,31114,299,31114,434,31114,77,31115,435,31115,547,31115,436,31117,78,31210,122,31210,162,31210,79,31212,300,31212,80,31213,301,31213,437,31213,81,31214, 302,31214,438,31214,82,31215,439,31215,440,31217,83,31310,123,31310,163,31310,84,31312,85,31313,441,31313,86,31314,442,31314,87,31315,443,31315,88,31410,124,31410,164,31410,89,31412, 90,31413,444,31413,91,31414,445,31414,92,31415,446,31415,93,31510,125,31510,165,31510,94,31512,95,31513,447,31513,96,31514,448,31514,97,31515,449,31515,303,40214,304,40215,726,40217, 305,40314,306,40315,309,40315,727,40317,307,40413,308,40414,728,40417,310,40512,450,40512,311,40513,451,40513,312,40514,452,40514,453,40514,313,40515,729,40517,166,40612,314,40612, 454,40612,548,40612,167,40613,315,40613,455,40613,549,40613,168,40614,316,40614,456,40614,550,40614,169,40615,317,40615,457,40615,551,40615,730,40617,170,40712,318,40712,458,40712, 552,40712,171,40713,319,40713,459,40713,553,40713,172,40714,320,40714,460,40714,554,40714,173,40715,321,40715,461,40715,555,40715,731,40716,732,40717,174,40812,322,40812,462,40812, 556,40812,175,40813,323,40813,463,40813,557,40813,176,40814,324,40814,464,40814,558,40814,177,40815,325,40815,465,40815,559,40815,733,40816,734,40817,98,40910,126,40910,178,40910, 560,40910,179,40911,561,40911,180,40912,326,40912,562,40912,181,40913,327,40913,466,40913,563,40913,328,40914,467,40914,468,40915,564,40915,469,40917,99,41010,127,41010,182,41010, 470,41013,471,41014,472,41015,100,41110,128,41110,183,41110,565,41110,184,41111,566,41111,185,41112,329,41112,567,41112,186,41113,330,41113,473,41113,568,41113,331,41114,474,41114, 475,41115,569,41115,476,41117,101,41210,129,41210,187,41210,332,41212,333,41213,477,41213,334,41214,478,41214,479,41215,102,41310,130,41310,188,41310,480,41313,481,41314,482,41315, 103,41410,131,41410,189,41410,483,41413,484,41414,485,41415,104,41510,132,41510,190,41510,486,41513,487,41514,488,41515,191,50210,192,50211,193,50212,735,50217,194,50310,195,50311, 196,50312,736,50317,197,50410,198,50411,199,50412,492,50415,737,50416,200,50510,201,50511,202,50512,335,50512,489,50512,336,50513,490,50513,337,50514,491,50514,338,50515,203,50610, 204,50611,205,50612,339,50612,493,50612,570,50612,206,50613,340,50613,494,50613,571,50613,207,50614,341,50614,495,50614,572,50614,208,50615,342,50615,496,50615,573,50615,738,50616, 739,50617,209,50710,210,50711,211,50712,343,50712,497,50712,574,50712,212,50713,344,50713,498,50713,575,50713,213,50714,345,50714,499,50714,576,50714,214,50715,346,50715,500,50715, 577,50715,740,50715,741,50716,742,50717,215,50810,216,50811,217,50812,347,50812,501,50812,578,50812,218,50813,224,50813,348,50813,502,50813,579,50813,219,50814,349,50814,503,50814, 580,50814,743,50814,220,50815,350,50815,504,50815,581,50815,744,50815,745,50816,105,50910,133,50910,221,50910,582,50910,222,50911,583,50911,223,50912,351,50912,584,50912,352,50913, 505,50913,585,50913,353,50914,506,50914,507,50915,508,50917,225,51009,106,51010,134,51010,586,51012,509,51013,510,51014,511,51015,107,51110,135,51110,226,51110,227,51110,587,51110, 588,51111,228,51112,354,51112,589,51112,229,51113,355,51113,512,51113,590,51113,356,51114,513,51114,514,51115,515,51117,108,51210,136,51210,230,51210,357,51211,591,51212,358,51213, 516,51213,359,51214,517,51214,518,51215,109,51310,137,51310,231,51310,519,51312,592,51312,520,51314,521,51315,110,51410,138,51410,232,51410,593,51412,522,51413,523,51413,524,51415, 111,51510,139,51510,233,51510,594,51512,525,51513,526,51514,527,51514,598,60515,234,60612,595,60612,235,60613,596,60613,236,60614,597,60614,237,60615,238,60712,599,60712,239,60713, 600,60713,240,60714,601,60714,241,60715,602,60715,242,60812,603,60812,243,60813,604,60813,244,60814,605,60814,245,60815,606,60815,607,60912,608,61012,609,61112,610,61212,611,61312, 612,61412,613,61512,614,70212,649,70212,746,70212,615,70213,650,70213,747,70213,616,70214,651,70214,748,70214,617,70215,618,70312,652,70312,749,70312,619,70313,653,70313,750,70313, 620,70314,654,70314,751,70314,621,70315,622,70412,655,70412,752,70412,623,70413,656,70413,753,70413,624,70414,657,70414,754,70414,625,70415,626,70512,658,70512,755,70512,627,70513, 659,70513,756,70513,628,70514,660,70514,757,70514,629,70515,246,70612,630,70612,661,70612,758,70612,247,70613,631,70613,662,70613,759,70613,248,70614,632,70614,663,70614,760,70614, 763,70614,249,70615,633,70615,250,70712,634,70712,664,70712,761,70712,251,70713,635,70713,665,70713,762,70713,252,70714,636,70714,666,70714,253,70715,637,70715,254,70812,638,70812, 667,70812,764,70812,255,70813,639,70813,668,70813,765,70813,256,70814,640,70814,669,70814,766,70814,257,70815,641,70815,642,70912,643,71012,644,71112,645,71212,646,71312,647,71412, 648,71512,767,80215,768,80216,769,80217,770,80315,771,80316,772,80317,773,80415,774,80416,775,80417,776,80515,777,80516,778,80518,779,80614,780,80615,781,80616,782,80714,783,80715, 784,80716,787,80716,785,80814,786,80815}; int levelXD[32,2]; // номер паттерна, код уровня //string namepatterns[18]={"Gartley","Bat","Anti Alternate Shark","Anti Nen Star","Butterfly","Crab","Anti Shark","Anti Cypher","Anti Butterfly","Anti Crab","Shark","Cypher", //"Anti Gartley","Anti Bat","Alternate Shark","Nen Star","Alternate Bat","Deep Crab"}; int nstrcod[8,2]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // массив номеров строк новых номеров retXD int nstrind[8,2]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // массив номеров строк новых номеров retXB int nstrind1[95,2]; double deltapatterns[19,2]; // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 double retpatterns[19]={0.146,0.236,0.382,0.447,0.5,0.618,0.707,0.786,0.886,1.128,1.272,1.414,1.618,2.0,2.236,2.618,3.1416,3.618,4.236}; string retpatternstxt[19]={".146",".236",".382",".447",".5",".618",".707",".786",".886","1.128","1.272","1.414","1.618","2.0","2.236","2.618","3.14","3.618","4.236"}; bool strongABCD[19]; double min_DeltaGartley, max_DeltaGartley; int ret[4]; // XD-XB-AC-BD double _ABCDtype[]; string _ABCDtypetxt[]; int _ABCDsize; // Переменные для Merrill Patterns 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"}; // Переменные для зигзага Talex static int endbar = 0; static double endpr = 0; // Переменные для расчета размеров окна в пикселях для Golden Spiral static int GPixels,VPixels; int rect[4],hwnd; int f=1; // Переменные для каналов int DinamicChannels=-1; // Переменные для ценовых меток в вилах Эндрюса bool mAP = false; // флаг разрешения вывода меток //double mMax, mMin; // цена ближайшей метки вверху и внизу. При пересечении этих ценовых уровней необходимо менять цвет меток. datetime mTime; // граница ближайшей ценовой зоны, при пересечении которой необходимо удалять текущую ценовую зону и выводить следующую ценовую зону. bool mAPs, mAPd; // Флаги - сигналы для создания меток в вилах Эндрюса double RZs=-1, RZd=-1; // расстояние до красной зоны. Рассчитывается при выводе меток. datetime mPeriod; // время следующей записи значений меток в файл bool aOutRedZone[] = {false,false,false}; // массив для хранения разрешений на вывод меток при автоматическом выводе меток при выходе цены из красной зоны // для динамических [0] и статических [1] вил. [2] - для статических вил в динамическом режиме // переменные для работы параметра AutoTestRedZone int pitch_timeRZ[]={0,0,0}; double pitch_cenaRZ[]={0,0,0}; // переменные для работы параметра mOutRedZone для динамических и статических вил int pitch_timeD[]={0,0,0}; double pitch_cenaD[]={0,0,0}; int pitch_timeS[]={0,0,0}; double pitch_cenaS[]={0,0,0}; // Переменные для сохранения значений меток bool mStart=true; // переменная для принудительного запуска вывода меток int aMetki[2][15]; // массив для хранения режимов вывода меток. aMetki[0][15] - метки для статических вил; aMetki[1][15] - метки для динамических вил double aPointAP[2][8]; // массив точек привязки вил Эндрюса. aPointAP[0][6] - статические вилы, aPointAP[1][6] - динамические вилы. // Во втором измерении чередуются время, цена точек // - time1-cena1--time2-cena2--time3-cena3, а также флаги для пересчета вил и меток. // aPointAP[x][6] - флаг пересчета инструментов вил, aPointAP[x][7] - флаг пересчета меток // aPointAP[x][6]=0 - необходимо произвести пересчет // aPointAP[x][6]=1 - пересчет проводить не надо // Пока сделаем алгоритм пересчета меток. (05 ноября 2011) // Этот массив нуженн для пересчета параметров меток. Изменеие точек привязки вызывает пересчет параметров. double arrm_s[][7]; // массив для автоматического вывода меток в статических вилах Эндрюса double arrm_d[][7]; // массив для автоматического вывода меток в динамических вилах Эндрюса double atg[2][9]; // массив тангенсов углов наклона инструментов вил Эндрюса и баз по вертикали int anum_cena[2][2];// массив номеров строк для arrm_s и arrm_d // anum_cena[x][1] - максимальная цена метки; anum_cena[x][0] - минимальная цена метки double aexitFSL_SSL[]={0,0}; // ячейки памяти для работы параметра mExitFSL_SSL // массив строк для создания названий меток в вилах Эндрюса string atextm[]={"","SSL","SLM","50% Mediana","SLM 61.8","ISL 38.2","Mediana","ISL 61.8","FSL","FSL Shiff Lines","50% Mediana","UTL","LTL","UWL","LWL"}; // Переменные для построения вил Эндрюса от произвольных свечей int vX, vY; // Координаты метки APm bool tik2 = false; bool tik1 = true; // APm bool SlavePitchfork = false; string nameCheckLabel_hidden="CheckLabel_hidden"; string nameCheckLabel="CheckLabel"; string nameMagnet[3]; int period_AM[3]; int ExtComplektAPm = 0; // номер комплекта, который устанавливает метку APm в "стойло" string cursor = "Cursor"; //+------------------------------------------------------------------+ //| Custom indicator initialization function. Начало. | //+------------------------------------------------------------------+ int init() { if (!ExtVisible) return(-1); string aa="", aa1="", txt=""; int aa2, i, j; int i_APm=0; // счетчик вил с меткой APm int count_APm; int bb=0,bb1=-1; nameUWL="UWL " + ExtComplekt+"_"; nameLWL="LWL " + ExtComplekt+"_"; nameUTL="UTL " + ExtComplekt+"_"; nameLTL="LTL " + ExtComplekt+"_"; nameUWLd="UWL_d " + ExtComplekt+"_"; nameLWLd="LWL_d " + ExtComplekt+"_"; nameUTLd="UTL_d " + ExtComplekt+"_"; nameLTLd="LTL_d " + ExtComplekt+"_"; vX=30; vY=30; // Координаты метки APm hwnd=WindowHandle(Symbol(),Period()); if(hwnd>0) { GetClientRect(hwnd,rect); GPixels=rect[2]; // здесь функция возвращает кол-во пикселов по горизонтали для окна с графиком, в котором запускается индикатор VPixels=rect[3]; // здесь функция возвращает кол-во пикселов по вертикали } if (ParametresZZforDMLEWA>0 && (ExtIndicator==0 || ExtIndicator==6)) { switch (ParametresZZforDMLEWA) { case 1: minBars=5; ExtBackstep=8; break; case 2: minBars=8; ExtBackstep=13; break; case 3: minBars=13; ExtBackstep=21; break; case 4: minBars=21; ExtBackstep=34; break; case 5: minBars=34; ExtBackstep=55; break; case 6: minBars=55; ExtBackstep=89; break; case 7: minBars=89; ExtBackstep=144; break; case 8: minBars=144; ExtBackstep=233; } } minBarsSave=minBars; IndicatorBuffers(8); if (ExtIndicator==14) { if (auto) { double wrmassiv[]; if (minBar>=100) minBar=61.8; if (minBar<=0) minBar=61.8; if (maxBar>=100) maxBar=38.2; if (minBar<=0) minBar=38.2; ArrayResize(wrmassiv,Bars-1); for (i=Bars-1;i>0;i--) {wrmassiv[i]=High[i]-Low[i]+Point;} ArraySort (wrmassiv); i=MathFloor(minBar*Bars/100); StLevel=MathFloor(wrmassiv[i]/Point); i=MathFloor(maxBar*Bars/100); BigLevel=MathFloor(wrmassiv[i]/Point); } } if (ExtMaxBar>Bars) ExtMaxBar=Bars; if (ExtMaxBar>0) _maxbarZZ=ExtMaxBar; else _maxbarZZ=Bars; // ------- // Gartley Patterns if (ExtIndicator==11 || PotencialsLevels_retXD<0) PotencialsLevels_retXD=0; if (PotencialsLevels_retXD>2) PotencialsLevels_retXD=2; if (ExtIndicator==11 || ExtGartleyOnOff || PotencialsLevels_retXD>0) { j=0; bb1=0; for (i=0;i<788;i++) { if (bb10) { minAC = min_DeltaGartley * minAC; minBD = min_DeltaGartley * minBD; minXB = min_DeltaGartley * minXB; minXD = min_DeltaGartley * minXD; maxAC = max_DeltaGartley * maxAC; maxBD = max_DeltaGartley * maxBD; maxXB = max_DeltaGartley * maxXB; maxXD = max_DeltaGartley * maxXD; } for (i=0;i<27;i++) { minAC_[i] = min_DeltaGartley * minAC_[i]; minBD_[i] = min_DeltaGartley * minBD_[i]; minXB_[i] = min_DeltaGartley * minXB_[i]; minXD_[i] = min_DeltaGartley * minXD_[i]; maxAC_[i] = max_DeltaGartley * maxAC_[i]; maxBD_[i] = max_DeltaGartley * maxBD_[i]; maxXB_[i] = max_DeltaGartley * maxXB_[i]; maxXD_[i] = max_DeltaGartley * maxXD_[i]; } if (ExtGartleyTypeSearch<0) ExtGartleyTypeSearch=0; if (ExtGartleyTypeSearch>2) ExtGartleyTypeSearch=2; if (ExtIndicator==11) { if (ExtHiddenPP<0) ExtHiddenPP=0; if (ExtHiddenPP>2) ExtHiddenPP=2; if (IterationStepDepth<1) IterationStepDepth=1; if (IterationStepDepth>maxDepth-minDepth) IterationStepDepth=maxDepth-minDepth; if (IterationStepSize<1) IterationStepSize=1; if (IterationStepSize>maxSize_-minSize_) IterationStepSize=maxSize_-minSize_; if (IterationStepPercent<1) IterationStepPercent=1; } if (NumberPattern<1) NumberPattern=1; if (ExtIndicator==11 && (ExtHiddenPP==0 || ExtHiddenPP==2)) {ExtHidden=0; ExtStyleZZ=false;} if (ExtGartleyTypeSearch>0) { if (patternInfluence==0) { if (ExtMaxBar>0) { if (maxBarToD==0 || maxBarToD>ExtMaxBar) maxBarToD=ExtMaxBar-15; } else if (maxBarToD==0) maxBarToD=Bars-15; } if (RangeForPointD>2) RangeForPointD=2; ColorSize=0; _stringtocolorarray (ExtColorPatternList, ColorList, ColorSize); // Подготовка списка значений цвета для бабочек Gartley, заданных пользователем } if (CustomPattern<0) CustomPattern=0; if (CustomPattern>2) CustomPattern=2; if (SelectPattern==0) ArrayInitialize(CustomPat_,true); // все if (SelectPattern==1) // только классические { ArrayInitialize(CustomPat_,false); CustomPat_[0]=true; CustomPat_[1]=true; CustomPat_[4]=true; CustomPat_[5]=true; CustomPat_[16]=true; CustomPat_[17]=true; CustomPat_[19]=true; CustomPat_[20]=true; CustomPat_[21]=true; } if (SelectPattern==2) // классические и антиклассические { ArrayInitialize(CustomPat_,false); CustomPat_[0]=true; CustomPat_[1]=true; CustomPat_[4]=true; CustomPat_[5]=true; CustomPat_[16]=true; CustomPat_[17]=true; CustomPat_[19]=true; CustomPat_[20]=true; CustomPat_[21]=true; CustomPat_[8]=true; CustomPat_[9]=true; CustomPat_[12]=true; CustomPat_[13]=true; } if (SelectPattern==3) // экзотика { ArrayInitialize(CustomPat_,false); CustomPat_[2]=true; CustomPat_[3]=true; CustomPat_[6]=true; CustomPat_[7]=true; CustomPat_[10]=true; CustomPat_[11]=true; CustomPat_[14]=true; CustomPat_[15]=true; CustomPat_[18]=true; } if (SelectPattern==4) // только антипаттерны { ArrayInitialize(CustomPat_,false); CustomPat_[2]=true; CustomPat_[3]=true; CustomPat_[6]=true; CustomPat_[7]=true; CustomPat_[8]=true; CustomPat_[9]=true; CustomPat_[12]=true; CustomPat_[13]=true; } if (SelectPattern==5) // все кроме TOTAL { ArrayInitialize(CustomPat_,true); CustomPat_[22]=false; CustomPat_[23]=false; CustomPat_[24]=false; CustomPat_[25]=false; CustomPat_[26]=false; } if (SelectPattern==6) // только TOTAL { ArrayInitialize(CustomPat_,false); CustomPat_[22]=true; CustomPat_[23]=true; CustomPat_[24]=true; CustomPat_[25]=true; CustomPat_[26]=true; } if (SelectPattern==7) // произвольный выбор пятиточечных паттернов для поиска { j=StringLen(visiblePattern); for(i=0;i0) { SetIndexStyle(3,DRAW_ARROW); SetIndexArrow(3,ExtCodLabel); SetIndexStyle(4,DRAW_ARROW); SetIndexArrow(4,ExtCodLabel); } else { SetIndexStyle(3,DRAW_LINE,STYLE_DOT); SetIndexStyle(4,DRAW_LINE,STYLE_DOT); } SetIndexLabel(0,"ZUP"+ExtComplekt+" (zz"+ExtIndicator+")"); if (ExtIndicator==6) SetIndexLabel(5,"ZUP"+ExtComplekt+" DT6_"+minBars+"/"+ExtBackstep+"/GP"+GrossPeriod+""); else if (ExtIndicator==7) SetIndexLabel(5,"ZUP"+ExtComplekt+" DT7_"+minBars+"/GP"+GrossPeriod+""); else if (ExtIndicator==8) SetIndexLabel(5,"ZUP"+ExtComplekt+" DT8_"+minBars+"/"+ExtDeviation+"/GP"+GrossPeriod+""); if (ExtLabel>0) { SetIndexLabel(1,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" H_PeakDet"); SetIndexLabel(2,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" L_PeakDet"); SetIndexLabel(3,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" UpTrend"); SetIndexLabel(4,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" DownTrend"); } else { if (chHL_PeakDet_or_vts) { PeakDetIni=true; SetIndexLabel(1,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" H_PeakDet"); SetIndexLabel(2,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" L_PeakDet"); SetIndexLabel(3,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" H_chHL"); SetIndexLabel(4,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" L_chHL"); } else { SetIndexLabel(1,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" H_vts"); SetIndexLabel(2,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" L_vts"); SetIndexLabel(3,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" H_vts1"); SetIndexLabel(4,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" L_vts1"); } } // Уровни предыдущих пиков SetIndexStyle(1,DRAW_LINE,STYLE_DOT); SetIndexStyle(2,DRAW_LINE,STYLE_DOT); SetIndexBuffer(1,ham); SetIndexBuffer(2,lam); // Уровни подтверждения SetIndexBuffer(3,ha); SetIndexBuffer(4,la); SetIndexBuffer(0,zz); SetIndexBuffer(5,nen_ZigZag); SetIndexBuffer(6,zzL); SetIndexBuffer(7,zzH); SetIndexStyle(5,DRAW_ARROW); SetIndexArrow(5,159); SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0); SetIndexEmptyValue(2,0.0); SetIndexEmptyValue(3,0.0); SetIndexEmptyValue(4,0.0); SetIndexEmptyValue(5,0.0); SetIndexEmptyValue(6,0.0); SetIndexEmptyValue(7,0.0); if (ExtIndicator<6 || ExtIndicator>10) { switch (Period()) { case 1 : {Period_tf=TF[8];break;} case 5 : {Period_tf=TF[7];break;} case 15 : {Period_tf=TF[6];break;} case 30 : {Period_tf=TF[5];break;} case 60 : {Period_tf=TF[4];break;} case 240 : {Period_tf=TF[3];break;} case 1440 : {Period_tf=TF[2];break;} case 10080 : {Period_tf=TF[1];break;} case 43200 : {Period_tf=TF[0];break;} } } else { switch (GrossPeriod) { case 1 : {Period_tf=TF[8];break;} case 5 : {Period_tf=TF[7];break;} case 15 : {Period_tf=TF[6];break;} case 30 : {Period_tf=TF[5];break;} case 60 : {Period_tf=TF[4];break;} case 240 : {Period_tf=TF[3];break;} case 1440 : {Period_tf=TF[2];break;} case 10080 : {Period_tf=TF[1];break;} case 43200 : {Period_tf=TF[0];break;} } if (GrossPeriod>43200) { if (MathMod(GrossPeriod,43200)>0) Period_tf=GrossPeriod; else Period_tf=TF[0]+GrossPeriod/43200 + ""; } else if (GrossPeriod<43200) { if (GrossPeriod>10080) { if (MathMod(GrossPeriod,10080)>0) Period_tf=GrossPeriod; else Period_tf="W"+GrossPeriod/10080 + ""; } else if (GrossPeriod<10080) { if (GrossPeriod>1440) { if (MathMod(GrossPeriod,1440)>0) Period_tf=GrossPeriod; else Period_tf="D"+GrossPeriod/1440 + ""; } else if (GrossPeriod<1440) { if (GrossPeriod!=60) { if (MathMod(GrossPeriod,60)>0) Period_tf=GrossPeriod; else Period_tf="H"+GrossPeriod/60 + ""; } } } } } if (minSize==0 && minPercent!=0) di=minPercent*Close[i]/2/100; if (ExtIndicator==1) if (minSize!=0) di=minSize*Point/2; if (ExtIndicator==2) {di=minSize*Point; countBar=minBars;} if (ExtIndicator==3) {countBar=minBars;} if (ExtIndicator>5 && ExtIndicator<11 && GrossPeriod>Period()) { if (GrossPeriod==43200 && Period()==10080) maxBarToD=maxBarToD*5; else maxBarToD=maxBarToD*GrossPeriod/Period(); } if (ExtIndicator<6 ||ExtIndicator>10) GrossPeriod=Period(); if (ExtFiboType<0) ExtFiboType=0; if (ExtFiboType>2) ExtFiboType=2; if (ExtFiboType==2) // Подготовка списка фиб, заданных пользователем { _stringtodoublearray (ExtFiboTypeFree, fi, fitxt, Sizefi, true); } // ------- // Проверка правильности введенных внешних переменных if (ExtDelta<=0) ExtDelta=0.001; if (ExtDelta>1) ExtDelta=0.999; if (ExtHidden<0) ExtHidden=0; if (ExtHidden>5) ExtHidden=5; if (ExtDeltaType<0) ExtDeltaType=0; if (ExtDeltaType>3) ExtDeltaType=3; if (ExtFiboChoice<0) ExtFiboChoice=0; if (ExtFiboChoice>11) ExtFiboChoice=11; if (ExtPivotZZ1Num>9) ExtPivotZZ1Num=9; if (ExtPivotZZ2Num>9) ExtPivotZZ2Num=9; if (ExtPivotZZ1Num==ExtPivotZZ2Num) { if (ExtPivotZZ1Num>0) ExtPivotZZ1Num=ExtPivotZZ2Num-1; } if (ExtFractalEnd>0) { if (ExtFractalEnd<1) ExtFractalEnd=1; } if (ExtPitchforkStatic>4) ExtPitchforkStatic=4; _ExtPitchforkStatic=ExtPitchforkStatic; if (ExtPitchforkDinamic>4) ExtPitchforkDinamic=4; if (AutoAPDinamicTestRedZone) { _ExtPitchforkDinamic=ExtPitchforkDinamic; ExtPitchforkDinamic=0; } if (ExtMasterPitchfork<0 || ExtMasterPitchfork>2) ExtMasterPitchfork=0; if (ExtCM_0_1A_2B_Dinamic<0) ExtCM_0_1A_2B_Dinamic=0; if (ExtCM_0_1A_2B_Dinamic>5) ExtCM_0_1A_2B_Dinamic=5; if (ExtCM_0_1A_2B_Static<0) ExtCM_0_1A_2B_Static=0; if (ExtCM_0_1A_2B_Static>5) ExtCM_0_1A_2B_Static=5; if (ExtCM_FiboDinamic<0) ExtCM_FiboDinamic=0; if (ExtCM_FiboDinamic>1) ExtCM_FiboDinamic=1; if (ExtCM_FiboStatic<0) ExtCM_FiboStatic=0; if (ExtCM_FiboStatic>1) ExtCM_FiboStatic=1; //-------------------------------------------- if (ExtPitchforkStaticNum<3) ExtPitchforkStaticNum=3; if ((ExtPitchforkStatic>0 || ExtPitchforkDinamic>0 || _ExtPitchforkDinamic>0) && mAllLevels && (mPivotPoints || mSSL>0 || m1_2Mediana>0 || mISL382>0 || mMediana>0 || mISL618>0 || mFSL>0 || mCriticalPoints || mSLM>0 || mFSLShiffLines>0 || mUTL || mLTL || mUWL || mLWL || mSSL_d>0 || m1_2Mediana_d>0 || mISL382_d>0 || mMediana_d>0 || mISL618_d>0 || mFSL_d>0 || mCriticalPoints_d || mSLM_d>0 || mFSLShiffLines_d>0 || mAuto_d || mAuto_s)) mAP=true; if (mSSL<0) mSSL=0; if (mSSL>9) mSSL=9; if (m1_2Mediana<0) m1_2Mediana=0; if (m1_2Mediana>9) m1_2Mediana=9; if (mISL382<0) mISL382=0; if (mISL382>9) mISL382=9; if (mMediana<0) mMediana=0; if (mMediana>9) mMediana=9; if (mISL618<0) mISL618=0; if (mISL618>9) mISL618=9; if (mFSL<0) mFSL=0; if (mFSL>9) mFSL=9; if (mSLM<0) mSLM=0; if (mSLM>9) mSLM=9; if (mFSLShiffLines<0) mFSLShiffLines=0; if (mFSLShiffLines>9) mFSLShiffLines=9; if (mUTL<0) mUTL=0; if (mUTL>9) mUTL=9; if (mLTL<0) mLTL=0; if (mLTL>9) mLTL=9; if (mUWL<0) mUWL=0; if (mUWL>9) mUWL=9; if (mLWL<0) mLWL=0; if (mLWL>9) mLWL=9; if (mSSL_d<0) mSSL_d=0; if (mSSL_d>9) mSSL_d=9; if (m1_2Mediana_d<0) m1_2Mediana_d=0; if (m1_2Mediana_d>9) m1_2Mediana_d=9; if (mISL382_d<0) mISL382_d=0; if (mISL382_d>9) mISL382_d=9; if (mMediana_d<0) mMediana_d=0; if (mMediana_d>9) mMediana_d=9; if (mISL618_d<0) mISL618_d=0; if (mISL618_d>9) mISL618_d=9; if (mFSL_d<0) mFSL_d=0; if (mFSL_d>9) mFSL_d=9; if (mSLM_d<0) mSLM_d=0; if (mSLM_d>9) mSLM_d=9; if (mFSLShiffLines_d<0) mFSLShiffLines_d=0; if (mFSLShiffLines_d>9) mFSLShiffLines_d=9; aMetki[0][0]=0; aMetki[0][1]=mSSL; aMetki[0][2]=mSLM; aMetki[0][3]=m1_2Mediana; aMetki[0][4]=mSLM; aMetki[0][5]=mISL382; aMetki[0][6]=mMediana; aMetki[0][7]=mISL618; aMetki[0][8]=mFSL; aMetki[0][9]=mFSLShiffLines; aMetki[0][10]=mCriticalPoints; aMetki[0][11]=mUTL; aMetki[0][12]=mLTL; aMetki[0][13]=mUWL; aMetki[0][14]=mLWL; aMetki[1][0]=0; aMetki[1][1]=mSSL_d; aMetki[1][2]=mSLM_d; aMetki[1][3]=m1_2Mediana_d; aMetki[1][4]=mSLM_d; aMetki[1][5]=mISL382_d; aMetki[1][6]=mMediana_d; aMetki[1][7]=mISL618_d; aMetki[1][8]=mFSL_d; aMetki[1][9]=mFSLShiffLines_d; aMetki[1][10]=mCriticalPoints_d; aMetki[1][11]=0; aMetki[1][12]=0; aMetki[1][13]=0; aMetki[1][14]=0; if (mSelectVariantsPRZ>9) mSelectVariantsPRZ=-1; if (ExtFiboStaticNum<2) ExtFiboStaticNum=2; if (ExtFiboStaticNum>9) { aa=DoubleToStr(ExtFiboStaticNum,0); aa1=StringSubstr(aa,0,1); mFibo[0]=StrToInteger(aa1); aa1=StringSubstr(aa,1,1); mFibo[1]=StrToInteger(aa1); } else { mFibo[0]=ExtFiboStaticNum; mFibo[1]=ExtFiboStaticNum-1; } if (ExtFiboFanNum<1) ExtFiboFanNum=1; if (ExtFiboFanNum>9) { aa=DoubleToStr(ExtFiboFanNum,0); aa1=StringSubstr(aa,0,1); mFan[0]=StrToInteger(aa1); aa1=StringSubstr(aa,1,1); mFan[1]=StrToInteger(aa1); } else { mFan[0]=ExtFiboFanNum; mFan[1]=ExtFiboFanNum-1; } if (ExtPitchforkStaticNum>99) { aa=DoubleToStr(ExtPitchforkStaticNum,0); aa1=StringSubstr(aa,0,1); mPitch[0]=StrToInteger(aa1); aa1=StringSubstr(aa,1,1); mPitch[1]=StrToInteger(aa1); aa1=StringSubstr(aa,2,1); mPitch[2]=StrToInteger(aa1); } else { mPitch[0]=ExtPitchforkStaticNum; mPitch[1]=ExtPitchforkStaticNum-1; mPitch[2]=ExtPitchforkStaticNum-2; } if (ExtFiboExpansion<2) ExtFiboExpansion=0; if (ExtFiboExpansion>0) { if (ExtFiboExpansion>99) { aa=DoubleToStr(ExtFiboExpansion,0); aa1=StringSubstr(aa,0,1); mExpansion[0]=StrToInteger(aa1); aa1=StringSubstr(aa,1,1); mExpansion[1]=StrToInteger(aa1); aa1=StringSubstr(aa,2,1); mExpansion[2]=StrToInteger(aa1); } else { mExpansion[0]=ExtFiboExpansion; mExpansion[1]=ExtFiboExpansion-1; mExpansion[2]=ExtFiboExpansion-2; } } if (ExtPitchforkCandle && !ExtCustomStaticAP) { mPitchTime[0]=ExtDateTimePitchfork_1; mPitchTime[1]=ExtDateTimePitchfork_2; mPitchTime[2]=ExtDateTimePitchfork_3; if (ExtPitchfork_1_HighLow) { mPitchCena[0]=High[iBarShift(Symbol(),Period(),ExtDateTimePitchfork_1,true)]; mPitchCena[1]=Low[iBarShift(Symbol(),Period(),ExtDateTimePitchfork_2,true)]; mPitchCena[2]=High[iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3,true)]; } else { mPitchCena[0]=Low[iBarShift(Symbol(),Period(),ExtDateTimePitchfork_1,true)]; mPitchCena[1]=High[iBarShift(Symbol(),Period(),ExtDateTimePitchfork_2,true)]; mPitchCena[2]=Low[iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3,true)]; } if (mPitchCena[0]<=0 || mPitchCena[1]<=0 || mPitchCena[2]<=0) {ExtPitchforkCandle=false; ExtPitchforkStatic=0;} } if (ExtFiboTimeNum<=2) ExtFiboTimeNum=0; if (ExtFiboTimeNum>999) ExtFiboTimeNum=0; if (ExtVLStaticNum>0) { if (ExtVLStaticNum<2) ExtVLStaticNum=2; if (ExtVLStaticNum>99) { aa=DoubleToStr(ExtVLStaticNum,0); aa1=StringSubstr(aa,0,1); mVL[0]=StrToInteger(aa1); aa1=StringSubstr(aa,1,1); mVL[1]=StrToInteger(aa1); aa1=StringSubstr(aa,2,1); mVL[2]=StrToInteger(aa1); } else { mVL[0]=ExtVLStaticNum; mVL[1]=ExtVLStaticNum-1; mVL[2]=ExtVLStaticNum-2; } } if (ExtArcStaticNum>0) { if (ExtArcStaticNum<2) ExtArcStaticNum=2; if (ExtArcStaticNum<12 && ExtArcStaticNum>9) ExtArcStaticNum=9; if (ExtArcStaticNum>98) ExtArcStaticNum=98; if (ExtArcStaticNum>=12) { aa=DoubleToStr(ExtArcStaticNum,0); aa1=StringSubstr(aa,1,1); mArcS[0]=StrToInteger(aa1); aa1=StringSubstr(aa,0,1); mArcS[1]=StrToInteger(aa1); if (mArcS[0]==0) {ExtArcStaticNum=0; mArcS[1]=0;} } else { mArcS[1]=ExtArcStaticNum; mArcS[0]=ExtArcStaticNum-1; } } if (ExtArcDinamicNum>0) { if (ExtArcDinamicNum>90) ExtArcStaticNum=90; if (ExtArcDinamicNum>9) { aa=DoubleToStr(ExtArcDinamicNum,0); aa1=StringSubstr(aa,1,1); mArcD[0]=StrToInteger(aa1); aa1=StringSubstr(aa,0,1); mArcD[1]=StrToInteger(aa1); if (mArcD[0]>0) mArcD[0]=0; } else { mArcD[1]=0; mArcD[0]=ExtArcDinamicNum; } } // Золотая спираль if (ExtSpiralNum>0) { if(goldenSpiralCycle <= 0) goldenSpiralCycle = 1; if(accurity <= 0) accurity = 0.2; if (ExtSpiralNum<2) ExtSpiralNum=2; if (ExtSpiralNum>98) ExtSpiralNum=98; if (ExtSpiralNum>9) { aa=DoubleToStr(ExtSpiralNum,0); aa1=StringSubstr(aa,1,1); mSpiral[0]=StrToInteger(aa1); aa1=StringSubstr(aa,0,1); mSpiral[1]=StrToInteger(aa1); if (mSpiral[0]==0) {ExtSpiralNum=0; mSpiral[1]=0;} } else { mSpiral[1]=ExtSpiralNum; mSpiral[0]=ExtSpiralNum-1; } } // каналы if (ExtChannelsNum>9876543210) ExtChannelsNum=0; if (ExtChannelsNum>0) { aa=DoubleToStr(ExtChannelsNum,0); aa2=StringLen(aa); for (i=0;i=0) {mChannels[i]=-1; ArraySort(mChannels,WHOLE_ARRAY,0,MODE_DESCEND); i--;} } for (i=1;i<=9;i++) { if (mChannels[i]==0) {DinamicChannels=i; break;} } } if (ExtSave) { MathSrand(LocalTime()); save=MathRand(); } if (ExtCM_0_1A_2B_Static==4 || ExtCM_0_1A_2B_Dinamic==4) { for (i=Bars-1; i>-1; i--) { ASBar=ASBar + iHigh(NULL,GrossPeriod,i) - iLow(NULL,GrossPeriod,i) + Point; } ASBar=ASBar/Bars; } array_(); perTF=Period(); Demo=IsDemo(); delete_objects1(); if (!ExtCustomStaticAP || ExtPitchforkStatic==0) { ObjectDelete("pitchforkS" + ExtComplekt+"_APm_"); delete_objects8(); ExtCustomStaticAP=false; } for (i=ObjectsTotal()-1; i>=0; i--) { txt=ObjectName(i); // восстановение флагов наличия на графике меток в вилах Эндрюса if (!mAPs) { if (StringFind(txt,"m#"+ExtComplekt+"_"+"s")>-1) mAPs=true; } if (!mAPd) { if (StringFind(txt,"m#"+ExtComplekt+"_"+"d")>-1) mAPd=true; } // подсчет колическтва вил с меткой APm if (ObjectType(txt)==OBJ_PITCHFORK) { if (StringFind(txt,"_APm",0)>0) i_APm++; } } ObjectDelete(nameCheckLabel_hidden); if (i_APm>1) { if (ObjectFind(nameCheckLabel)==0) { // Проверка положения сигнальной метки APm if (ObjectGet(nameCheckLabel,OBJPROP_XDISTANCE)!=vX || ObjectGet(nameCheckLabel,OBJPROP_YDISTANCE)!=vY) { count_APm=(i_APm-1)*2; } else { count_APm=i_APm; } ObjectCreate(nameCheckLabel_hidden,OBJ_TEXT,0,0,0); ObjectSetText(nameCheckLabel_hidden,""+i_APm+"_"+count_APm); ObjectSet(nameCheckLabel_hidden, OBJPROP_COLOR, CLR_NONE); ObjectSet(nameCheckLabel_hidden, OBJPROP_BACK, true); } } nameMagnet[0]="AM_0_"+ExtComplekt; nameMagnet[1]="AM_1_"+ExtComplekt; nameMagnet[2]="AM_2_"+ExtComplekt; if (!ExtCustomStaticAP || !AutoMagnet) { if (ObjectFind(nameMagnet[0])==0) { ObjectDelete(nameMagnet[0]); ObjectDelete(nameMagnet[1]); ObjectDelete(nameMagnet[2]); } } // Создание текстовой метки для AutoMagnet if (ExtCustomStaticAP && AutoMagnet) { txt=StringSubstr("0000"+Period(),StringLen("0000"+Period())-5,5)+"00000000000"; if (!ObjectFind(nameMagnet[0])==0) { ObjectCreate(nameMagnet[0],OBJ_TEXT,0,0,0); ObjectSet(nameMagnet[0], OBJPROP_COLOR, CLR_NONE); ObjectSetText(nameMagnet[0],txt); ObjectCreate(nameMagnet[1],OBJ_TEXT,0,0,0); ObjectSet(nameMagnet[1], OBJPROP_COLOR, CLR_NONE); ObjectSetText(nameMagnet[1],txt); ObjectCreate(nameMagnet[2],OBJ_TEXT,0,0,0); ObjectSet(nameMagnet[2], OBJPROP_COLOR, CLR_NONE); ObjectSetText(nameMagnet[2],txt); period_AM[0]=Period(); period_AM[1]=Period(); period_AM[2]=Period(); } else { period_AM[0]=StrToInteger(StringSubstr(ObjectDescription(nameMagnet[0]),0,5)); period_AM[1]=StrToInteger(StringSubstr(ObjectDescription(nameMagnet[1]),0,5)); period_AM[2]=StrToInteger(StringSubstr(ObjectDescription(nameMagnet[2]),0,5)); } } mPeriod=0; // mStart=true; tik1 = true; return(0); } //+------------------------------------------------------------------+ //| Custom indicator initialization function. Конец. | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Деинициализация. Удаление всех трендовых линий и текстовых объектов. Начало. //+------------------------------------------------------------------+ int deinit() { int i; ObjectDelete("fiboS" + ExtComplekt+"_"); ObjectDelete("fiboFanS" + ExtComplekt+"_"); ObjectDelete("RLineS" + ExtComplekt+"_"); if (!ExtCustomStaticAP) { ObjectDelete("pitchforkS" + ExtComplekt+"_APm_"); ObjectDelete("Master_pitchforkS" + ExtComplekt+"_APm_"); } ObjectDelete("pitchforkS" + ExtComplekt+"_"); ObjectDelete("Master_pitchforkS" + ExtComplekt+"_"); ObjectDelete("pmedianaS" + ExtComplekt+"_"); ObjectDelete("1-2pmedianaS" + ExtComplekt+"_"); ObjectDelete("SLM382S" + ExtComplekt+"_"); ObjectDelete("SLM618S" + ExtComplekt+"_"); ObjectDelete("FSL Shiff Lines S" + ExtComplekt+"_"); ObjectDelete("fiboTime1" + ExtComplekt+"_");ObjectDelete("fiboTime2" + ExtComplekt+"_");ObjectDelete("fiboTime3" + ExtComplekt+"_"); ObjectDelete("fiboTime1Free" + ExtComplekt+"_");ObjectDelete("fiboTime2Free" + ExtComplekt+"_");ObjectDelete("fiboTime3Free" + ExtComplekt+"_"); ObjectDelete(nameUTL);ObjectDelete(nameLTL); ObjectDelete(nameUWL);ObjectDelete(nameLWL); ObjectDelete(nameUTLd);ObjectDelete(nameLTLd); ObjectDelete(nameUWLd);ObjectDelete(nameLWLd); ObjectDelete("ISL_S" + ExtComplekt+"_"); ObjectDelete("RZS" + ExtComplekt+"_"); ObjectDelete("CL" + ExtComplekt+"_"); ObjectDelete("CISL" + ExtComplekt+"_"+0); ObjectDelete("CISL" + ExtComplekt+"_"+1); ObjectDelete("PivotZoneS" + ExtComplekt+"_"); ObjectDelete("FanMedianaStatic" + ExtComplekt+"_"); ObjectDelete("FiboFan" + ExtComplekt+"_"); ObjectDelete("FiboArcS" + ExtComplekt+"_"); ObjectDelete("LinePivotZZ" + "1" + ExtComplekt+"_"); ObjectDelete("LinePivotZZ" + "2" + ExtComplekt+"_"); ObjectDelete("#_TextPattern_#" + ExtComplekt+"_"); ObjectDelete("#_TextPatternMP_#" + ExtComplekt+"_"); for (i=0;i<9; i++) { nameObj="LCChannel" + i + ExtComplekt+"_"; ObjectDelete(nameObj); nameObj="LTChannel" + i + ExtComplekt+"_"; ObjectDelete(nameObj); } for (i=0; i<7; i++) { nameObj="VLS"+i+" " + ExtComplekt+"_"; ObjectDelete(nameObj); } // Соблюдать порядок следования строк при удалении объектов delete_objects_dinamic(); delete_objects1(); delete_objects3(); delete_objects4(); delete_objects5(); delete_objects6(0); delete_objects6(1); delete_objects_spiral(); delete_objects_number(); delete_objects8(); delete_objects9(); ObjectDelete(cursor); if (infoTF) Comment(""); return(0); } //+------------------------------------------------------------------+ //| Деинициализация. Удаление всех трендовых линий и текстовых объектов. Коннец. //+------------------------------------------------------------------+ // НАЧАЛО int start() { int i, j, k; // для расчета красной зоны if (ExtCustomStaticAP && tik2) { screenPitchforkS(); } tik2 = true; if ((ExtIndicator==6 || ExtIndicator==7 || ExtIndicator==8 || ExtIndicator==10) && Period()>GrossPeriod) { ArrayInitialize(zz,0);ArrayInitialize(zzL,0);ArrayInitialize(zzH,0);ArrayInitialize(nen_ZigZag,0); init_zz=true; return; } counted_bars=IndicatorCounted(); if (perTF!=Period()) { delete_objects1(); perTF=Period(); } if (Demo!=IsDemo()) { delete_objects1(); Demo=IsDemo(); counted_bars=0; } //----------------------------------------- // // 1. // // Блок заполнения буферов. Начало. //----------------------------------------- // zz[] - буфер, данные из которого берутся для отрисовки самого ZigZag-a // zzL[] - массив минимумов черновой // zzH[] - массив максимумов черновой // //----------------------------------------- if (Bars-IndicatorCounted()>2) { if (ExtMaxBar>0) cbi=ExtMaxBar; else cbi=Bars-1; lLast=0; hLast=0; ti=0; ai=0; bi=0; tai=0; tbi=0; fs=0; si=0; sip=0; lBar=iLow(NULL,GrossPeriod,0); hBar=iHigh(NULL,GrossPeriod,0); tiZZ=iTime(NULL,GrossPeriod,0); fh=false; fl=false; ArrayInitialize(zz,0);ArrayInitialize(zzL,0);ArrayInitialize(zzH,0);ArrayInitialize(nen_ZigZag,0); init_zz=true; afrm=true; delete_objects_dinamic(); delete_objects1(); delete_objects3(); flagExtGartleyTypeSearch2=false; vPatOnOff=false; ArrayInitialize(aOutRedZone,false); mStart=true; if (chHL_PeakDet_or_vts) PeakDetIni=true; if (CursorLine) { ObjectDelete(cursor); ObjectCreate(cursor, OBJ_VLINE, 0, TimeCurrent(), 0); ObjectSet(cursor, OBJPROP_BACK, CLBack); ObjectSet(cursor, OBJPROP_COLOR, CLColor); ObjectSet(cursor, OBJPROP_STYLE, CLStyle); ObjectSet(cursor, OBJPROP_WIDTH, CLWidth); } } else { if (ExtIndicator==1) cbi=Bars-IndicatorCounted()-1; else cbi=Bars-IndicatorCounted(); if (ExtMinBar>0) { if ((ExtIndicator==0||ExtIndicator==1||ExtIndicator==2||ExtIndicator==3||ExtIndicator==5||ExtIndicator==6||ExtIndicator==7||ExtIndicator==8||ExtIndicator==10||ExtIndicator==11) && tiZZ==iTime(NULL,GrossPeriod,0)) return (0); } if (lBar<=iLow(NULL,GrossPeriod,0) && hBar>=iHigh(NULL,GrossPeriod,0) && tiZZ==iTime(NULL,GrossPeriod,0)) return(0); else { if (tiZZ0) PivotZZ(ExtPivotZZ1Color, ExtPivotZZ1Num, 1); if (ExtPivotZZ2Num==1 && ExtPivotZZ2Color>0) PivotZZ(ExtPivotZZ2Color, ExtPivotZZ2Num, 2); } } lBar=iLow(NULL,GrossPeriod,0); hBar=iHigh(NULL,GrossPeriod,0); tiZZ=iTime(NULL,GrossPeriod,0); } if (mOutRedZone && mAuto_d && ExtPitchforkDinamic>0) { aOutRedZone[0]=false; _RZ("RZD", ExtRZDinamicValue, ExtRZDinamicColor, pitch_timeD, pitch_cenaD, ExtRedZoneDinamic, 1, false); } if (_ExtPitchforkStatic>0) { if (mOutRedZone && mAuto_s) { if (!aOutRedZone[1]) _RZ("RZS", ExtRZStaticValue, ExtRZStaticColor, pitch_timeS, pitch_cenaS, ExtRedZoneStatic, 0, false); } if (AutoTestRedZone && ExtDinamic && !ExtCustomStaticAP && !ExtPitchforkCandle) { if (StringSubstr(ExtVisibleDinamic,2,1)=="1") { aOutRedZone[2]=false; _RZ("RZ_", ExtRZStaticValue, ExtRZStaticColor, pitch_timeRZ, pitch_cenaRZ, ExtRedZoneStatic, 0, false); } } } } switch (ExtIndicator) { case 0 : {ZigZag_(); break;} case 1 : {ang_AZZ_(); break;} case 2 : {Ensign_ZZ(); break;} case 3 : {Ensign_ZZ(); break;} case 4 : {ZigZag_tauber(); break;} case 5 : {GannSwing(); break;} case 6 : {nenZigZag(); break;} // DT-ZigZag - с исправленным, оптимизированным зигзагом ZigZag_new_nen3.mq4 case 7 : {nenZigZag(); break;} // DT-ZigZag - вариант зигзага, который любезно предоставил klot - DT_ZZ.mq4 case 8 : {nenZigZag(); break;} // DT-ZigZag - вариант зигзага, который любезно предоставил Candid - CZigZag.mq4 case 10 : {nenZigZag(); break;} // DT-ZigZag - вариант зигзага ExtIndicator=5 в режиме DT - внешний зигзаг Swing_zz.mq4 // Поиск паттернов case 11 : { if (ExtGartleyTypeSearch<2) vPatOnOff = false; if (ExtGartleyTypeSearch!=2) countGartley = 0; countColor = 0; if (!flagExtGartleyTypeSearch2) {delete_objects3(); vPatOnOff = false; if (ExtHiddenPP==2) delete_objects4();} switch (AlgorithmSearchPatterns) { case 0 : {ZigZag_(); break;} case 1 : {ang_AZZ_(); break;} case 2 : {ang_AZZ_(); break;} case 3 : {Ensign_ZZ(); break;} case 4 : {ZigZag_tauber(); break;} case 5 : {GannSwing(); break;} case 6 : {ZZTalex(); break;} } if (ExtGartleyTypeSearch==2 && vPatOnOff) flagExtGartleyTypeSearch2=true; if (vPatOnOff && !vPatNew) { vPatNew=true; flagGartley=true; if(ExtPlayAlert) { Alert (Symbol()," ",Period()," появился новый Паттерн"); PlaySound("alert.wav"); } if (ExtSendMail) _SendMail("There was a pattern","on " + Symbol() + " " + Period() + " pattern " + vBullBear + " " + vNamePattern); } else if (!vPatOnOff && vPatNew) { vPatNew=false; flagGartley=true; } if (minBarsSave!=minBarsX) { afrm=true; delete_objects_dinamic(); delete_objects1(); counted_bars=0; minBarsSave=minBarsX; PeakDetIni=true; } break; } case 12 : {ZZTalex(); break;} case 13 : {ZigZag_SQZZ(); break;} // ZigZag товароведа case 14 : {ZZ_2L_nen(); break;} // ZigZag wellx } if (ExtHidden<5) // Разрешение на вывод оснастки. Начало. { if(!chHL_PeakDet_or_vts) { if (ExtLabel==0) {i_vts(); i_vts1();} } else if (PeakDetIni && PeakDet) { PeakDetIni=false; double kl=0,kh=0; // kl - min; kh - max for (shift=Bars; shift>0; shift--) { if (zzH[shift]>0) {kh=zzH[shift];} if (zzL[shift]>0) {kl=zzL[shift];} lam[shift]=kl; ham[shift]=kh; } } // Инициализация матрицы matriza(); if (infoTF) if (close_TF!=Close[0]) info_TF(); } //----------------------------------------- // Блок заполнения буферов. Конец. //----------------------------------------- if (ExtHidden<5) // Разрешение на вывод оснастки. Начало. { //====================== //====================== //====================== //----------------------------------------- // // 2. // // Блок подготовки данных. Начало. //----------------------------------------- if (Bars - counted_bars>2 || flagFrNew) { // Поиск времени и номера бара, до которого будут рисоваться соединительные линии if (countBarEnd==0) { if (ExtFractalEnd>0) { k=ExtFractalEnd; for (shift=0; shift0; shift++) { if (zz[shift]>0 && zzH[shift]>0) {countBarEnd=shift; TimeBarEnd=Time[shift]; k--;} } } else { countBarEnd=Bars-3; TimeBarEnd=Time[Bars-3]; } } else { countBarEnd=iBarShift(Symbol(),Period(),TimeBarEnd); } } //----------------------------------------- // Блок подготовки данных. Конец. //----------------------------------------- //----------------------------------------- // // 3. // // Блок проверок и удаления линий, // потерявших актуальность. Начало. //----------------------------------------- // Коррекция соединяющих линий и чисел. Начало. if (Bars - counted_bars<3 || tik1) { tik1 = false; timeFr1new=0; timeFr2new=0; timeFr3new=0; // Поиск времени бара первого экстремума, считая от нулевого бара for (shift1=0; shift10.0 && (zzH[shift1]==zz[shift1] || zzL[shift1]==zz[shift1])) { timeFr1new=Time[shift1]; if (_ExtPitchforkDinamic>0 && AutoAPDinamicTestRedZone) { pitch_timeD[2]=Time[shift1]; if (zzH[shift1]>0) pitch_cenaD[2]=High[shift1]; else pitch_cenaD[2]=Low[shift1]; if (pitch_timeD[0]==0) { j=0; pitch_timeD[1]=0; pitch_timeD[2]=0; for (i=0;i0 || zzL[i]>0) { if (pitch_timeD[2]==0) { j=i; pitch_timeD[2]=Time[j]; if (zzH[j]>0) pitch_cenaD[2]=zzH[j]; else pitch_cenaD[2]=zzL[j]; } else if (pitch_timeD[1]==0) { pitch_timeD[1]=Time[i]; if (zzH[j]>0) pitch_cenaD[1]=zzL[i]; else pitch_cenaD[1]=zzH[i]; } else if (pitch_timeD[0]==0) { pitch_timeD[0]=Time[i]; if (zzH[j]>0) pitch_cenaD[0]=zzH[i]; else pitch_cenaD[0]=zzL[i]; aOutRedZone[0]=false; _RZ("RZD", ExtRZDinamicValue, ExtRZDinamicColor, pitch_timeD, pitch_cenaD, ExtRedZoneDinamic, 1, false); if (aOutRedZone[0]) { ExtPitchforkDinamic=_ExtPitchforkDinamic; screenPitchforkD(); } else { ExtPitchforkDinamic=0; delete_objects10(); } break; } } } } else { aOutRedZone[0]=false; _RZ("RZD", ExtRZDinamicValue, ExtRZDinamicColor, pitch_timeD, pitch_cenaD, ExtRedZoneDinamic, 1, false); if (aOutRedZone[0]) { ExtPitchforkDinamic=_ExtPitchforkDinamic; screenPitchforkD(); } else { ExtPitchforkDinamic=0; delete_objects10(); } } } break; } } // Поиск времени бара второго экстремума, считая от нулевого бара for (shift2=shift1+1; shift20.0 && (zzH[shift2]==zz[shift2] || zzL[shift2]==zz[shift2])) { timeFr2new=Time[shift2]; break; } } // Поиск времени бара третього экстремума, считая от нулевого бара for (shift3=shift2+1; shift30.0 && (zzH[shift3]==zz[shift3] || zzL[shift3]==zz[shift3])) { timeFr3new=Time[shift3]; break; } } // Появился новый луч ZigZag //if ((zzH[shift1]>0 && afrl[0]>0) || (zzL[shift1]>0 && afrh[0]>0) || if (timeFr2new!=afr[1] || (timeFr3new!=afr[2] && timeFr2new==afr[1]) || timeFr2new0) { if (AutoTestRedZone && !ExtCustomStaticAP && !ExtPitchforkCandle) { j=0; k=0; pitch_timeRZ[0]=0; pitch_timeRZ[1]=0; pitch_timeRZ[2]=0; for (i=0;i0 || zzL[i]>0) { if (k==mPitch[2] || k==mPitch[1] || k==mPitch[0]) { if (pitch_timeRZ[2]==0) { j=i; pitch_timeRZ[2]=Time[j]; if (zzH[j]>0) pitch_cenaRZ[2]=zzH[j]; else pitch_cenaRZ[2]=zzL[j]; } else if (pitch_timeRZ[1]==0) { pitch_timeRZ[1]=Time[i]; if (zzH[j]>0) pitch_cenaRZ[1]=zzL[i]; else pitch_cenaRZ[1]=zzH[i]; } else if (pitch_timeRZ[0]==0) { pitch_timeRZ[0]=Time[i]; if (zzH[j]>0) pitch_cenaRZ[0]=zzH[i]; else pitch_cenaRZ[0]=zzL[i]; break; } } k++; } } aOutRedZone[2]=false; if (pitch_timeRZ[0]>0) { _RZ("RZ_", ExtRZStaticValue, ExtRZStaticColor, pitch_timeRZ, pitch_cenaRZ, ExtRedZoneStatic, 0, false); } if (aOutRedZone[2]) { ExtPitchforkStatic=_ExtPitchforkStatic; } else ExtPitchforkStatic=0; aOutRedZone[2]=false; } } } else ExtPitchforkStatic=0; if (StringSubstr(ExtVisibleDinamic,3,1)!="1") ExtFiboFanNum=0; if (StringSubstr(ExtVisibleDinamic,4,1)!="1") ExtFiboExpansion=0; if (StringSubstr(ExtVisibleDinamic,5,1)!="1") ExtVLStaticNum=0; if (StringSubstr(ExtVisibleDinamic,6,1)!="1") ExtArcStaticNum=0; if (StringSubstr(ExtVisibleDinamic,7,1)!="1") ExtSpiralNum=0; if (StringSubstr(ExtVisibleDinamic,8,1)!="1") ExtPivotZZ2Num=0; if (StringSubstr(ExtVisibleDinamic,9,1)!="1") ExtChannelsNum=0; if (StringSubstr(ExtVisibleDinamic,10,1)!="1") ExtFiboTimeNum=0; } if (_ExtPitchforkDinamic>0 && AutoAPDinamicTestRedZone) { j=0; pitch_timeD[0]=0; pitch_timeD[1]=0; pitch_timeD[2]=0; for (i=0;i0 || zzL[i]>0) { if (pitch_timeD[2]==0) { j=i; pitch_timeD[2]=Time[j]; if (zzH[j]>0) pitch_cenaD[2]=zzH[j]; else pitch_cenaD[2]=zzL[j]; } else if (pitch_timeD[1]==0) { pitch_timeD[1]=Time[i]; if (zzH[j]>0) pitch_cenaD[1]=zzL[i]; else pitch_cenaD[1]=zzH[i]; } else if (pitch_timeD[0]==0) { pitch_timeD[0]=Time[i]; if (zzH[j]>0) pitch_cenaD[0]=zzH[i]; else pitch_cenaD[0]=zzL[i]; break; } } } aOutRedZone[0]=false; _RZ("RZD", ExtRZDinamicValue, ExtRZDinamicColor, pitch_timeD, pitch_cenaD, ExtRedZoneDinamic, 1, false); if (aOutRedZone[0]) { ExtPitchforkDinamic=_ExtPitchforkDinamic; screenPitchforkD(); } else { ExtPitchforkDinamic=0; delete_objects10(); } } if (ExtAlert) { Alert (Symbol()," ",Period()," появился новый луч ZigZag"); PlaySound("alert.wav"); } afrm=true; } // Поиск бара, на котором первый экстремум был ранее. shift=iBarShift(Symbol(),Period(),afr[0]); // Сравнение текущего значения экстремума с тем, который был ранее // Образовался новый экстремум if (timeFr1new!=afr[0]) { flagFrNew=true; if (shift>=shift1) numBar=shift; else numBar=shift1; afrm=true; } // Экстремум на максимуме сдвинулся на другой бар if (afrh[0]>0 && zz[shift]==0.0) { flagFrNew=true; if (numBar0 && zz[shift]==0.0) { flagFrNew=true; if (numBar0) { flagFrNew=true; numBar=0; delete_objects2(afr[0]); afrx[0]=High[shift]; afrh[0]=High[shift]; if (ExtFiboFanDinamic) screenFiboFanD(); if (mFibo[1]==0 && ExtFiboStatic) screenFiboS(); if (ExtFiboDinamic) screenFiboD(); if (ExtPitchforkDinamic>0) screenPitchforkD(); if (ExtVLDinamicColor>0) VLD(); if (mVL[2]==0 && ExtVLStaticNum>0) VLS(); if (ExtFiboTimeNum>2) fiboTimeX (); if (ExtPitchforkStatic>0) { if (ExtCustomStaticAP) { screenPitchforkS(); } else { if (ExtPitchforkCandle) { if (iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)==0) screenPitchforkS(); } else { if (mPitch[2]==0) screenPitchforkS(); } } } if (mExpansion[2]==0 && ExtFiboExpansion>0) FiboExpansion(); if (mFan[1]==0 && ExtFiboFanNum>0 && ExtFiboFanColor>0) screenFiboFan(); if (ExtArcDinamicNum>0) screenFiboArcD(); if (ExtArcStaticNum>0) screenFiboArcS(); // Поиск паттернов Gartley search_Gartley(); } //============= 1 сместился максимум. Конец. // //============= 1 сместился минимум. Начало. if (afrl[0]-Low[shift]!=0 && afrl[0]>0) { flagFrNew=true; numBar=0; delete_objects2(afr[0]); afrx[0]=Low[shift]; afrl[0]=Low[shift]; if (mFibo[1]==0 && ExtFiboStatic) screenFiboS(); if (ExtFiboDinamic) screenFiboD(); if (ExtPitchforkDinamic>0) screenPitchforkD(); if (ExtFiboFanDinamic) screenFiboFanD(); if (ExtVLDinamicColor>0) VLD(); if (mVL[2]==0 && ExtVLStaticNum>0) VLS(); if (ExtFiboTimeNum>2) fiboTimeX (); if (ExtPitchforkStatic>0) { if (ExtCustomStaticAP) { screenPitchforkS(); } else { if (ExtPitchforkCandle) { if (iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)==0) screenPitchforkS(); } else { if (mPitch[2]==0) screenPitchforkS(); } } } if (mExpansion[2]==0 && ExtFiboExpansion>0) FiboExpansion(); if (mFan[1]==0 && ExtFiboFanNum>0 && ExtFiboFanColor>0) screenFiboFan(); if (ExtArcDinamicNum>0) screenFiboArcD(); if (ExtArcStaticNum>0) screenFiboArcS(); // Поиск паттернов Gartley search_Gartley(); } //============= 1 сместился минимум. Конец. //-----------3 Сместился максимум или минимум, но остался на том же баре. Конец. // Поиск исчезнувших фракталов и удаление линий, исходящих от этих фракталов. Начало. countBarEnd=iBarShift(Symbol(),Period(),TimeBarEnd); for (k=0; k<5; k++) { // Проверка максимумов. if (afrh[k]>0) { // Поиск бара, на котором был этот фрактал shift=iBarShift(Symbol(),Period(),afr[k]); if (zz[shift]==0) { flagFrNew=true; if (shift>numBar) numBar=shift; afrm=true; numHighPrim=shift; numHighLast=0;HighLast=0.0; for (k1=shift+1; k1<=countBarEnd; k1++) { if (zzH[k1]>0) { if (ZigZagHighLow) HighLast=High[k1]; else HighLast=zzH[k1]; numHighLast=k1; nameObj="_" + ExtComplekt + "ph" + Time[numHighPrim] + "_" + Time[numHighLast]; numOb=ObjectFind(nameObj); if (numOb>-1) { ObjectDelete(nameObj); nameObjtxt="_" + ExtComplekt + "phtxt" + Time[numHighPrim] + "_" + Time[numHighLast]; ObjectDelete(nameObjtxt); } } } } } // Проверка минимумов. if (afrl[k]>0) { // Поиск бара, на котором был этот фрактал shift=iBarShift(Symbol(),Period(),afr[k]); if (zz[shift]==0) { flagFrNew=true; if (shift>numBar) numBar=shift; afrm=true; numLowPrim=shift; numLowLast=0;LowLast=10000000; for (k1=shift+1; k1<=countBarEnd; k1++) { if (zzL[k1]>0) { if (ZigZagHighLow) LowLast=Low[k1]; else LowLast=zzL[k1]; numLowLast=k1; nameObj="_" + ExtComplekt + "pl" + Time[numLowPrim] + "_" + Time[numLowLast]; numOb=ObjectFind(nameObj); if (numOb>-1) { ObjectDelete(nameObj); nameObjtxt="_" + ExtComplekt + "pltxt" + Time[numLowPrim] + "_" + Time[numLowLast]; ObjectDelete(nameObjtxt); } } } } } } // Поиск исчезнувших фракталов и удаление линий, исходящих от этих фракталов. Конец. // Перезапись матрицы. Начало. matriza (); // Перезапись матрицы. Конец. } // Коррекция соединяющих линий и чисел. Конец. //----------------------------------------- // Блок проверок и удаления линий, // потерявших актуальность. Конец. //----------------------------------------- // Подсчет количества фракталов. Начало. countFractal(); // Подсчет количества фракталов. Конец. //----------------------------------------- // // 4. // // Блок вывода соединительных линий. Начало. //----------------------------------------- if (Bars - counted_bars>2 && ExtHidden>0) { //-----------1 Отрисовка максимумов. Начало. //+--------------------------------------------------------------------------+ //| Вывод соединяющих линий и чисел Песавенто и 0.886 для максимумов ZigZag-a //| Отрисовка начинается от нулевого бара //+--------------------------------------------------------------------------+ numLowPrim=0; numLowLast=0; numHighPrim=0; numHighLast=0; LowPrim=0.0; LowLast=0.0; HighPrim=0.0; HighLast=0.0; Angle=-100; if (flagFrNew && !flagGartley) countFr=1; else countFr=ExtFractal; for (k=0; (k0 && countFr>0); k++) { if (zzL[k]>0.0 && (zzL[k]0 && zzL[k]==zz[k]) { if (ZigZagHighLow) LowPrim=Low[k]; else LowPrim=zzL[k]; numLowPrim=k; } if (zzH[k]>0.0 && zzH[k]==zz[k]) { if (HighPrim>0) { if (ZigZagHighLow) HighLast=High[k]; else HighLast=zzH[k]; numHighLast=k; HL=HighLast-LowPrim; kj=(HighPrim-HighLast)*1000/(numHighLast-numHighPrim); if (HL>0 && (Angle>=kj || Angle==-100)) // Проверка угла наклона линии { Angle=kj; // Создание линии и текстового объекта HLp=HighPrim-LowPrim; k1=MathCeil((numHighPrim+numHighLast)/2); kj=HLp/HL; if (ExtPPWithBars==0) PPWithBars=""; else if (ExtPPWithBars==1) PPWithBars=" ("+(numHighLast-numHighPrim)+")"; else if (ExtPPWithBars==2) PPWithBars=" ("+(numHighLast-numLowPrim)+"-"+(numLowPrim-numHighPrim)+")"; else if (ExtPPWithBars==3) { int_to_d1=(numLowPrim-numHighPrim); int_to_d2=(numHighLast-numLowPrim); int_to_d=int_to_d1/int_to_d2; PPWithBars=" ("+DoubleToStr(int_to_d,2)+")"; } else if (ExtPPWithBars==4) { int_to_d1=(Time[numLowPrim]-Time[numHighPrim]); int_to_d2=(Time[numHighLast]-Time[numLowPrim]); int_to_d=int_to_d1/int_to_d2; PPWithBars=" ("+DoubleToStr(int_to_d,2)+")"; } else if (ExtPPWithBars==5) { int_to_d1=(numLowPrim-numHighPrim)*(High[numHighPrim]-Low[numLowPrim]); int_to_d2=(numHighLast-numLowPrim)*(High[numHighLast]-Low[numLowPrim]); int_to_d=int_to_d1/int_to_d2; PPWithBars=" ("+DoubleToStr(int_to_d,2)+")"; } else if (ExtPPWithBars==7) { int_to_d1=((High[numHighLast]-Low[numLowPrim])/Point)/(numHighLast-numLowPrim); int_to_d2=((High[numHighPrim]-Low[numLowPrim])/Point)/(numLowPrim-numHighPrim); PPWithBars=" ("+DoubleToStr(int_to_d1,3)+"/"+DoubleToStr(int_to_d2,3)+")"; } else if (ExtPPWithBars==8) { int_to_d1=MathSqrt((numLowPrim-numHighPrim)*(numLowPrim-numHighPrim) + ((High[numHighPrim]-Low[numLowPrim])/Point)*((High[numHighPrim]-Low[numLowPrim])/Point)); int_to_d2=MathSqrt((numHighLast-numLowPrim)*(numHighLast-numLowPrim) + ((High[numHighLast]-Low[numLowPrim])/Point)*((High[numHighLast]-Low[numLowPrim])/Point)); int_to_d=int_to_d1/int_to_d2; PPWithBars=" ("+DoubleToStr(int_to_d,2)+")"; } else if (ExtPPWithBars==9) { int_to_d1=100-100*Low[numLowPrim]/High[numHighLast]; int_to_d2=100*High[numHighPrim]/Low[numLowPrim]-100; PPWithBars=" ("+DoubleToStr(int_to_d1,1)+"/"+DoubleToStr(int_to_d2,1)+")"; } else if (ExtPPWithBars==10) { PPWithBars=" "+TimeToStr(Time[numHighPrim],TIME_DATE|TIME_MINUTES)+" / "+DoubleToStr(High[numHighPrim],Digits)+" "; } // ExtPPWithBars=6 Вычисляется количество пунктов и процент отклонения от ретресмента "Песавенто" ExtLine_=ExtLine; if (kj>0.1 && kj<9.36) { // Создание текстового объекта (числа Песавенто). % восстановления между максимумами kk=kj; k2=1; Pesavento_patterns(); if (k2<0) // процент восстановления числа Песавенто и 0.886 { ExtLine_=ExtLine886; if (ExtHidden!=4) { nameObj="_" + ExtComplekt + "phtxt" + Time[numHighPrim] + "_" + Time[numHighLast]; ObjectCreate(nameObj,OBJ_TEXT,0,Time[k1],(HighPrim+HighLast)/2); if (ExtPPWithBars==6) { int_to_d=MathAbs((kk-kj)/kk)*100; PPWithBars=" ("+DoubleToStr((LowPrim+(HighLast-LowPrim)*kk-HighPrim)/Point,0)+"/"+DoubleToStr(int_to_d,2)+"%)"; } descript=txtkk; if (ExtPPWithBars==10) { ObjectSetText(nameObj,PPWithBars,ExtSizeTxt,"Arial", colorPPattern); } else { ObjectSetText(nameObj,txtkk+PPWithBars,ExtSizeTxt,"Arial", colorPPattern); } if (ExtPPWithBars==6) PPWithBars=""; } } else // процент восстановления (не Песавенто и 0.886) { if (ExtHidden==1 || ExtHidden==4) { nameObj="_" + ExtComplekt + "phtxt" + Time[numHighPrim] + "_" + Time[numHighLast]; ObjectCreate(nameObj,OBJ_TEXT,0,Time[k1],(HighPrim+HighLast)/2); descript=DoubleToStr(kk,3); if (ExtPPWithBars==10) { ObjectSetText(nameObj,""+PPWithBars,ExtSizeTxt,"Arial",colorPPattern); } else { if (ExtDeltaType==3) { ObjectSetText(nameObj,""+DoubleToStr(kk,3)+PPWithBars,ExtSizeTxt,"Arial",colorPPattern); } else { ObjectSetText(nameObj,""+DoubleToStr(kk,2)+PPWithBars,ExtSizeTxt,"Arial",colorPPattern); } } } } if ((ExtHidden==2 && k2<0) || ExtHidden!=2) { nameObj="_" + ExtComplekt + "ph" + Time[numHighPrim] + "_" + Time[numHighLast]; ObjectCreate(nameObj,OBJ_TREND,0,Time[numHighLast],HighLast,Time[numHighPrim],HighPrim); if (descript_b) ObjectSetText(nameObj,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" PPesavento "+"Line High "+descript); ObjectSet(nameObj,OBJPROP_RAY,false); ObjectSet(nameObj,OBJPROP_STYLE,STYLE_DOT); ObjectSet(nameObj,OBJPROP_COLOR,ExtLine_); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); } if (ExtFiboZigZag) k=countBarEnd; } } } else { if (ZigZagHighLow) HighPrim=High[k]; else HighPrim=zzH[k]; numHighPrim=k; } } // Переход на следующий экстремум if (k>countBarEnd) { k=numHighPrim+1; countHigh1--; countFr--; numLowPrim=0; numLowLast=0; numHighPrim=0; numHighLast=0; LowPrim=0.0; LowLast=0.0; HighPrim=0.0; HighLast=0.0; Angle=-100; } } //-----------1 Отрисовка максимумов. Конец. //-----------2 Отрисовка минимумов. Начало. //+-------------------------------------------------------------------------+ //| Вывод соединяющих линий и чисел Песавенто и 0.886 для минимумов ZigZag-a //| Отрисовка идет от нулевого бара //+-------------------------------------------------------------------------+ numLowPrim=0; numLowLast=0; numHighPrim=0; numHighLast=0; LowPrim=0.0; LowLast=0.0; HighPrim=0.0; HighLast=0.0; Angle=-100; if (flagFrNew && !flagGartley) countFr=1; else countFr=ExtFractal; flagFrNew=false; flagGartley=false; for (k=0; (k0 && countFr>0); k++) { if (zzH[k]>HighPrim && LowPrim>0) { if (ZigZagHighLow) HighPrim=High[k]; else HighPrim=zzH[k]; numHighPrim=k; } if (zzL[k]>0.0 && zzL[k]==zz[k]) { if (LowPrim>0) { if (ZigZagHighLow) LowLast=Low[k]; else LowLast=zzL[k]; numLowLast=k; // вывод соединяющих линий и процентов восстановления(чисел Песавенто) HL=HighPrim-LowLast; kj=(LowPrim-LowLast)*1000/(numLowLast-numLowPrim); if (HL>0 && (Angle<=kj || Angle==-100)) // Проверка угла наклона линии { Angle=kj; HLp=HighPrim-LowPrim; k1=MathCeil((numLowPrim+numLowLast)/2); kj=HLp/HL; if (ExtPPWithBars==0) PPWithBars=""; else if (ExtPPWithBars==1) PPWithBars=" ("+(numLowLast-numLowPrim)+")"; else if (ExtPPWithBars==2) PPWithBars=" ("+(numLowLast-numHighPrim)+"-"+(numHighPrim-numLowPrim)+")"; else if (ExtPPWithBars==3) { int_to_d1=(numHighPrim-numLowPrim); int_to_d2=(numLowLast-numHighPrim); int_to_d=int_to_d1/int_to_d2; PPWithBars=" ("+DoubleToStr(int_to_d,2)+")"; } else if (ExtPPWithBars==4) { int_to_d1=(Time[numHighPrim]-Time[numLowPrim]); int_to_d2=(Time[numLowLast]-Time[numHighPrim]); int_to_d=int_to_d1/int_to_d2; PPWithBars=" ("+DoubleToStr(int_to_d,2)+")"; } else if (ExtPPWithBars==5) { int_to_d1=(numHighPrim-numLowPrim)*(High[numHighPrim]-Low[numLowPrim]); int_to_d2=(numLowLast-numHighPrim)*(High[numHighPrim]-Low[numLowLast]); int_to_d=int_to_d1/int_to_d2; PPWithBars=" ("+DoubleToStr(int_to_d,2)+")"; } else if (ExtPPWithBars==7) { int_to_d1=((High[numHighPrim]-Low[numLowLast])/Point)/(numLowLast-numHighPrim); int_to_d2=((High[numHighPrim]-Low[numLowPrim])/Point)/(numHighPrim-numLowPrim); PPWithBars=" ("+DoubleToStr(int_to_d1,3)+"/"+DoubleToStr(int_to_d2,3)+")"; } else if (ExtPPWithBars==8) { int_to_d1=MathSqrt((numHighPrim-numLowPrim)*(numHighPrim-numLowPrim) + ((High[numHighPrim]-Low[numLowPrim])/Point)*((High[numHighPrim]-Low[numLowPrim])/Point)); int_to_d2=MathSqrt((numLowLast-numHighPrim)*(numLowLast-numHighPrim) + ((High[numHighPrim]-Low[numLowLast])/Point)*((High[numHighPrim]-Low[numLowLast])/Point)); int_to_d=int_to_d1/int_to_d2; PPWithBars=" ("+DoubleToStr(int_to_d,2)+")"; } else if (ExtPPWithBars==9) { int_to_d1=100*High[numHighPrim]/Low[numLowLast]-100; int_to_d2=100-100*Low[numLowPrim]/High[numHighPrim]; PPWithBars=" ("+DoubleToStr(int_to_d1,1)+"/"+DoubleToStr(int_to_d2,1)+")"; } else if (ExtPPWithBars==10) { PPWithBars=" "+TimeToStr(Time[numLowPrim],TIME_DATE|TIME_MINUTES)+" / "+DoubleToStr(Low[numLowPrim],Digits)+" "; } // ExtPPWithBars=6 Вычисляется количство пунктов и процент отклонения от ретресмента "Песавенто" ExtLine_=ExtLine; if ( kj>0.1 && kj<9.36) { // Создание текстового объекта (числа Песавенто). % восстановления между минимумами kk=kj; k2=1; Pesavento_patterns(); if (k2<0) // процент восстановления числа Песавенто и 0.886 { ExtLine_=ExtLine886; if (ExtHidden!=4) { nameObj="_" + ExtComplekt + "pltxt" + Time[numLowPrim] + "_" + Time[numLowLast]; ObjectCreate(nameObj,OBJ_TEXT,0,Time[k1],(LowPrim+LowLast)/2); if (ExtPPWithBars==6) { int_to_d=MathAbs((kk-kj)/kk)*100; PPWithBars=" ("+DoubleToStr((HighPrim-(HighPrim-LowLast)*kk-LowPrim)/Point,0)+"/"+DoubleToStr(int_to_d,2)+"%)"; } descript=txtkk; if (ExtPPWithBars==10) { ObjectSetText(nameObj,PPWithBars,ExtSizeTxt,"Arial", colorPPattern); } else { ObjectSetText(nameObj,txtkk+PPWithBars,ExtSizeTxt,"Arial", colorPPattern); } if (ExtPPWithBars==6) PPWithBars=""; } } else // процент восстановления (не Песавенто и 0.886) { if (ExtHidden==1 || ExtHidden==4) { nameObj="_" + ExtComplekt + "pltxt" + Time[numLowPrim] + "_" + Time[numLowLast]; ObjectCreate(nameObj,OBJ_TEXT,0,Time[k1],(LowPrim+LowLast)/2); descript=DoubleToStr(kk,3); if (ExtPPWithBars==10) { ObjectSetText(nameObj,""+PPWithBars,ExtSizeTxt,"Arial",colorPPattern); } else { if (ExtDeltaType==3) { ObjectSetText(nameObj,""+DoubleToStr(kk,3)+PPWithBars,ExtSizeTxt,"Arial",colorPPattern); } else { ObjectSetText(nameObj,""+DoubleToStr(kk,2)+PPWithBars,ExtSizeTxt,"Arial",colorPPattern); } } } } if ((ExtHidden==2 && k2<0) || ExtHidden!=2) { nameObj="_" + ExtComplekt + "pl" + Time[numLowPrim] + "_" + Time[numLowLast]; ObjectCreate(nameObj,OBJ_TREND,0,Time[numLowLast],LowLast,Time[numLowPrim],LowPrim); if (descript_b) ObjectSetText(nameObj,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" PPesavento "+"Line Low "+descript); ObjectSet(nameObj,OBJPROP_RAY,false); ObjectSet(nameObj,OBJPROP_STYLE,STYLE_DOT); ObjectSet(nameObj,OBJPROP_COLOR,ExtLine_); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); } if (ExtFiboZigZag) k=countBarEnd; } } } else { numLowPrim=k; if (ZigZagHighLow) LowPrim=Low[k]; else LowPrim=zzL[k]; } } // Переход на следующий экстремум if (k>countBarEnd) { k=numLowPrim+1; countLow1--; countFr--; numLowPrim=0; numLowLast=0; numHighPrim=0; numHighLast=0; LowPrim=0.0; LowLast=0.0; HighPrim=0.0; HighLast=0.0; Angle=-100; } } //-----------2 Отрисовка минимумов. Конец. } //----------------------------------------- // Блок вывода соединительных линий. Конец. //----------------------------------------- //====================== //====================== //====================== } // Разрешение на вывод оснастки. Конец. if (mAP) { if (mAPs || mAPd) { metkaAP(true); // Создание меток в вилах Эндрюса } else if (mTime0) mAPs=true; if (ExtPitchforkDinamic>0) mAPd=true; if (mAPs || mAPd) metkaAP(true); // корректировка положения меток в вилах Эндрюса mStart=false; mTime=iTime(NULL,Period(),0); } else if (mAuto_d && ((mOutRedZone && aOutRedZone[0]) || AutoAPDinamicTestRedZone)) { if (ExtPitchforkDinamic>0) {mAPd=true; metkaAP(true);} // корректировка положения меток в вилах Эндрюса } else { metkaAP(false); // Регулировка цвета меток в вилах Эндрюса } } // КОНЕЦ } // 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++;} } } } //-------------------------------------------------------- // Подсчет количества экстремумов. Минимумов и максимумов. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Формирование матрицы. Начало. // // Матрица используется для поиска исчезнувших экстремумов. // Это инструмент компенсации непредвиденных закидонов стандартного ZigZag-a. // // Также выводятся статические и динамические фибы и вееры Фибоначчи, // вилы Эндрюса... //------------------------------------------------------ void matriza() { if (afrm && ExtHidden<5) { afrm=false; // aOutRedZone[0]=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; shift0) { 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_or_vts) { // kl - min; kh - max 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; } } // Вывод Fibo Time вне вил Эндрюса if (ExtFiboTimeNum>2) fiboTimeX(); // должно вызываться раньше вызова статических вил Эндрюса // Вывод вил Эндрюса if (ExtPitchforkStatic>0) { if (ExtCustomStaticAP) { screenPitchforkS(); } else { if (newRay && mPitch[2]>0) screenPitchforkS(); if (ExtPitchforkCandle) { if (iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)==0) screenPitchforkS(); } else { if (mPitch[2]==0) screenPitchforkS(); } } } if (ExtPitchforkDinamic>0) screenPitchforkD(); // Вывод каналлов. if (ExtChannelsNum>1 || DinamicChannels>0) Channels(); // Вывод статических и динамических фиб. if (ExtFiboStatic) { if (newRay && mFibo[1]>0) screenFiboS(); if (mFibo[1]==0) screenFiboS(); } if (ExtFiboDinamic) screenFiboD(); // Расширения Фибоначчи if (ExtFiboExpansion>0) { if (newRay && mExpansion[2]>0) FiboExpansion(); if (mExpansion[2]==0) FiboExpansion(); } // Вывод фибовееров if (ExtFiboFanNum>0 && ExtFiboFanColor>0) { if (newRay && mFan[1]>0) screenFiboFan(); if (mFan[1]==0) screenFiboFan(); } if (ExtFiboFanDinamic) screenFiboFanD(); // Вывод Versum Levels if (ExtVLStaticColor>0) { if (newRay && mVL[2]>0 && ExtVLStaticNum>0) VLS(); if (mVL[2]==0) VLS(); } if (ExtVLDinamicColor>0) VLD(); // Вывод PivotZZ динамические if (ExtPivotZZ1Num==1 && ExtPivotZZ1Color>0) PivotZZ(ExtPivotZZ1Color, ExtPivotZZ1Num, 1); if (ExtPivotZZ2Num==1 && ExtPivotZZ2Color>0) PivotZZ(ExtPivotZZ2Color, ExtPivotZZ2Num, 2); // Вывод PivotZZ статические if (newRay && ExtPivotZZ1Num>1 && ExtPivotZZ1Color>0) PivotZZ(ExtPivotZZ1Color, ExtPivotZZ1Num, 1); if (newRay && ExtPivotZZ2Num>1 && ExtPivotZZ2Color>0) PivotZZ(ExtPivotZZ2Color, ExtPivotZZ2Num, 2); // Вывод фибодуг if (ExtArcDinamicNum>0) screenFiboArcD(); if (newRay && ExtArcStaticNum>0) screenFiboArcS(); // Вывод спирали if (newRay && ExtSpiralNum>0) GoldenSpiral(afr[mSpiral[0]],afrx[mSpiral[0]],afr[mSpiral[1]],afrx[mSpiral[1]]); // Поиск паттернов Gartley search_Gartley(); ExtSave=false; } if (newRay && ExtNumberPeak) NumberPeak(); newRay=false; } //-------------------------------------------------------- // Формирование матрицы. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Поиск паттернов Gartley. Начало. //-------------------------------------------------------- void search_Gartley() { if (ExtGartleyOnOff || PotencialsLevels_retXD>0) { switch (ExtIndicator ) { case 0 : {_Gartley("ExtIndicator=0_" + minBars+"/"+ExtBackstep,0);break;} case 1 : {_Gartley("ExtIndicator=1_" + minSize+"/"+minPercent,0);break;} case 2 : {_Gartley("ExtIndicator=2_" + minBars+"/"+minSize,0);break;} case 3 : {_Gartley("ExtIndicator=3_" + minBars,0);break;} case 4 : {_Gartley("ExtIndicator=4_" + minSize,0);break;} case 5 : {_Gartley("ExtIndicator=5_" + minBars,0);break;} case 6 : {_Gartley("ExtIndicator=6_" + minBars+"/"+ExtBackstep,0);break;} case 7 : {_Gartley("ExtIndicator=7_" + minBars,0);break;} case 8 : {_Gartley("ExtIndicator=8_" + minBars+"/"+ExtDeviation,0);break;} case 10 : {_Gartley("ExtIndicator=10_" + minBars,0);break;} case 12 : {_Gartley("ExtIndicator=12_" + minBars,0);break;} case 13 : {_Gartley("ExtIndicator=13_" + minBars+"/"+minSize,0);break;} case 14 : {_Gartley("ExtIndicator=14_" + minBars,0);break;} } if (vPatOnOff && !vPatNew) { vPatNew=true; if (ExtSendMail) _SendMail("There was a pattern","on " + Symbol() + " " + Period() + " pattern " + vBullBear + " " + vNamePattern); } else if (!vPatOnOff && vPatNew) vPatNew=false; } } //-------------------------------------------------------- // Поиск паттернов Gartley. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод номеров переломов зигзагов. Начало. //-------------------------------------------------------- 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;i0) { n++; if (ExtNumberPeakLow) { if (zzL[i]>0) { txt=DoubleToStr(n,0); nameObj="NumberPeak" + "_" + ExtComplekt + "_" + n; ObjectCreate(nameObj,OBJ_TEXT,0,Time[i],zz[i]); ObjectSetText(nameObj,txt,ExtNumberPeakFontSize,"Arial",ExtNumberPeakColor); } } else { txt=DoubleToStr(n,0); nameObj="NumberPeak" + "_" + ExtComplekt + "_" + n; ObjectCreate(nameObj,OBJ_TEXT,0,Time[i],zz[i]); ObjectSetText(nameObj,txt,ExtNumberPeakFontSize,"Arial",ExtNumberPeakColor); } } } } //-------------------------------------------------------- // Вывод номеров переломов зигзагов. Конец //-------------------------------------------------------- //-------------------------------------------------------- // Каналы. Начало. //-------------------------------------------------------- void Channels() { int i,j,k,m,n,nul,peakLeft,peakRight,peakBase; double tangens, sdvigH, sdvigL, sdvigH_, sdvigL_, cenaLTLeft, cenaLTRight, cenaLCLeft, cenaLCRight, wrcenaL, wrcenaR; datetime timeLTLeft, timeLTRight, timeLCLeft, timeLCRight; int baseExtremum; // номер перелома зигзага (бар), от которого строится трендовая bool fTrend=false; // =true - Bull проводим трендовую по минимумам, =false - Bear проводим трендовую по максимумам bool dinamic=false; if (ExtChannelsNum==0 && DinamicChannels>0) dinamic=true; //int o; k=0; for (i=0;i<=9;i++) {if (mChannels[i]>=0) k++;} // Каналы с линией тренда, первая точка которой на переломе зигзага, // вторая точка построена по касательной к рынку на участке, охватываемом каналом. Начало. if (ExtTypeChannels==1) { if (dinamic) nul=DinamicChannels; else nul=1; for (i=1;i=peakRight;j--) // вычисляем tangens { if (fTrend) { if (afrx[baseExtremum] + tangens*(peakBase-j)-Low[j]>0) tangens=(Low[j]-afrx[baseExtremum])/(peakBase-j); } else { if (High[j] - (afrx[baseExtremum] + tangens*(peakBase-j))>0) tangens=(High[j]-afrx[baseExtremum])/(peakBase-j); } } for (j=peakLeft;j>=peakRight;j--) // вычисляем сдвиги { if (fTrend) { sdvigH_=High[j] - (afrx[baseExtremum] + tangens*(peakBase-j)); if (sdvigH_>sdvigH) {sdvigH=sdvigH_; cenaLCRight=High[j]+tangens*(j-peakRight);} } else { sdvigL_=afrx[baseExtremum] + tangens*(peakBase-j)-Low[j]; if (sdvigL_>sdvigL) {sdvigL=sdvigL_; cenaLCRight=Low[j]+tangens*(j-peakRight);} } } timeLCRight=afr[mChannels[i]]; if (ExtTypeLineChannels==0) { while (j>0) { if (fTrend) { if (afrx[baseExtremum] + tangens*(peakBase-j)-Low[j]>sdvigL) break; } else { if (High[j] - (afrx[baseExtremum] + tangens*(peakBase-j))>sdvigH) break; } j--; } } if (j<0) j=0; nameObj="LTChannel" + i + ExtComplekt+"_"; if (ExtSave) { if (i!=DinamicChannels) nameObj=nameObj + save; } ObjectDelete(nameObj); if (fTrend) { timeLTLeft=afr[mChannels[i-1]]; cenaLTLeft=afrx[baseExtremum]-tangens*(peakLeft-peakBase); timeLTRight=Time[j]; cenaLTRight=afrx[baseExtremum] + tangens*(peakBase-j)-sdvigL; } else { timeLTLeft=afr[mChannels[i-1]]; cenaLTLeft=afrx[baseExtremum]-tangens*(peakLeft-peakBase); timeLTRight=Time[j]; cenaLTRight=afrx[baseExtremum] + tangens*(peakBase-j)+sdvigH; } if (ExtTypeLineChannels==1 || ExtTypeLineChannels==3) { n=j; wrcenaR=cenaLTRight; if (fTrend) { while (cenaLTRight<=afrx[mChannels[i]] && n>0) {n--; cenaLTRight=wrcenaR+tangens*(j-n);} } else { while (cenaLTRight>=afrx[mChannels[i]] && n>0) {n--; cenaLTRight=wrcenaR+tangens*(j-n);} } timeLTRight=Time[n]; timeLTLeft=afr[baseExtremum]; cenaLTLeft=afrx[baseExtremum]; } ObjectCreate(nameObj,OBJ_TREND,0,timeLTLeft,cenaLTLeft,timeLTRight,cenaLTRight); if (ExtTypeLineChannels<2) ObjectSet(nameObj,OBJPROP_RAY,ExtRay); ObjectSet(nameObj,OBJPROP_COLOR,ExtLTColor); ObjectSet(nameObj,OBJPROP_STYLE,ExtLTChannelsStyle); ObjectSet(nameObj,OBJPROP_WIDTH,ExtLTChannelsWidth); nameObj="LCChannel" + i + ExtComplekt+"_"; if (ExtSave) { if (i!=DinamicChannels) nameObj=nameObj + save; } ObjectDelete(nameObj); if (fTrend) { cenaLCLeft=afrx[baseExtremum]+sdvigH-tangens*(peakLeft-peakBase); } else { cenaLCLeft=afrx[baseExtremum]-sdvigL-tangens*(peakLeft-peakBase); } timeLCLeft=afr[mChannels[i-1]]; if (ExtTypeLineChannels==1 || ExtTypeLineChannels==3) { m=peakLeft; wrcenaL=cenaLCLeft; n=peakRight; wrcenaR=cenaLCRight; if (fTrend) { while (cenaLCLeft>=afrx[baseExtremum] && m<=Bars) {m++; cenaLCLeft=wrcenaL-tangens*(m-peakLeft);} while (cenaLCRight>=afrx[mChannels[i]] && n<=peakLeft) {n++; cenaLCRight=wrcenaR-tangens*(n-peakRight);} } else { while (cenaLCLeft<=afrx[baseExtremum] && m<=Bars) {m++; cenaLCLeft=wrcenaL-tangens*(m-peakLeft);} while (cenaLCRight<=afrx[mChannels[i]] && n<=peakLeft) {n++; cenaLCRight=wrcenaR-tangens*(n-peakRight);} } timeLCLeft=Time[m]; cenaLCRight=wrcenaR-tangens*(n-1-peakRight); timeLCRight=Time[n-1]; } ObjectCreate(nameObj,OBJ_TREND,0,timeLCLeft,cenaLCLeft,timeLCRight,cenaLCRight); if (ExtTypeLineChannels<2) ObjectSet(nameObj,OBJPROP_RAY,ExtRay); ObjectSet(nameObj,OBJPROP_COLOR,ExtLCColor); ObjectSet(nameObj,OBJPROP_STYLE,ExtLCChannelsStyle); ObjectSet(nameObj,OBJPROP_WIDTH,ExtLCChannelsWidth); if (dinamic) break; } } // Каналы с линией тренда, первая точка которой на переломе зигзага, // вторая точка построена по касательной к рынку на участке, охватываемом каналом. Конец. // Каналы, параллельные лучу зигзага. Начало. if (ExtTypeChannels==2) { if (dinamic) nul=DinamicChannels; else nul=1; for (i=1;i=peakRight;j--) // вычисляем сдвиги { sdvigH_=High[j] - (afrx[mChannels[i-1]] + tangens*(peakLeft-j)); sdvigL_=afrx[mChannels[i-1]] + tangens*(peakLeft-j)-Low[j]; if (sdvigH_>sdvigH) sdvigH=sdvigH_; if (sdvigL_>sdvigL) sdvigL=sdvigL_; } if (ExtTypeLineChannels==0) { while (j>=0) { if (fTrend) { if (afrx[mChannels[i-1]] + tangens*(peakLeft-j)-Low[j]>sdvigL) break; } else { if (High[j] - (afrx[mChannels[i-1]] + tangens*(peakLeft-j))>sdvigH) break; } j--; } } if (j<0) j=0; nameObj="LTChannel" + i + ExtComplekt+"_"; if (ExtSave) { if (i!=DinamicChannels) nameObj=nameObj + save; } ObjectDelete(nameObj); if (fTrend) { timeLTLeft=afr[mChannels[i-1]]; cenaLTLeft=afrx[mChannels[i-1]]-sdvigL; timeLTRight=Time[j]; cenaLTRight=afrx[mChannels[i-1]] + tangens*(peakLeft-j)-sdvigL; } else { timeLTLeft=afr[mChannels[i-1]]; cenaLTLeft=afrx[mChannels[i-1]]+sdvigH; timeLTRight=Time[j]; cenaLTRight=afrx[mChannels[i-1]] + tangens*(peakLeft-j)+sdvigH; } if (ExtTypeLineChannels==1 || ExtTypeLineChannels==3) { if (fTrend) { m=peakLeft; wrcenaL=cenaLTLeft; while (cenaLTLeft=peakRight) {m--; cenaLTLeft=wrcenaL+tangens*(peakLeft-m);} timeLTLeft=Time[m+1]; cenaLTLeft=wrcenaL+tangens*(peakLeft-m-1); n=peakRight; wrcenaR=cenaLTRight; while (cenaLTRight0) {n--; cenaLTRight=wrcenaL+tangens*(peakLeft-n);} timeLTRight=Time[n]; } else { m=peakLeft; wrcenaL=cenaLTLeft; while (cenaLTLeft>=afrx[mChannels[i-1]] && m>=peakRight) {m--; cenaLTLeft=wrcenaL+tangens*(peakLeft-m);} timeLTLeft=Time[m+1]; cenaLTLeft=wrcenaL+tangens*(peakLeft-m-1); n=peakRight; wrcenaR=cenaLTRight; while (cenaLTRight>afrx[mChannels[i]] && n>0) {n--; cenaLTRight=wrcenaL+tangens*(peakLeft-n);} timeLTRight=Time[n]; } } ObjectCreate(nameObj,OBJ_TREND,0,timeLTLeft,cenaLTLeft,timeLTRight,cenaLTRight); if (ExtTypeLineChannels<2) ObjectSet(nameObj,OBJPROP_RAY,false); ObjectSet(nameObj,OBJPROP_COLOR,ExtLTColor); ObjectSet(nameObj,OBJPROP_STYLE,ExtLTChannelsStyle); ObjectSet(nameObj,OBJPROP_WIDTH,ExtLTChannelsWidth); nameObj="LCChannel" + i + ExtComplekt+"_"; if (ExtSave) { if (i!=DinamicChannels) nameObj=nameObj + save; } ObjectDelete(nameObj); if (fTrend) { timeLCLeft=afr[mChannels[i-1]]; cenaLCLeft=afrx[mChannels[i-1]]+sdvigH; timeLCRight=afr[mChannels[i]]; cenaLCRight=afrx[mChannels[i]]+sdvigH; } else { timeLCLeft=afr[mChannels[i-1]]; cenaLCLeft=afrx[mChannels[i-1]]-sdvigL; timeLCRight=afr[mChannels[i]]; cenaLCRight=afrx[mChannels[i]]-sdvigL; } if (ExtTypeLineChannels==1 || ExtTypeLineChannels==3) { if (fTrend) { m=peakLeft; wrcenaL=cenaLCLeft; while (cenaLCLeft>afrx[mChannels[i-1]] && mafrx[mChannels[i]] && n1) { cena=(zz[peak2]+zz[peak1]+Close[peak1-1])/3; tangens=(zz[peak2]-zz[peak1])/(peak2-peak1); val=zz[peak1]; for (shift=peak1; shiftzz[peak1]) { if (val>cena) break; } else { if (val0) { H_L=afrh[nb]-afrl[nc]; // высота отрезка ВС for (i=0; i<7; i++) { if (ExtFiboType==1) { mediana=line_pesavento[i]*H_L+afrl[nc]; tangens=(mediana-afrl[na])/(c_bar1+(1-line_pesavento[i])*c_bar2); cena=c_bar2*line_pesavento[i]*tangens+mediana; nameObj=vl+i+" " + ExtComplekt+"_"; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TREND,0,afr[na],afrl[na],afr[nc],cena); ObjectSetText(nameObj,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" "+vl+" "+DoubleToStr(line_pesavento[i]*100,1)+""); } else { mediana=line_fibo[i]*H_L+afrl[nc]; tangens=(mediana-afrl[na])/(c_bar1+(1-line_fibo[i])*c_bar2); cena=c_bar2*line_fibo[i]*tangens+mediana; nameObj=vl+i+" " + ExtComplekt+"_"; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TREND,0,afr[na],afrl[na],afr[nc],cena); ObjectSetText(nameObj,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" "+vl+" "+DoubleToStr(line_fibo[i]*100,1)+""); } ObjectSet(nameObj,OBJPROP_COLOR,color_line); ObjectSet(nameObj,OBJPROP_STYLE,ExtVLStyle); ObjectSet(nameObj,OBJPROP_WIDTH,ExtVLWidth); } } else { H_L=afrh[nc]-afrl[nb]; // высота отрезка ВС for (i=0; i<7; i++) { if (ExtFiboType==1) { mediana=afrh[nc]-line_pesavento[i]*H_L; tangens=(afrh[na]-mediana)/(c_bar1+(1-line_pesavento[i])*c_bar2); cena=mediana-c_bar2*line_pesavento[i]*tangens; nameObj=vl+i+" " + ExtComplekt+"_"; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TREND,0,afr[na],afrh[na],afr[nc],cena); ObjectSetText(nameObj,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" "+vl+" "+DoubleToStr(line_pesavento[i]*100,1)+""); } else { mediana=afrh[nc]-line_fibo[i]*H_L; tangens=(afrh[na]-mediana)/(c_bar1+(1-line_fibo[i])*c_bar2); cena=mediana-c_bar2*line_fibo[i]*tangens; nameObj=vl+i+" " + ExtComplekt+"_"; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TREND,0,afr[na],afrh[na],afr[nc],cena); ObjectSetText(nameObj,"ZUP"+ExtComplekt+" zz"+ExtIndicator+" "+vl+" "+DoubleToStr(line_fibo[i]*100,1)+""); } ObjectSet(nameObj,OBJPROP_COLOR,color_line); ObjectSet(nameObj,OBJPROP_STYLE,ExtVLStyle); ObjectSet(nameObj,OBJPROP_WIDTH,ExtVLWidth); } } } //-------------------------------------------------------- // Versum Levels. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод вил Эндрюса статических. Начало. //-------------------------------------------------------- void screenPitchforkS() { int i, i_APm=0, count_APm=0; double a1,b1,c1,ab1,bc1,ab2,bc2,tangens,n1,cl1,ch1,cena,wr,wr1,wr2; datetime ta1,tb1,tc1,tab2,tbc2,tcl1,tch1,twr1,twr2; int a0,b0,c0; int i_AM, i_period, tf, k_AM, const_AM, hl, i_tf; datetime end, time_AM[3]; double cena_AM[3]; bool exit_tf, end_tf[3]; int pitch_time[]={0,0,0}; double pitch_cena[]={0,0,0}; double TLine, m618=phi-1, m382=2-phi; bool moveAP=false; string txt=""; if (ExtCustomStaticAP) { if (ObjectFind(nameCheckLabel)==0) { // Проверка положения сигнальной метки APm if (ObjectGet(nameCheckLabel,OBJPROP_XDISTANCE)!=vX || ObjectGet(nameCheckLabel,OBJPROP_YDISTANCE)!=vY) { if (ObjectFind(nameCheckLabel_hidden)==0) { i_APm=StrToInteger(StringSubstr(ObjectDescription(nameCheckLabel_hidden),0,1)); count_APm=StrToInteger(StringSubstr(ObjectDescription(nameCheckLabel_hidden),2)); count_APm--; if (count_APm<1) txt=""+i_APm+"_"+i_APm; else txt=""+i_APm+"_"+count_APm; ObjectSetText(nameCheckLabel_hidden,txt); } if (count_APm<1) { ObjectDelete(nameCheckLabel); ObjectCreate(nameCheckLabel,OBJ_LABEL,0,0,0); ObjectSetText(nameCheckLabel,"APm"); ObjectSet(nameCheckLabel, OBJPROP_FONTSIZE, 10); ObjectSet(nameCheckLabel, OBJPROP_COLOR, Red); ObjectSet(nameCheckLabel, OBJPROP_CORNER, 1); ObjectSet(nameCheckLabel, OBJPROP_XDISTANCE, vX); ObjectSet(nameCheckLabel, OBJPROP_YDISTANCE, vY); } if (ObjectFind("pitchforkS" + ExtComplekt+"_")==0) {moveAP=true; nameObj="pitchforkS" + ExtComplekt+"_";} if (ObjectFind("pitchforkS" + ExtComplekt+"_APm_")==0) {moveAP=true; nameObj="pitchforkS" + ExtComplekt+"_APm_";} } else { if (ObjectFind("pitchforkS" + ExtComplekt+"_APm_")==0) return; } } else { ObjectCreate(nameCheckLabel,OBJ_LABEL,0,0,0); ObjectSetText(nameCheckLabel,"APm"); ObjectSet(nameCheckLabel, OBJPROP_FONTSIZE, 10); ObjectSet(nameCheckLabel, OBJPROP_COLOR, Red); ObjectSet(nameCheckLabel, OBJPROP_CORNER, 1); ObjectSet(nameCheckLabel, OBJPROP_XDISTANCE, vX); ObjectSet(nameCheckLabel, OBJPROP_YDISTANCE, vY); } } if (moveAP) { mPitchCena[0]=ObjectGet(nameObj,OBJPROP_PRICE1); mPitchCena[1]=ObjectGet(nameObj,OBJPROP_PRICE2); mPitchCena[2]=ObjectGet(nameObj,OBJPROP_PRICE3); mPitchTime[0]=ObjectGet(nameObj,OBJPROP_TIME1); mPitchTime[1]=ObjectGet(nameObj,OBJPROP_TIME2); mPitchTime[2]=ObjectGet(nameObj,OBJPROP_TIME3); if (AutoMagnet) { for (i=0;i<3;i++) {cena_AM[i]=0;time_AM[i]=0;period_AM[i]=Period();end_tf[i]=true;} // Создание/коррекция текстовой метки для AutoMagnet txt=StringSubstr("0000"+Period(),StringLen("0000"+Period())-5,5)+"00000000000"; if (!ObjectFind(nameMagnet[0])==0) { ObjectCreate(nameMagnet[0],OBJ_TEXT,0,0,0); ObjectSet(nameMagnet[0], OBJPROP_COLOR, CLR_NONE); ObjectSetText(nameMagnet[0],txt); ObjectCreate(nameMagnet[1],OBJ_TEXT,0,0,0); ObjectSet(nameMagnet[1], OBJPROP_COLOR, CLR_NONE); ObjectSetText(nameMagnet[1],txt); ObjectCreate(nameMagnet[2],OBJ_TEXT,0,0,0); ObjectSet(nameMagnet[2], OBJPROP_COLOR, CLR_NONE); ObjectSetText(nameMagnet[2],txt); } else { for (i_AM=0;i_AM<3;i_AM++) { period_AM[i_AM]=StrToInteger(StringSubstr(ObjectDescription(nameMagnet[i_AM]),0,5)); cena_AM[i_AM]=StrToDouble(StringSubstr(ObjectDescription(nameMagnet[i_AM]),14,10)); time_AM[i]=StrToTime(StringSubstr(ObjectDescription(nameMagnet[i_AM]),5,10)); if (mPitchCena[i_AM]==cena_AM[i_AM] && mPitchTime[i_AM]==time_AM[i_AM]) end_tf[i_AM]=false; } } for (i_AM=0;i_AM<3;i_AM++) { if (!end_tf[i_AM]) continue; const_AM=AMBars*2+1; hl=0; k_AM=iBarShift(Symbol(),period_AM[i_AM],mPitchTime[i_AM],false); // поиск экстремума на том таймфрейме, на котором включили режим APm if (mPitchCena[i_AM]>=iHigh(Symbol(),period_AM[i_AM],k_AM)) { mPitchCena[i_AM]=0; hl=1; for(k_AM=k_AM+AMBars;const_AM>0;const_AM--) { if (iHigh(Symbol(),period_AM[i_AM],k_AM)>mPitchCena[i_AM]) { mPitchCena[i_AM]=iHigh(Symbol(),period_AM[i_AM],k_AM); mPitchTime[i_AM]=iTime(Symbol(),period_AM[i_AM],k_AM); } k_AM--; } } else if (mPitchCena[i_AM]<=iLow(Symbol(),period_AM[i_AM],k_AM)) { mPitchCena[i_AM]=1000000; hl=2; for(k_AM=k_AM+AMBars;const_AM>0;const_AM--) { if (iLow(Symbol(),period_AM[i_AM],k_AM)0) { exit_tf=false; for (i_period=0;i_period=mPitchCena[i_AM]) { mPitchTime[i_AM]=iTime(Symbol(),tf,i_tf); exit_tf=true; break; } } } else { for (i_tf=k_AM;iTime(Symbol(),tf,i_tf)<=end;i_tf--) { if (iLow(Symbol(),tf,i_tf)<=mPitchCena[i_AM]) { mPitchTime[i_AM]=iTime(Symbol(),tf,i_tf); exit_tf=true; break; } } } if (exit_tf) { ObjectSetText(nameMagnet[i_AM],StringSubstr("0000"+tf,StringLen("0000"+tf)-5,5)+StringSubstr("000000000"+mPitchTime[i_AM],StringLen("000000000"+mPitchTime[i_AM])-10,1010)+""+mPitchCena[i_AM]); break; } } } } } } else { if (ExtPitchforkCandle) { if (iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)==0) { if (ExtPitchfork_1_HighLow) { mPitchCena[2]=High[iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)]; } else { mPitchCena[2]=Low[iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)]; } } cena=mPitchCena[0]; if (ExtPitchfork_1_HighLow) { if (ExtCM_0_1A_2B_Static==1) { cena=mPitchCena[0]-(mPitchCena[0]-mPitchCena[1])*ExtCM_FiboStatic; } else if (ExtCM_0_1A_2B_Static==4) { mPitchTimeSave=mPitchTime[0]; mPitchTime[0]=mPitchTime[1]; if (maxGipotenuza4(mPitchTime,mPitchCena)) { cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*m618; } else { cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*m382; } } else if (ExtCM_0_1A_2B_Static==5) { mPitchTimeSave=mPitchTime[0]; mPitchTime[0]=mPitchTime[1]; if (maxGipotenuza5(mPitchTime,mPitchCena)) { cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*m618; } else { cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*m382; } } else if (ExtCM_0_1A_2B_Static>1) { if (ExtCM_0_1A_2B_Static==2) mPitchTime[0]=mPitchTime[1]; cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*ExtCM_FiboStatic; } } else { if (ExtCM_0_1A_2B_Static==1) { cena=mPitchCena[0]+(mPitchCena[1]-mPitchCena[0])*ExtCM_FiboStatic; } else if (ExtCM_0_1A_2B_Static==4) { mPitchTimeSave=mPitchTime[0]; mPitchTime[0]=mPitchTime[1]; if (maxGipotenuza4(mPitchTime,mPitchCena)) { cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*m618; } else { cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*m382; } } else if (ExtCM_0_1A_2B_Static==5) { mPitchTimeSave=mPitchTime[0]; mPitchTime[0]=mPitchTime[1]; if (maxGipotenuza5(mPitchTime,mPitchCena)) { cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*m618; } else { cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*m382; } } else if (ExtCM_0_1A_2B_Static>1) { if (ExtCM_0_1A_2B_Static==2) mPitchTime[0]=mPitchTime[1]; cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*ExtCM_FiboStatic; } } } else { mPitchTime[0]=afr[mPitch[0]]; mPitchTime[1]=afr[mPitch[1]]; mPitchTime[2]=afr[mPitch[2]]; if (mPitchTime[0]==0) return; if (afrl[mPitch[0]]>0) { cena=afrl[mPitch[0]]; mPitchCena[1]=afrh[mPitch[1]]; mPitchCena[2]=afrl[mPitch[2]]; if (ExtCM_0_1A_2B_Static==1) { cena=mPitchCena[0]+(mPitchCena[1]-mPitchCena[0])*ExtCM_FiboStatic; } else if (ExtCM_0_1A_2B_Static==4) { mPitchTimeSave=mPitchTime[0]; mPitchTime[0]=mPitchTime[1]; if (maxGipotenuza4(mPitchTime,mPitchCena)) { cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*m618; } else { cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*m382; } } else if (ExtCM_0_1A_2B_Static==5) { mPitchTimeSave=mPitchTime[0]; mPitchTime[0]=mPitchTime[1]; if (maxGipotenuza5(mPitchTime,mPitchCena)) { cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*m618; } else { cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*m382; } } else if (ExtCM_0_1A_2B_Static>1) { if (ExtCM_0_1A_2B_Static==2) mPitchTime[0]=mPitchTime[1]; cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*ExtCM_FiboStatic; } } else { cena=afrh[mPitch[0]]; mPitchCena[1]=afrl[mPitch[1]]; mPitchCena[2]=afrh[mPitch[2]]; if (ExtCM_0_1A_2B_Static==1) { cena=mPitchCena[0]-(mPitchCena[0]-mPitchCena[1])*ExtCM_FiboStatic; } else if (ExtCM_0_1A_2B_Static==4) { mPitchTimeSave=mPitchTime[0]; mPitchTime[0]=mPitchTime[1]; if (maxGipotenuza4(mPitchTime,mPitchCena)) { cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*m618; } else { cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*m382; } } else if (ExtCM_0_1A_2B_Static==5) { mPitchTimeSave=mPitchTime[0]; mPitchTime[0]=mPitchTime[1]; if (maxGipotenuza5(mPitchTime,mPitchCena)) { cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*m618; } else { cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*m382; } } else if (ExtCM_0_1A_2B_Static>1) { if (ExtCM_0_1A_2B_Static==2) mPitchTime[0]=mPitchTime[1]; cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*ExtCM_FiboStatic; } } } mPitchCena[0]=cena; } if (ExtFiboFanStatic) {ExtFiboFanStatic=false; screenFiboFanS();} coordinaty_1_2_mediany_AP(mPitchCena[0], mPitchCena[1], mPitchCena[2], mPitchTime[0], mPitchTime[1], mPitchTime[2], tab2, tbc2, ab1, bc1, ExtPitchforkStatic, ExtPitchforkStaticCustom); pitch_time[0]=tab2;pitch_cena[0]=ab1; // 50% медиана if (ExtPitchforkStatic==2) { nameObj="pmedianaS" + ExtComplekt+"_"; if (ExtSave) { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TREND,0,tab2,ab1,tbc2,bc1); ObjectSet(nameObj,OBJPROP_STYLE,STYLE_DASH); ObjectSet(nameObj,OBJPROP_COLOR,ExtLinePitchforkS); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); if (ExtSLMStatic) { b0=iBarShift(Symbol(),Period(),mPitchTime[1]); c0=iBarShift(Symbol(),Period(),mPitchTime[2]); // смещение slm wr=(ObjectGetValueByShift(nameObj,c0)-mPitchCena[2])*(1-2*m382); //номер бара точки 1 a0=c0-(c0-b0)*m382-1; // время точки 1 twr1=iTime(Symbol(),Period(),a0); // цена точки 1 wr1=ObjectGetValueByShift(nameObj,a0)-wr; // координаты точки 2 wr2=ObjectGetValueByShift(nameObj,0)-wr; twr2=iTime(Symbol(),Period(),0); nameObj="SLM382S" + ExtComplekt+"_"; if (ExtSave) { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TREND,0,twr1,wr1,twr2,wr2); ObjectSet(nameObj,OBJPROP_STYLE,STYLE_DASH); ObjectSet(nameObj,OBJPROP_COLOR,ExtSLMStaticColor); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); //номер бара точки 1 a0=c0-(c0-b0)*m618-1; // время точки 1 twr1=iTime(Symbol(),Period(),a0); // цена точки 1 nameObj="pmedianaS" + ExtComplekt+"_"; wr1=ObjectGetValueByShift(nameObj,a0)+wr; // координаты точки 2 wr2=ObjectGetValueByShift(nameObj,0)+wr; twr2=iTime(Symbol(),Period(),0); nameObj="SLM618S" + ExtComplekt+"_"; if (ExtSave) { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TREND,0,twr1,wr1,twr2,wr2); ObjectSet(nameObj,OBJPROP_STYLE,STYLE_DASH); ObjectSet(nameObj,OBJPROP_COLOR,ExtSLMStaticColor); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); } if (ExtFSLShiffLinesStatic) { c0=iBarShift(Symbol(),Period(),mPitchTime[1]); // время точки 1 twr1=mPitchTime[1]; // цена точки 1 wr1=mPitchCena[1]; // координаты точки 2 nameObj="pmedianaS" + ExtComplekt+"_"; wr2=ObjectGetValueByShift(nameObj,0)-ObjectGetValueByShift(nameObj,c0)+mPitchCena[1]; twr2=iTime(Symbol(),Period(),0); nameObj="FSL Shiff Lines S" + ExtComplekt+"_"; if (ExtSave) { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TREND,0,twr1,wr1,twr2,wr2); ObjectSet(nameObj,OBJPROP_STYLE,STYLE_DASH); ObjectSet(nameObj,OBJPROP_COLOR,ExtFSLShiffLinesStaticColor); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); } nameObj="1-2pmedianaS" + ExtComplekt+"_"; if (ExtSave) { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TEXT,0,tab2,ab1+3*Point); ObjectSetText(nameObj," 1/2 ML",9,"Arial", ExtLinePitchforkS); } if (ExtCustomStaticAP) nameObj="pitchforkS" + ExtComplekt+"_APm_"; else nameObj="pitchforkS" + ExtComplekt+"_"; if (ExtSave) { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } if (ExtPitchforkStatic!=4) { pitch_time[0]=mPitchTime[0];pitch_cena[0]=mPitchCena[0]; if (ExtPitchforkStatic==3) pitch_cena[0]=ab1; } pitch_time[1]=mPitchTime[1];pitch_cena[1]=mPitchCena[1]; pitch_time[2]=mPitchTime[2];pitch_cena[2]=mPitchCena[2]; // Вывод меток в вилах Эндрюса mAPs=false; if (ObjectFind(nameObj)>=0) { if (mAP) { if (ObjectGet(nameObj,OBJPROP_TIME1)!=pitch_time[0] || ObjectGet(nameObj,OBJPROP_PRICE1)!=pitch_cena[0] || ObjectGet(nameObj,OBJPROP_TIME2)!=pitch_time[1] || ObjectGet(nameObj,OBJPROP_PRICE2)!=pitch_cena[1] || ObjectGet(nameObj,OBJPROP_TIME3)!=pitch_time[2] || ObjectGet(nameObj,OBJPROP_PRICE3)!=pitch_cena[2] || ExtCustomStaticAP) {mAPs=true; RZs=-1;} } ObjectDelete(nameObj); } else if (mAP) {mAPs=true; RZs=-1;} if (AutoTestRedZone && !ExtCustomStaticAP && !ExtPitchforkCandle) { if (afr[mPitch[2]-1]>0) { pitch_timeRZ[0]=afr[mPitch[0]-1]; pitch_timeRZ[1]=afr[mPitch[1]-1]; pitch_timeRZ[2]=afr[mPitch[2]-1]; if (afrl[mPitch[0]-1]>0) { pitch_cenaRZ[0]=afrl[mPitch[0]-1]; pitch_cenaRZ[1]=afrh[mPitch[1]-1]; pitch_cenaRZ[2]=afrl[mPitch[2]-1]; } else { pitch_cenaRZ[0]=afrh[mPitch[0]-1]; pitch_cenaRZ[1]=afrl[mPitch[1]-1]; pitch_cenaRZ[2]=afrh[mPitch[2]-1]; } } } if (mOutRedZone && mAuto_s) { pitch_timeS[0]=pitch_time[0]; pitch_timeS[1]=pitch_time[1]; pitch_timeS[2]=pitch_time[2]; pitch_cenaS[0]=pitch_cena[0]; pitch_cenaS[1]=pitch_cena[1]; pitch_cenaS[2]=pitch_cena[2]; aOutRedZone[1]=false; _RZ("RZS", ExtRZStaticValue, ExtRZStaticColor, pitch_timeS, pitch_cenaS, ExtRedZoneStatic, 0, false); } ObjectCreate(nameObj,OBJ_PITCHFORK,0,pitch_time[0],pitch_cena[0],pitch_time[1],pitch_cena[1],pitch_time[2],pitch_cena[2]); ObjectSet(nameObj,OBJPROP_STYLE,ExtPitchforkStyle); ObjectSet(nameObj,OBJPROP_WIDTH,ExtPitchforkWidth); ObjectSet(nameObj,OBJPROP_COLOR,ExtLinePitchforkS); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); if (ExtMasterPitchfork==2) { nameObjAPMaster="Master_"+nameObj; ObjectDelete(nameObjAPMaster); ObjectCreate(nameObjAPMaster,OBJ_PITCHFORK,0,pitch_time[0],pitch_cena[0],pitch_time[1],pitch_cena[1],pitch_time[2],pitch_cena[2]); ObjectSet(nameObjAPMaster,OBJPROP_STYLE,ExtPitchforkStyle); ObjectSet(nameObjAPMaster,OBJPROP_WIDTH,ExtPitchforkWidth); ObjectSet(nameObjAPMaster,OBJPROP_COLOR,CLR_NONE); ObjectSet(nameObjAPMaster,OBJPROP_BACK,true); } if (ExtFiboFanMedianaStaticColor>0) { coordinaty_mediany_AP(pitch_cena[0], pitch_cena[1], pitch_cena[2], pitch_time[0], pitch_time[1], pitch_time[2], tb1, b1); nameObj="FanMedianaStatic" + ExtComplekt+"_"; /* if (ExtSave) { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } */ ObjectDelete(nameObj); ObjectSet(nameObj,OBJPROP_COLOR,CLR_NONE); ObjectCreate(nameObj,OBJ_FIBOFAN,0,pitch_time[0],pitch_cena[0],tb1,b1); ObjectSet(nameObj,OBJPROP_LEVELSTYLE,STYLE_DASH); ObjectSet(nameObj,OBJPROP_LEVELCOLOR,ExtFiboFanMedianaStaticColor); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); if (ExtFiboType==0) { screenFibo_st(); } else if (ExtFiboType==1) { screenFibo_Pesavento(); } else if (ExtFiboType==2) { ObjectSet(nameObj,OBJPROP_FIBOLEVELS,Sizefi); for (i=0;i0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } ObjectDelete(nameObj); if (pitch_cena[1]>pitch_cena[2]) { ObjectCreate(nameObj,OBJ_TREND,0,pitch_time[0],pitch_cena[0],pitch_time[1],pitch_cena[1]); } else { ObjectCreate(nameObj,OBJ_TREND,0,pitch_time[0],pitch_cena[0],pitch_time[2],pitch_cena[2]); } ObjectSet(nameObj,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(nameObj,OBJPROP_COLOR,ExtLinePitchforkS); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); } if (ExtPivotZoneStaticColor>0 && ExtPitchforkStatic<4) PivotZone(pitch_time, pitch_cena, ExtPivotZoneStaticColor, "PivotZoneS"); if (ExtLTL) { nameObj=nameLTL; if (ExtSave) { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } ObjectDelete(nameObj); if (pitch_cena[1]>pitch_cena[2]) { ObjectCreate(nameObj,OBJ_TREND,0,pitch_time[0],pitch_cena[0],pitch_time[2],pitch_cena[2]); } else { ObjectCreate(nameObj,OBJ_TREND,0,pitch_time[0],pitch_cena[0],pitch_time[1],pitch_cena[1]); } ObjectSet(nameObj,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(nameObj,OBJPROP_COLOR,ExtLinePitchforkS); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); } //------------------------------------------------------- if (ExtUWL || ExtLWL) { n1=iBarShift(Symbol(),Period(),pitch_time[0])-(iBarShift(Symbol(),Period(),pitch_time[1])+iBarShift(Symbol(),Period(),pitch_time[2]))/2.0; ta1=pitch_time[0]; tb1=Time[0]; a1=pitch_cena[0]; tangens=(pitch_cena[0]-(pitch_cena[1]+pitch_cena[2])/2.0)/n1; b1=pitch_cena[0]-tangens*iBarShift(Symbol(),Period(),pitch_time[0]); ML_RL400(tangens, pitch_cena, pitch_time, tb1, b1, false); if (pitch_cena[1]>pitch_cena[2]) { if (ExtUWL) { ch1=pitch_cena[1]; tch1=pitch_time[1]; } if (ExtLWL) { cl1=pitch_cena[2]; tcl1=pitch_time[2]; } } else { if (ExtUWL) { ch1=pitch_cena[2]; tch1=pitch_time[2]; } if (ExtLWL) { cl1=pitch_cena[1]; tcl1=pitch_time[1]; } } if (ExtUWL) { nameObj=nameUWL; if (ExtSave) { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_FIBOCHANNEL,0,ta1,a1,tb1,b1,tch1,ch1); ObjectSet(nameObj,OBJPROP_LEVELCOLOR,ExtLinePitchforkS); ObjectSet(nameObj,OBJPROP_LEVELSTYLE,STYLE_DOT); ObjectSet(nameObj,OBJPROP_RAY,ExtLongWL); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); ObjectSet(nameObj,OBJPROP_COLOR,CLR_NONE); UWL_LWL (ExtVisibleUWL,nameObj,"UWL ",ExtFiboFreeUWL); } if (ExtLWL) { nameObj=nameLWL; if (ExtSave) { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_FIBOCHANNEL,0,ta1,a1,tb1,b1,tcl1,cl1); ObjectSet(nameObj,OBJPROP_LEVELCOLOR,ExtLinePitchforkS); ObjectSet(nameObj,OBJPROP_LEVELSTYLE,STYLE_DOT); ObjectSet(nameObj,OBJPROP_RAY,ExtLongWL); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); ObjectSet(nameObj,OBJPROP_COLOR,CLR_NONE); UWL_LWL (ExtVisibleLWL,nameObj,"LWL ",ExtFiboFreeLWL); } } //------------------------------------------------------- if (ExtPitchforkStaticColor>0) { n1=iBarShift(Symbol(),Period(),pitch_time[0])-(iBarShift(Symbol(),Period(),pitch_time[1])+iBarShift(Symbol(),Period(),pitch_time[2]))/2.0; TLine=pitch_cena[1]-iBarShift(Symbol(),Period(),pitch_time[1])*(pitch_cena[0]-(pitch_cena[2]+pitch_cena[1])/2)/n1; nameObj="CL" + ExtComplekt+"_"; /* if (ExtSave) { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } */ ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_CHANNEL,0,pitch_time[1],pitch_cena[1],Time[0],TLine,pitch_time[2],pitch_cena[2]); ObjectSet(nameObj, OBJPROP_BACK, true); ObjectSet(nameObj, OBJPROP_COLOR, ExtPitchforkStaticColor); } //------------------------------------------------------- if (ExtISLChannelStaticColor>0) { channelISL(pitch_cena[0], pitch_cena[1], pitch_cena[2], pitch_time[0], pitch_time[1], pitch_time[2], 0); } //------------------------------------------------------- if (ExtISLStatic) { _ISL("ISL_S", pitch_time, pitch_cena, ExtLinePitchforkS, ExtISLStyleStatic, 0, ""); } //------------------------------------------------------- if (ExtRLStatic) { _RL("RLineS", pitch_time, pitch_cena, ExtLinePitchforkS, ExtRLStyleStatic, ExtVisibleRLStatic, 0, ""); } //------------------------------------------------------- if (ExtRedZoneStatic>0) { _RZ("RZS", ExtRZStaticValue, ExtRZStaticColor, pitch_time, pitch_cena, ExtRedZoneStatic, 0, true); } //-------------------------------------------------------- // Временные зоны Фибо в составе статических вил Эндрюса fiboTimeX (); if (ExtCustomStaticAP) { if (mAPs || mAPd) { metkaAP(true); // Создание меток в вилах Эндрюса } i_APm=0; for (i=ObjectsTotal()-1; i>=0; i--) { txt=ObjectName(i); // подсчет колическтва вил с меткой APm if (ObjectType(txt)==OBJ_PITCHFORK) { if (StringFind(txt,"_APm",0)>0) i_APm++; } } ObjectDelete(nameCheckLabel_hidden); if (i_APm>1) { count_APm=StrToInteger(StringSubstr(ObjectDescription(nameCheckLabel_hidden),2)); if (count_APm<1) txt=""+i_APm+"_"+i_APm; else txt=""+i_APm+"_"+count_APm; ObjectCreate(nameCheckLabel_hidden,OBJ_TEXT,0,0,0); ObjectSetText(nameCheckLabel_hidden,txt); ObjectSet(nameCheckLabel_hidden, OBJPROP_COLOR, CLR_NONE); ObjectSet(nameCheckLabel_hidden, OBJPROP_BACK, true); } } } //-------------------------------------------------------- // Вывод вил Эндрюса статических. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод ценовых меток (metkaAP) в вилах Эндрюса. // Подготовка. Выбор вил. Начало. //-------------------------------------------------------- void metkaAP(bool create) { color mclr; string prefics=""; double cena1, cena2; int i; if (create) // создание меток { if (mSelectVariantsPRZ==0) { for (i=0;i<2;i++) { if (i==0 && mAPs) { if (_ExtPitchforkStatic==0) continue; if (!mStart) { if (mOutRedZone && !aOutRedZone[1] && mAuto_s) continue; } _metkaAP(arrm_s, i, mAuto_s, 0); } else if (i==1 && mAPd) { if (ExtPitchforkDinamic==0) continue; if (!mStart) { if (mOutRedZone && !aOutRedZone[0] && mAuto_d) continue; } _metkaAP(arrm_d, i, mAuto_d, 0); } } } else if(mSelectVariantsPRZ>0) { if (mTypeBasiclAP==0) { _metkaAP(arrm_s, 0, mAuto_s, 1); if (((mOutRedZone && aOutRedZone[0] && mAuto_d) || !mOutRedZone || mStart) && _ExtPitchforkStatic>0) { _metkaAP(arrm_d, 1, mAuto_d, 0); } } else if (mTypeBasiclAP==1) { _metkaAP(arrm_d, 1, mAuto_d, 1); if (((mOutRedZone && aOutRedZone[1] && mAuto_s) || !mOutRedZone || mStart) && ExtPitchforkDinamic>0) { _metkaAP(arrm_s, 0, mAuto_s, 0); } } } mAPs=false; mAPd=false; } else // вывод дополнительных меток при выходе цены рынка за крайние метки на текущем баре { if (mSelectVariantsPRZ==0) { if (mAuto_s) { if (((mOutRedZone && aOutRedZone[1] && mAuto_s) || !mOutRedZone) && _ExtPitchforkStatic>0) new_metkaAP(arrm_s, 0, mAuto_s); } if (mAuto_d) { if (((mOutRedZone && aOutRedZone[0] && mAuto_d) || !mOutRedZone) && ExtPitchforkDinamic>0) new_metkaAP(arrm_d, 1, mAuto_d); } } else if(mSelectVariantsPRZ>0) { if (mTypeBasiclAP==0) { if (mAuto_d) { if (((mOutRedZone && aOutRedZone[0] && mAuto_d) || !mOutRedZone) && ExtPitchforkDinamic>0) new_metkaAP(arrm_d, 1, mAuto_d); } } else if (mTypeBasiclAP==1) { if (mAuto_s) { if (((mOutRedZone && aOutRedZone[1] && mAuto_s) || !mOutRedZone) && _ExtPitchforkStatic>0) new_metkaAP(arrm_s, 0, mAuto_s); } } } } // задание цвета меток prefics="m#"+ExtComplekt+"_"; for (i=ObjectsTotal()-1;i>=0;i--) { nameObj=ObjectName(i); if (StringFind(nameObj,prefics)>-1) { if (ObjectType(nameObj)==OBJ_ARROW) { cena1=ObjectGet(nameObj,OBJPROP_PRICE1); if (iClose(NULL,Period(),0)cena1) mclr=mColorDN; else mclr=mColor; } else if (ObjectType(nameObj)==OBJ_RECTANGLE || ObjectType(nameObj)==OBJ_TREND) { cena1=ObjectGet(nameObj,OBJPROP_PRICE1); cena2=ObjectGet(nameObj,OBJPROP_PRICE2); if (iClose(NULL,Period(),0)cena1 && iClose(NULL,Period(),0)>cena2) mclr=mColorRectangleDN; else mclr=mColor; } if (!mPivotPointsChangeColor) { if (StringFind(nameObj,prefics+"s"+" point")>-1 || StringFind(nameObj,prefics+"d"+" point")>-1) continue; } ObjectSet(nameObj,OBJPROP_COLOR,mclr); } } WindowRedraw(); } //-------------------------------------------------------- // Вывод ценовых меток (metkaAP) в вилах Эндрюса. // Подготовка. Выбор вил. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод дополнительный ценовых меток в вилах Эндрюса. // Начало. //-------------------------------------------------------- void new_metkaAP(double& arrm[][], int sd, bool mAuto) { int i_1, i_2, i_x, ii, n, j, a1, b1, c1; double tangensAP, tangensUTL, tangensLTL; double pitch_cena[]={0,0,0}; datetime pitch_time[]={0,0,0}; string prefics=""; string wl="", tmp="", file="", nameObj=""; int handle=-1; bool writetofile=false; string _nameUWL="", _nameLWL="", _nameUTL="", _nameLTL=""; bool exitSL = false; // флаг для работы параметра mExitFSL_SSL if (mAuto) exitSL=mExitFSL_SSL || Close[0]>=aexitFSL_SSL[1] || Close[0]<=aexitFSL_SSL[0]; else exitSL=true; if (sd==0) file="\\Price Label S\\"; if (sd==1) file="\\Price Label D\\"; if (sd==0) { _nameUWL=nameUWL; _nameLWL=nameLWL; _nameUTL=nameUTL; _nameLTL=nameLTL; } else { _nameUWL=nameUWLd; _nameLWL=nameLWLd; _nameUTL=nameUTLd; _nameLTL=nameLTLd; } if (anum_cena[sd][0]>0 && anum_cena[sd][1]=iClose(NULL,Period(),0)) // минимум { i_1=anum_cena[sd][0]-1; i_x=i_1; if (arrm[i_1][0]>0) { anum_cena[sd][0]=i_1; } else return; } else if (arrm[anum_cena[sd][1]][0]<=iClose(NULL,Period(),0)) // максимум { i_2=anum_cena[sd][1]+1; i_x=i_2; if (arrm[i_2][0]>0) { anum_cena[sd][1]=i_2; } else return; } else return; ii=arrm[i_x][5]; if (!exitSL && ii>10) return; // выводим дополнительную метку if (sd==0) { if (ExtCustomStaticAP) nameObj="pitchforkS" + ExtComplekt+"_APm_"; else nameObj="pitchforkS" + ExtComplekt+"_"; prefics="m#"+ExtComplekt+"_"+"s "; //основа префикса } else if (sd==1) { nameObj="pitchforkD" + ExtComplekt+"_"; prefics="m#"+ExtComplekt+"_"+"d "; } // определяем время и цену точек, к которым привязаны (базовые) вилы Эндрюса pitch_time[0]=ObjectGet(nameObj,OBJPROP_TIME1); pitch_cena[0]=ObjectGet(nameObj,OBJPROP_PRICE1); pitch_time[1]=ObjectGet(nameObj,OBJPROP_TIME2); pitch_cena[1]=ObjectGet(nameObj,OBJPROP_PRICE2); pitch_time[2]=ObjectGet(nameObj,OBJPROP_TIME3); pitch_cena[2]=ObjectGet(nameObj,OBJPROP_PRICE3); // определяем номера баров, к которым привязаны вилы Эндрюса a1=iBarShift(NULL,Period(),pitch_time[0],false); b1=iBarShift(NULL,Period(),pitch_time[1],false); c1=iBarShift(NULL,Period(),pitch_time[2],false); tangensAP=atg[sd][0]; atg[sd][3]=tangensUTL; atg[sd][4]=tangensLTL; // открываем файл для записи меток if (mWriteToFile) { // if (mPeriod0) { tmp="_0_"; } else { if (SlavePitchfork) tmp="_"+StringSubstr(""+ExtComplekt,StringLen(""+ExtComplekt)-1)+"_"; else { j=ObjectsTotal(); for (n=0; n=0) { tmp="_"+StringSubstr(""+ExtComplekt,StringLen(""+ExtComplekt)-1)+"_"; break; } } } } } writetofile=true; if (ExtIndicator==6 && GrossPeriod==Period()) file=file+Symbol()+"_"+GrossPeriod+tmp+ExtComplekt+".csv"; else file=file+Symbol()+"_"+Period()+tmp+ExtComplekt+".csv"; handle=FileOpen(file,FILE_CSV | FILE_READ | FILE_WRITE,';'); } } if (ii==11 && mAuto && ObjectFind(_nameUTL)<0) visibleTL(pitch_cena, pitch_time, 11, sd);// UTL if (ii==12 && mAuto && ObjectFind(_nameLTL)<0) visibleTL(pitch_cena, pitch_time, 12, sd);// LTL if (ii>12) wl=DoubleToStr(arrm[i_x][6],3); else wl=""; if (ii==13 && mAuto && ObjectFind(_nameUWL)<0) // UWL { if (ObjectFind(_nameUTL)<0) visibleTL(pitch_cena, pitch_time, 11, sd);// UTL if (sd==0) { visibleWL(pitch_cena, pitch_time, pitch_cena[0], pitch_time[0], pitch_cena[0]-tangensAP*a1, iTime(Symbol(),Period(),0), 13, sd, "", tangensAP, ExtLinePitchforkS, true); } else { visibleWL(pitch_cena, pitch_time, pitch_cena[0], pitch_time[0], pitch_cena[0]-tangensAP*a1, iTime(Symbol(),Period(),0), 13, sd, "", tangensAP, ExtLinePitchforkD, true); } } if (ii==14 && mAuto && ObjectFind(nameLWL)<0) // LWL { if (ObjectFind(_nameLTL)<0) visibleTL(pitch_cena, pitch_time, 12, sd);// LTL if (sd==0) { visibleWL(pitch_cena, pitch_time, pitch_cena[0], pitch_time[0], pitch_cena[0]-tangensAP*a1, iTime(Symbol(),Period(),0), 14, sd, "", tangensAP, ExtLinePitchforkS, true); } else { visibleWL(pitch_cena, pitch_time, pitch_cena[0], pitch_time[0], pitch_cena[0]-tangensAP*a1, iTime(Symbol(),Period(),0), 14, sd, "", tangensAP, ExtLinePitchforkD, true); } } if (aMetki[sd][ii]==1 || aMetki[sd][ii]==0) { nameObj=prefics+atextm[ii]+wl+" x 0-bar"; ObjectCreate(nameObj,OBJ_ARROW,0,iTime(NULL,Period(),0),arrm[i_x][0]); ObjectSet(nameObj,OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectSet(nameObj,OBJPROP_BACK,mBack); if (writetofile) { FileSeek(handle, 0, SEEK_END); FileWrite(handle, 0, ii, aMetki[sd][ii], 0, DoubleToStr(arrm[i_x][0], Digits), 0, DoubleToStr(iClose(NULL,Period(),0), Digits), sd, DoubleToStr(pitch_cena[0], Digits), DoubleToStr(pitch_cena[1], Digits), DoubleToStr(pitch_cena[2], Digits)); } } else if (aMetki[sd][ii]>1 && arrm[i_x][4]>0) { if (aMetki[sd][ii]!=3 && aMetki[sd][ii]!=6 && aMetki[sd][ii]!=8) { nameObj=prefics+atextm[ii]+wl+" left 0-bar"; ObjectCreate(nameObj,OBJ_ARROW,0,arrm[i_x][1],arrm[i_x][2]); ObjectSet(nameObj,OBJPROP_ARROWCODE,SYMBOL_LEFTPRICE); ObjectSet(nameObj,OBJPROP_BACK,mBack); nameObj=prefics+atextm[ii]+wl+" right 0-bar"; ObjectCreate(nameObj,OBJ_ARROW,0,arrm[i_x][3],arrm[i_x][4]); ObjectSet(nameObj,OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectSet(nameObj,OBJPROP_BACK,mBack); } if (aMetki[sd][ii]>7) { nameObj=prefics+atextm[ii]+wl+" line Zones"; ObjectCreate(nameObj,OBJ_TREND,0,arrm[i_x][1],arrm[i_x][2],arrm[i_x][3],arrm[i_x][4]); ObjectSet(nameObj,OBJPROP_WIDTH,mLineZonesWidth); ObjectSet(nameObj,OBJPROP_RAY,false); ObjectSet(nameObj,OBJPROP_BACK,mBackZones); } else if (aMetki[sd][ii]>2 && aMetki[sd][ii]!=5) { if (aMetki[sd][ii]>5) nameObj=prefics+"Shift "+atextm[ii]+wl+" Zones"; else nameObj=prefics+atextm[ii]+wl+" Zones"; ObjectCreate(nameObj,OBJ_RECTANGLE,0,arrm[i_x][1],arrm[i_x][2],arrm[i_x][3],arrm[i_x][4]); ObjectSet(nameObj,OBJPROP_BACK,mBackZones); } if (writetofile) { FileSeek(handle, 0, SEEK_END); FileWrite(handle, 0, ii, aMetki[sd][ii], DoubleToStr(arrm[i_x][2], Digits), 0, DoubleToStr(arrm[i_x][4], Digits), DoubleToStr(iClose(NULL,Period(),0), Digits), sd, DoubleToStr(pitch_cena[0], Digits), DoubleToStr(pitch_cena[1], Digits), DoubleToStr(pitch_cena[2], Digits)); } } // закрываем файл для записи меток if (mWriteToFile) { if (FileSize(handle)<1) {FileClose(handle); FileDelete(file);} else FileClose(handle); } } } //-------------------------------------------------------- // Вывод дополнительный ценовых меток в вилах Эндрюса. // Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод ценовых меток (metkaAP) в вилах Эндрюса. Начало. //-------------------------------------------------------- /* //======================================================== Вывод информации в файл extern int mPeriodWriteToFile = 240; extern bool mWriteToFile = true; Стандарт вывода информации: Название файла eurusd_1440_0.csv - в файле содержится информация, полученная с таймфрейма 1440 минут (D1) для индикатора ExtComplekt=0 Внутри файла информация представлена в виде: Режим вывода потенциальных целевых зон; Название метки; режим вывода метки; цена левой метки; цена метки на нулевом баре; цена правой метки; значание цены закрытия нулевого бара в момент снятия информацции; наименование вил (статические или динамические); цена первой точки привязки вил; цена второй точки привязки вил; цена третьей точки привязки вил; Название метки: 1 - mSSL; 2 – mSLM382; 3 - m1_2Mediana; 4 – mSLM618; 5 - mISL382; 6 - mMediana; 7 - mISL618; 8 - mFSL; 9 - mFSLShiffLines; 10 - mCriticalPoints - это значение помещается в позиции: цена левой метки; и цена правой метки; 11 - mUTL 12 - mLTL 13 – mUWL 14 - mLWL Номера таймфреймов - для записи в название файла: m1 - 1 m5 - 5 m15 - 15 m30 - 30 h1 - 60 h4 - 240 d1 - 1440 w1 - 10080 mn - 43200 и так далее. наименование вил (статические или динамические): статические - 0 динамические - 1 //======================================================== Определение типа выводимых меток mSelectVariantsPRZ = 0 - выводятся Метки "внутри" текущих (одиночных) вил > 0 - выводятся Метки при пересечении текущих (базовых) вил с внешними вилами = 1 - метки пересечения SSL = 2 - метки пересечения медианы = 3 - метки пересечения FSL = 4 - зона пересечения канала медианы = 5 - зона пересечения канала вил = 6 - метки пересечения 1/2 медианы = 7 - зона пересечения канала 1/2 медианы = 8 - зона пересечения канала линий Шиффа = 9 - метки пересечения UTL mTypeBasiclAP - выбор типа базовых вил = 0 - статические вилы из текущего комплекта = 1 - динамические вилы из текущего комплекта mTypeExternalAP - выбор типа внешних вил = 0 - динамические или статические вилы текущего комплекта (противоположные базовым) = 1 - сохраненные вилы из текущего комплекта = 2 - любые вилы из текущего комплекта = 3 - статические вилы из других комплектов ZUP с текущего графика = 4 - динамические вилы из других комплектов ZUP с текущего графика = 5 - любые вилы из других комплектов ZUP с текущего графика = 6 - вилы с текущего графика, выведенные вручную, не с помощью ZUP = 7 - любые внешние вилы mExternalHandAP - задание прорисовки инструментов вил, выведенных вручную, при задании вывода меток при пересечении с данными вилами = 0 - вывод меток только при пересечении с медианой и SSL/FSL данных вил = 1 - прорисовка линий инструментов вил, с которыми задается вывод меток = 2 - вывод только меток без прорисовки самих инструментов внешних вил Система наименований меток Метки "внутри" текущих (одиночных) вил prefics="m#"+ExtComplekt+"_"+"s "; prefics="m#"+ExtComplekt+"_"+"d "; метки у точек привязки вил Эндрюса "point 1 AP" "point 2 AP" "point 3 AP" метки при пересечении 50%-й медианы с ISL 38.2 и начальной сигнальной линией "50% Mediana x SSL" "50% Mediana x ISL 38.2" метки при пересечении нулевого бара 50%-й медианой вил Эндрюса "50% Mediana x 0-bar" "50% Mediana left 0-bar" "50% Mediana right 0-bar" метки на SLM382 "SLM 38.2 x 0-bar" "SLM 38.2 left 0-bar" "SLM 38.2 right 0-bar" "Shift SLM 38.2 Zones" "SLM 38.2 Zones" метки на SLM618 "SLM 61.8 x 0-bar" "SLM 61.8 left 0-bar" "SLM 61.8 right 0-bar" "Shift SLM 61.8 Zones" "SLM 61.8 Zones" метки при пересечении нулевого бара линией SSL "SSL x 0-bar" "SSL left 0-bar" "SSL right 0-bar" "Shift SSL Zones" "SSL Zones" метки при пересечении нулевого бара линией FSL "FSL x 0-bar" "FSL left 0-bar" "FSL right 0-bar" "Shift FSL Zones" "FSL Zones" метки при пересечении нулевого бара медианой вил Эндрюса "Mediana x 0-bar" "Mediana left 0-bar" "Mediana right 0-bar" "Shift Mediana Zones" "Mediana Zones" метки при пересечении нулевого бара линией ISL 38.2 "ISL 38.2 x 0-bar" "ISL 38.2 left 0-bar" "ISL 38.2 right 0-bar" "Shift ISL 38.2 Zones" "ISL 38.2 Zones" метки при пересечении нулевого бара линией ISL 61.8 "ISL 61.8 x 0-bar" "ISL 61.8 left 0-bar" "ISL 61.8 right 0-bar" "Shift ISL 61.8 Zones" "ISL 61.8 Zones" метки при пересечении нулевого бара предупреждающими линиями LWL и/или UWL статичеких вил Эндрюса ObjectGetFiboDescription(nameObj,k), где nameObj=nameLWL; ObjectGetFiboDescription(nameObj,k)+" left 0-bar" ObjectGetFiboDescription(nameObj,k)+" right 0-bar" ObjectGetFiboDescription(nameObj,k)+" Shift Zones" ObjectGetFiboDescription(nameObj,k)+" Zones" ObjectGetFiboDescription(nameObj,k), где nameObj=nameUWL; ObjectGetFiboDescription(nameObj,k)+" left 0-bar" ObjectGetFiboDescription(nameObj,k)+" right 0-bar" ObjectGetFiboDescription(nameObj,k)+" Shift Zones" ObjectGetFiboDescription(nameObj,k)+" Zones" метки при пересечении нулевого бара контрольными линиями LTL и/или UTL статичеких вил Эндрюса "LTL x 0-bar" "LTL left 0-bar" "LTL right 0-bar" "Shift LTL Zones" "LTL Zones" "UTL x 0-bar" "UTL left 0-bar" "UTL right 0-bar" "Shift UTL Zones" "UTL Zones" Метки между текущими вилами и другими вилами, присутствующими на графике Этих меток много. Имена составные. Перечислить имена сложно. Они генерируются автоматически. -- в префикс добавляется +"_"+"s ""+ExtComplekt - для статических внешних вил +"_"+"d ""+ExtComplekt - для динамических внешних вил +"_"+"s ""+ExtComplekt - для сохраненных внешних вил - + save prefics="m#"+ExtComplekt+"_"+"s"; prefics="m#"+ExtComplekt+"_"+"d"; aMetki[sd][0]=0; aMetki[sd][1]=mSSL; aMetki[sd][2]=mSLM; aMetki[sd][3]=m1_2Mediana; aMetki[sd][4]=mSLM; aMetki[sd][5]=mISL382; aMetki[sd][6]=mMediana; aMetki[sd][7]=mISL618; aMetki[sd][8]=mFSL; aMetki[sd][9]=mFSLShiffLines; aMetki[sd][10]=mCriticalPoints; aMetki[sd][11]=mUTL; aMetki[sd][12]=mLTL; aMetki[sd][13]=mUWL; aMetki[sd][14]=mLWL; */ void _metkaAP(double& arrm[][], int sd, bool mAuto, int VariantsPRZ) // sd - 0 - обрабатываются статические вилы, 1 - обрабатываются динамические вилы { int pitch_time[]={0,0,0}; double pitch_cena[]={0,0,0}; double aUWL[], aLWL[]; int i,j,j1,k,m,n, a1=0,b1=0,c1=0,m12, x=0, y=0, z=0, symb; string prefics="", str05median="", strSLM382="", strSLM618="", nameFibo=""; string arrName[]; // массив для хранения наименований вил Эндрюса double tangensAP=0, tangensRL=0, tangens05median=0, wr, tangensUTL=0, tangensLTL=0, arrRL[], tangens=0; double cena1, cena2, cenaRL, X, Y, W, cenaUWL, cenaLWL, h=0, delta, rl1, rl2, hAP, hAP1_2mediana, bazaAP, ret, retISL, xISL=0, xret=0; // m382=2-phi, m618=phi-1; datetime time1, time2; bool updn; // переменные для формирования файла CSV string file=""; string tmp="", str1="", str2="", str3="", strUWL="", strLWL=""; int handle=-1; bool writetofile=false; string _nameUWL="", _nameLWL="", _nameUTL="", _nameLTL=""; bool exitSL = false; // флаг для работы параметра mExitFSL_SSL if (sd==0) { _nameUWL=nameUWL; _nameLWL=nameLWL; _nameUTL=nameUTL; _nameLTL=nameLTL; } else { _nameUWL=nameUWLd; _nameLWL=nameLWLd; _nameUTL=nameUTLd; _nameLTL=nameLTLd; } nameObj=""; if (sd==0) { if (ExtCustomStaticAP) nameObj="pitchforkS" + ExtComplekt+"_APm_"; else nameObj="pitchforkS" + ExtComplekt+"_"; prefics="m#"+ExtComplekt+"_"+"s "; //основа префикса str05median="pmedianaS"; } else if (sd==1) { nameObj="pitchforkD" + ExtComplekt+"_"; prefics="m#"+ExtComplekt+"_"+"d "; str05median="pmedianaD"; } delete_objects6(sd); // открываем файл для записи меток if (sd==0) file="\\Price Label S\\"; if (sd==1) file="\\Price Label D\\"; if (mWriteToFile) { if (mPeriod0) { tmp="_0_"; } else { if (SlavePitchfork) tmp="_"+StringSubstr(""+ExtComplekt,StringLen(""+ExtComplekt)-1)+"_"; else { j=ObjectsTotal(); for (n=0; n=0) { SlavePitchfork = true; tmp="_"+StringSubstr(""+ExtComplekt,StringLen(""+ExtComplekt)-1)+"_"; break; } } } } } writetofile=true; if (ExtIndicator==6 && GrossPeriod==Period()) file=file+Symbol()+"_"+GrossPeriod+tmp+ExtComplekt+".csv"; else file=file+Symbol()+"_"+Period()+tmp+ExtComplekt+".csv"; handle=FileOpen(file,FILE_CSV|FILE_WRITE,';'); } } // определяем время и цену точек, к которым привязаны (базовые) вилы Эндрюса pitch_time[0]=ObjectGet(nameObj,OBJPROP_TIME1); pitch_cena[0]=ObjectGet(nameObj,OBJPROP_PRICE1); pitch_time[1]=ObjectGet(nameObj,OBJPROP_TIME2); pitch_cena[1]=ObjectGet(nameObj,OBJPROP_PRICE2); pitch_time[2]=ObjectGet(nameObj,OBJPROP_TIME3); pitch_cena[2]=ObjectGet(nameObj,OBJPROP_PRICE3); // определяем номера баров, к которым привязаны (базовые) вилы Эндрюса a1=iBarShift(NULL,Period(),pitch_time[0],false); b1=iBarShift(NULL,Period(),pitch_time[1],false); c1=iBarShift(NULL,Period(),pitch_time[2],false); // допускаем, что не используются вилы, у которых 2 и 3 точки привязки находятся на одном баре, т.е. (b!=с). if (b1-c1==0 || a1==0) { if (mWriteToFile) { if (FileSize(handle)<1) {FileClose(handle); FileDelete(file);} else FileClose(handle); } return; } // обновляем флаги if (!(aPointAP[sd][0]==pitch_time[0] && aPointAP[sd][1]==pitch_cena[0] && aPointAP[sd][2]==pitch_time[1] && aPointAP[sd][3]==pitch_cena[1] && aPointAP[sd][4]==pitch_time[2] && aPointAP[sd][5]==pitch_cena[2])) { aPointAP[sd][0]=pitch_time[0]; aPointAP[sd][1]=pitch_cena[0]; aPointAP[sd][2]=pitch_time[1]; aPointAP[sd][3]=pitch_cena[1]; aPointAP[sd][4]=pitch_time[2]; aPointAP[sd][5]=pitch_cena[2]; aPointAP[sd][6]=0; aPointAP[sd][7]=0; // if (mAuto) z=1; // добаляем строку для mCriticalPoints в автоматическом режиме вывода меток if (VariantsPRZ==0) { if (sd==0) { if (ExtUWL) x=ObjectGet(_nameUWL,OBJPROP_FIBOLEVELS); if (ExtLWL) y=ObjectGet(_nameLWL,OBJPROP_FIBOLEVELS); } if (ExtFiboFreePitchfork || ExtFiboType==2) { strUWL=ExtFiboFreeUWL; strLWL=ExtFiboFreeLWL; } else { strUWL="0.146,0.236,0.382,0.5,0.618,0.764,0.854,1,1.618,2.0,2.618,4.236"; strLWL=strUWL; } if (mAuto && (x==0 || y==0)) { if (VariantsPRZ==0 && sd==0) { if (!ExtUWL) ObjectDelete(_nameUWL); if (!ExtLWL) ObjectDelete(_nameLWL); if (!ExtUTL) ObjectDelete(_nameUTL); if (!ExtLTL) ObjectDelete(_nameLTL); } if (VariantsPRZ==0 && sd==1) { ObjectDelete(_nameUWL); ObjectDelete(_nameLWL); ObjectDelete(_nameUTL); ObjectDelete(_nameLTL); } if (ExtFiboFreePitchfork || ExtFiboType==2) { x=quantityFibo(ExtFiboFreeUWL)+1; y=quantityFibo(ExtFiboFreeLWL)+1; } else { x=12; y=x; } } if (ArrayRange(arrm,0)!=11+x+y+z) ArrayResize(arrm,11+x+y+z); ArrayResize(aUWL,x); for (i=0;i=0) strUWL=StringSubstr(strUWL,k+1); } ArrayResize(aLWL,y); for (i=0;i=0) strLWL=StringSubstr(strLWL,k+1); } } } if (VariantsPRZ==0 && !mSaveWL_TL) { if (mAuto && sd==0) { if (!ExtUWL) ObjectDelete(_nameUWL); if (!ExtLWL) ObjectDelete(_nameLWL); if (!ExtUTL) ObjectDelete(_nameUTL); if (!ExtLTL) ObjectDelete(_nameLTL); } if (VariantsPRZ==0 && sd==1) { ObjectDelete(_nameUWL); ObjectDelete(_nameLWL); ObjectDelete(_nameUTL); ObjectDelete(_nameLTL); } } ArrayInitialize(arrm,0); // определяем тангенсы (наклон линий) и базы if ((a1-(c1+b1)/2.0)==0) return; if (a1-c1==0) return; if (aPointAP[sd][7]==0) { // тангенс угла наклона вил Эндрюса tangensAP=((pitch_cena[2]+pitch_cena[1])/2-pitch_cena[0])/(a1-(c1+b1)/2.0); atg[sd][0]=tangensAP; // тангенс угла наклона линий реакции вил Эндрюса tangensRL=(pitch_cena[2]-pitch_cena[1])/(b1-c1); atg[sd][1]=tangensRL; // тангенс угла наклона 1/2 медианы вил Эндрюса if (ObjectFind(str05median+ExtComplekt+"_")>=0) { tangens05median=(pitch_cena[2]-pitch_cena[0])/(a1-c1); } atg[sd][2]=tangens05median; if (pitch_cena[1]>pitch_cena[2]) { tangensUTL=(pitch_cena[1]-pitch_cena[0])/(a1-b1); tangensLTL=(pitch_cena[2]-pitch_cena[0])/(a1-c1); } else { tangensUTL=(pitch_cena[2]-pitch_cena[0])/(a1-c1); tangensLTL=(pitch_cena[1]-pitch_cena[0])/(a1-b1); } atg[sd][3]=tangensUTL; atg[sd][4]=tangensLTL; // определяем расстояние по вертикали от SSL до FSL - база по высоте вил Эндрюса hAP=pitch_cena[1]+(b1-c1)*tangensAP-pitch_cena[2]; atg[sd][5]=hAP; // определяем расстояние по вертикали от SSL до FSL - база по высоте вил линий Шиффа hAP1_2mediana=pitch_cena[1]-(pitch_cena[2]-tangens05median*(b1-c1)); atg[sd][6]=hAP1_2mediana; // определяем базу для вычисления линий реакции RL - база по времени bazaAP=a1-(b1+c1)/2.0; atg[sd][7]=bazaAP; } else { // тангенс угла наклона вил Эндрюса tangensAP=atg[sd][0]; // тангенс угла наклона линий реакции вил Эндрюса tangensRL=atg[sd][1]; // тангенс угла наклона 1/2 медианы вил Эндрюса tangens05median=atg[sd][2]; tangensUTL=atg[sd][3]; tangensLTL=atg[sd][4]; hAP=atg[sd][5]; hAP1_2mediana=atg[sd][6]; bazaAP=atg[sd][7]; } // создание меток у точек привязки вил Эндрюса if (mPivotPoints) { nameObj=prefics+"point 1 AP"; ObjectCreate(nameObj,OBJ_ARROW,0,pitch_time[0],pitch_cena[0]); ObjectSet(nameObj,OBJPROP_ARROWCODE,SYMBOL_LEFTPRICE); ObjectSet(nameObj,OBJPROP_BACK,mBack); if (!mPivotPointsChangeColor) { if (pitch_cena[0]pitch_cena[2]) updn=true; else updn=false; if (updn) ObjectSet(nameObj,OBJPROP_COLOR, mColorDN); else ObjectSet(nameObj,OBJPROP_COLOR, mColorUP); } nameObj=prefics+"point 2 AP"; ObjectCreate(nameObj,OBJ_ARROW,0,pitch_time[1],pitch_cena[1]); ObjectSet(nameObj,OBJPROP_ARROWCODE,SYMBOL_LEFTPRICE); ObjectSet(nameObj,OBJPROP_BACK,mBack); if (!mPivotPointsChangeColor) { if (updn) ObjectSet(nameObj,OBJPROP_COLOR, mColorUP); else ObjectSet(nameObj,OBJPROP_COLOR, mColorDN); } nameObj=prefics+"point 3 AP"; ObjectCreate(nameObj,OBJ_ARROW,0,pitch_time[2],pitch_cena[2]); ObjectSet(nameObj,OBJPROP_ARROWCODE,SYMBOL_LEFTPRICE); ObjectSet(nameObj,OBJPROP_BACK,mBack); if (!mPivotPointsChangeColor) { if (updn) ObjectSet(nameObj,OBJPROP_COLOR, mColorDN); else ObjectSet(nameObj,OBJPROP_COLOR, mColorUP); } } if (VariantsPRZ==0) { if (sd==0) { RLtoArray (arrRL, "RLineS"+ ExtComplekt+"_", ExtFiboFreeRLStatic); strSLM382="SLM382S"; strSLM618="SLM618S"; } else if (sd==1) { RLtoArray (arrRL, "RLineD"+ ExtComplekt+"_", ExtFiboFreeRLDinamic); strSLM382="SLM382D"; strSLM618="SLM618D"; } j1=ArraySize(arrRL); // определяем пересечение ISL и RL в точке текущей цены рынка if (hAP==0 || bazaAP==0) return; xISL=(hAP-(pitch_cena[1]+tangensAP*b1-iClose(NULL,Period(),0)))/hAP; // условная линия ISL xret=(c1+(b1-c1)*xISL)/bazaAP; // условная линия RL //--- /* Структура массива arrm[][10] Первое измерение - стрОки 0 - mSSL 1 – mSLM382 2 - m1_2Mediana 3 – mSLM618 4 - mISL382 5 - mMediana 6 - mISL618 7 - mFSL 8 - mFSLShiffLines 9 - mUTL 10 - mLTL Второе измерение - столбцЫ 0 - цена квантовой метки на инструменте 1 - время левой точки зоны 2 - цена левой точки зоны 3 - время правой точки зоны 4 - цена правой точки зоны 5 - номер инструмента - соответствует номерам для вывода меток в файл 1 - mSSL; 2 – mSLM382; 3 - m1_2Mediana; 4 – mSLM618; 5 - mISL382; 6 - mMediana; 7 - mISL618; 8 - mFSL; 9 - mFSLShiffLines; //10 - mCriticalPoints - это значение помещается в позиции: цена левой метки; и цена правой метки; 11 - mUTL 12 - mLTL //13 – mUWL //14 - mLWL 6 - служебная информация */ //--- // создание меток i=0; // обнуляем счетчик строк массива arrm nameObj=str05median+ExtComplekt+"_"; if (ExtPitchforkStatic==2 || ExtPitchforkDinamic==2 || ObjectFind(nameObj)>=0) { // создание метки при пересечении 50%-й медианы с ISL 38.2 и начальной сигнальной линией // mCriticalPoints if (!mAuto && aMetki[sd][10]>0) { if (ObjectFind(nameObj)>=0) { // количество баров от третьей точки привязки вил Эндрюса до точки пересечения 50%-й медианы с начальной сигнальной линией if ((tangens05median-tangensAP)==0) return; X=(pitch_cena[2]-ObjectGetValueByShift(nameObj,c1))/(tangens05median-tangensAP); x=X; if (xpitch_cena[2]) { for (k=b1-1;k>=c1;k--) { delta=iHigh(NULL,Period(),k)-(pitch_cena[1]+(b1-k)*tangensRL); if (delta>h) h=delta; } } else { for (k=b1-1;k>=c1;k--) { delta=(pitch_cena[1]+(b1-k)*tangensRL)-iLow(NULL,Period(),k); if (delta>h) h=delta; } } if (sd==0) RZs=h; else RZd=h; } else { if (sd==0) h=RZs; else h=RZd; } nameObj=str05median+ExtComplekt+"_"; // количество баров от третьей точки привязки вил Эндрюса до точки пересечения 50%-й медианы с начальной сигнальной линией cena2=ObjectGetValueByShift(nameObj,b1); X=(pitch_cena[0]-cena2+(a1-b1)*tangensAP-(phi-1.5)*(pitch_cena[1]+(b1-c1)*tangensAP-pitch_cena[2]))/(tangens05median-tangensAP); x=X; cena2=cena2+X*tangens05median; if (x<=b1) {time2=iTime(NULL,Period(),b1-x); symb=SYMBOL_LEFTPRICE;} else {if (xh) { } else cena2=0; arrm[i][0]=cena1; arrm[i][1]=time1; arrm[i][2]=cena1; arrm[i][3]=time2; arrm[i][4]=cena2; arrm[i][5]=10; i++; if (cena2>0) arrm[i][0]=cena2; arrm[i][1]=time1; arrm[i][2]=cena1; arrm[i][3]=time2; arrm[i][4]=cena2; arrm[i][5]=10; arrm[i][6]=1; i++; } } // создание метки при пересечении нулевого бара 50%-й медианой вил Эндрюса // m1_2Mediana if (mAuto || aMetki[sd][3]>0) { nameObj=str05median+ExtComplekt+"_"; if (ObjectFind(nameObj)>=0) { cena1=ObjectGetValueByShift(nameObj,0); arrm[i][0]=cena1; arrm[i][5]=3; if (aMetki[sd][3]>1) //if ((m1_2Mediana>1 && sd==0) || (m1_2Mediana_d>1 && sd==1)) { retISL=(cena1 -(pitch_cena[2]+c1*tangensAP))/hAP; if (tangensAP==0) { ret=(c1+retISL*(b1-c1))/bazaAP; } else { if ((tangensAP*bazaAP)==0) return; ret=(cena1-pitch_cena[2]-retISL*(hAP-(b1-c1)*tangensAP))/(tangensAP*bazaAP); } if (!mAuto && aMetki[sd][3]>4 && xISL>retISL) ret=xret; rl1=0; rl2=0; for (m=0;m=ret) { rl2=arrRL[m]; break; } else { rl1=arrRL[m]; } } if (rl2>0) { nameObj=str05median+ExtComplekt+"_"; cenaRL=pitch_cena[1]+bazaAP*rl1*(tangensAP-tangensRL); wr=ObjectGetValueByShift(nameObj,b1); X=(cenaRL-wr)/(tangens05median-tangensRL); x=X; if (tangensAP!=0) cena1=wr+X*tangens05median; else cena1=cenaRL+X*tangensRL; if (x<=b1) time1=iTime(NULL,Period(),b1-x); else time1=iTime(NULL,Period(),0)+(x-b1)*Period()*60; cenaRL=pitch_cena[1]+bazaAP*rl2*(tangensAP-tangensRL); X=(cenaRL-wr)/(tangens05median-tangensRL); x=X; if (x0) { // создание меток на SLM382 nameObj=strSLM382+ExtComplekt+"_"; if (ObjectFind(nameObj)>=0) { cena1=ObjectGetValueByShift(nameObj,0); arrm[i][0]=cena1; arrm[i][5]=2; if (aMetki[sd][2]>1) { retISL=(cena1 -(pitch_cena[2]+c1*tangensAP))/hAP; if (tangensAP==0) ret=(c1+retISL*(b1-c1))/bazaAP; else { if ((tangensAP*bazaAP)==0) return; ret=(cena1-pitch_cena[2]-retISL*(hAP-(b1-c1)*tangensAP))/(tangensAP*bazaAP); } if (!mAuto && aMetki[sd][2]>4 && xISL>retISL) ret=xret; rl1=0; rl2=0; for (m=0;m=ret) { rl2=arrRL[m]; break; } else { rl1=arrRL[m]; } } if (rl2>0) { nameObj=strSLM382+ExtComplekt+"_"; cenaRL=pitch_cena[1]+bazaAP*rl1*(tangensAP-tangensRL); wr=ObjectGetValueByShift(nameObj,c1)-tangens05median*(b1-c1); X=(cenaRL-wr)/(tangens05median-tangensRL); x=X; if (tangensAP!=0) cena1=wr+X*tangens05median; else cena1=cenaRL+X*tangensRL; if (x<=b1) time1=iTime(NULL,Period(),b1-x); else time1=iTime(NULL,Period(),0)+(x-b1)*Period()*60; cenaRL=pitch_cena[1]+bazaAP*rl2*(tangensAP-tangensRL); if ((tangens05median-tangensRL)==0) return; X=(cenaRL-wr)/(tangens05median-tangensRL); x=X; if (x=0) { cena1=ObjectGetValueByShift(nameObj,0); arrm[i][0]=cena1; arrm[i][5]=4; if (aMetki[sd][4]>1) { retISL=(cena1 -(pitch_cena[2]+c1*tangensAP))/hAP; if (tangensAP==0) ret=(c1+retISL*(b1-c1))/bazaAP; else { if ((tangensAP*bazaAP)==0) return; ret=(cena1-pitch_cena[2]-retISL*(hAP-(b1-c1)*tangensAP))/(tangensAP*bazaAP); } if (!mAuto && aMetki[sd][4]>4 && xISL>retISL) ret=xret; rl1=0; rl2=0; for (m=0;m=ret) { rl2=arrRL[m]; break; } else { rl1=arrRL[m]; } } if (rl2>0) { nameObj=strSLM618+ExtComplekt+"_"; cenaRL=pitch_cena[1]+bazaAP*rl1*(tangensAP-tangensRL); wr=ObjectGetValueByShift(nameObj,c1)-tangens05median*(b1-c1); X=(cenaRL-wr)/(tangens05median-tangensRL); x=X; if (tangensAP!=0) cena1=wr+X*tangens05median; else cena1=cenaRL+X*tangensRL; if (x<=b1) time1=iTime(NULL,Period(),b1-x); else time1=iTime(NULL,Period(),0)+(x-b1)*Period()*60; cenaRL=pitch_cena[1]+bazaAP*rl2*(tangensAP-tangensRL); if ((tangens05median-tangensRL)==0) return; X=(cenaRL-wr)/(tangens05median-tangensRL); x=X; if (x0) { if (sd==0) nameObj="FSL Shiff Lines S" + ExtComplekt+"_"; else nameObj="FSL Shiff Lines D" + ExtComplekt+"_"; if (ObjectFind(nameObj)>=0) { cena1=ObjectGetValueByShift(nameObj,0); arrm[i][0]=cena1; arrm[i][5]=9; if (aMetki[sd][9]>1) { retISL=(cena1 -(pitch_cena[2]+c1*tangensAP))/hAP; if (tangensAP==0) ret=(c1+retISL*(b1-c1))/bazaAP; else { if ((tangensAP*bazaAP)==0) return; ret=(cena1-pitch_cena[2]-retISL*(hAP-(b1-c1)*tangensAP))/(tangensAP*bazaAP); } if (!mAuto && aMetki[sd][9]>4 && xISL>retISL) ret=xret; rl1=0; rl2=0; for (m=0;m=ret) { rl2=arrRL[m]; break; } else { rl1=arrRL[m]; } } if (rl2>0) { if (sd==0) nameObj="FSL Shiff Lines S" + ExtComplekt+"_"; else nameObj="FSL Shiff Lines D" + ExtComplekt+"_"; cenaRL=pitch_cena[1]+bazaAP*rl1*(tangensAP-tangensRL); wr=ObjectGetValueByShift(nameObj,c1)-tangens05median*(b1-c1); X=(cenaRL-wr)/(tangens05median-tangensRL); x=X; if (tangensAP!=0) cena1=wr+X*tangens05median; else cena1=cenaRL+X*tangensRL; if (x<=b1) time1=iTime(NULL,Period(),b1-x); else time1=iTime(NULL,Period(),0)+(x-b1)*Period()*60; cenaRL=pitch_cena[1]+bazaAP*rl2*(tangensAP-tangensRL); if ((tangens05median-tangensRL)==0) return; X=(cenaRL-wr)/(tangens05median-tangensRL); x=X; if (x0) { cena1=pitch_cena[2]+c1*tangensAP; arrm[i][0]=cena1; arrm[i][5]=1; if (!mExitFSL_SSL) { if (pitch_cena[1]>pitch_cena[2]) aexitFSL_SSL[0]=cena1; else aexitFSL_SSL[1]=cena1; } if (aMetki[sd][1]>1) { if (mAuto || aMetki[sd][1]<5 || (xISL<=0 && aMetki[sd][1]>4)) { if (tangensAP==0) ret=c1/bazaAP; else { if ((tangensAP*bazaAP)==0) return; ret=(cena1-pitch_cena[2])/(tangensAP*bazaAP); } } else ret=xret; rl1=0; rl2=0; for (m=0;m=ret) { rl2=arrRL[m]; break; } else { rl1=arrRL[m]; } } if (rl2>0) { X=bazaAP*rl1; x=X; cena1=pitch_cena[2]+X*tangensAP; if (x<=c1) time1=iTime(NULL,Period(),c1-x); else time1=iTime(NULL,Period(),0)+(x-c1)*Period()*60; X=bazaAP*rl2; x=X; if (x0) { cena1=pitch_cena[1]+b1*tangensAP; arrm[i][0]=cena1; arrm[i][5]=8; if (!mExitFSL_SSL) { if (pitch_cena[1]>pitch_cena[2]) aexitFSL_SSL[1]=cena1; else aexitFSL_SSL[0]=cena1; } if (aMetki[sd][8]>1) { if (mAuto || aMetki[sd][8]<5 || (xISL<=1 && aMetki[sd][8]>4)) { if (tangensAP==0) ret=b1/bazaAP; else { if ((tangensAP*bazaAP)==0) return; ret=(cena1-pitch_cena[1])/(tangensAP*bazaAP); } } else ret=xret; rl1=0; rl2=0; for (m=0;m=ret) { rl2=arrRL[m]; break; } else { rl1=arrRL[m]; } } if (rl2>0) { X=bazaAP*rl1; x=X; cena1=pitch_cena[1]+X*tangensAP; if (x<=b1) time1=iTime(NULL,Period(),b1-x); else time1=iTime(NULL,Period(),0)+(x-b1)*Period()*60; X=bazaAP*rl2; x=X; if (x0) { cena1=pitch_cena[0]+a1*tangensAP; arrm[i][0]=cena1; arrm[i][5]=6; if (aMetki[sd][6]>1) { if (mAuto || aMetki[sd][6]<5 || (xISL<=0.5 && aMetki[sd][6]>4)) { if (tangensAP==0) ret=a1/bazaAP-1; else { if ((tangensAP*bazaAP)==0) return; ret=(cena1-pitch_cena[0])/(tangensAP*bazaAP)-1; } } else ret=xret; rl1=0; rl2=0; for (m=0;m=ret) { rl2=arrRL[m]; break; } else { rl1=arrRL[m]; } } if (rl2>0) { X=bazaAP*(rl1+1); x=X; cena1=pitch_cena[0]+X*tangensAP; if (x<=a1) time1=iTime(NULL,Period(),a1-x); else time1=iTime(NULL,Period(),0)+(x-a1)*Period()*60; X=bazaAP*(rl2+1); x=X; if (x0) { cena1=pitch_cena[2]+c1*tangensAP+hAP*(2-phi); arrm[i][0]=cena1; arrm[i][5]=5; if (aMetki[sd][5]>1) { if (mAuto || aMetki[sd][5]<5 || (xISL<=(2-phi) && aMetki[sd][5]>4)) { if (tangensAP==0) ret=(c1+(2-phi)*(b1-c1))/bazaAP; else { if ((tangensAP*bazaAP)==0) return; ret=(cena1-pitch_cena[2]-(2-phi)*(hAP-(b1-c1)*tangensAP))/(tangensAP*bazaAP); } } else ret=xret; rl1=0; rl2=0; for (m=0;m=ret) { rl2=arrRL[m]; break; } else { rl1=arrRL[m]; } } if (rl2>0) { X=bazaAP*rl1; x=X; cena1=pitch_cena[2]+X*tangensAP+(2-phi)*(hAP-(b1-c1)*tangensAP); if (x<=b1-(b1-c1)*(phi-1)) time1=iTime(NULL,Period(),b1-(b1-c1)*(phi-1)-x); else time1=iTime(NULL,Period(),0)+(x-b1+(b1-c1)*(phi-1))*Period()*60; X=bazaAP*rl2; x=X; if (x0) { cena1=pitch_cena[2]+c1*tangensAP+hAP*(phi-1); arrm[i][0]=cena1; arrm[i][5]=7; if (aMetki[sd][7]>1) { if (mAuto || aMetki[sd][7]<5 || (xISL<=(phi-1) && aMetki[sd][7]>4)) { if (tangensAP==0) ret=(c1+(phi-1)*(b1-c1))/bazaAP; else { if ((tangensAP*bazaAP)==0) return; ret=(cena1-pitch_cena[2]-(phi-1)*(hAP-(b1-c1)*tangensAP))/(tangensAP*bazaAP); } } else ret=xret; rl1=0; rl2=0; for (m=0;m=ret) { rl2=arrRL[m]; break; } else { rl1=arrRL[m]; } } if (rl2>0) { X=bazaAP*rl1; x=X; cena1=pitch_cena[2]+X*tangensAP+(phi-1)*(hAP-(b1-c1)*tangensAP); if (x<=b1-(b1-c1)*(2-phi)) time1=iTime(NULL,Period(),b1-(b1-c1)*(2-phi)-x); else time1=iTime(NULL,Period(),0)+(x-b1+(b1-c1)*(2-phi))*Period()*60; X=bazaAP*rl2; x=X; if (x0 || aMetki[sd][14]>0) { if (pitch_cena[1]>pitch_cena[2]) { cenaUWL=pitch_cena[1]; cenaLWL=pitch_cena[2]; } else { cenaUWL=pitch_cena[2]; cenaLWL=pitch_cena[1]; } if (mAuto || ExtUWL) { nameObj=nameUWL; if (mAuto || ObjectFind(nameObj)>=0) { // максимальное и минимальное значение цены метки if (pitch_cena[1]>pitch_cena[2]) { X=pitch_cena[1]+b1*tangensUTL; Y=pitch_cena[1]+b1*tangensAP; } else { X=pitch_cena[2]+c1*tangensUTL; Y=pitch_cena[2]+c1*tangensAP; } x=ArraySize(aUWL); for (k=0;k1) { retISL=(cena1 -(pitch_cena[2]+c1*tangensAP))/hAP; if (!mAuto && aMetki[sd][13]>4 && xISL>retISL) ret=xret; else { if (tangensAP==0) ret=(c1+retISL*(b1-c1))/bazaAP; else { if ((tangensAP*bazaAP)==0) return; ret=(cena1-pitch_cena[2]-retISL*(hAP-(b1-c1)*tangensAP))/(tangensAP*bazaAP); } } rl1=0; rl2=0; for (m=0;m=ret) { rl2=arrRL[m]; break; } else { rl1=arrRL[m]; } } arrm[i][0]=cena1; arrm[i][5]=13; arrm[i][6]=aUWL[k]; W=bazaAP*rl2; // x=X; if (x=0) { // максимальное и минимальное значение цены метки if (pitch_cena[1]>pitch_cena[2]) { Y=pitch_cena[2]+c1*tangensAP; X=pitch_cena[2]+c1*tangensLTL; } else { Y=pitch_cena[1]+b1*tangensAP; X=pitch_cena[1]+b1*tangensLTL; } x=ArraySize(aLWL); for (k=0;k=X) { arrm[i][0]=cena1; arrm[i][5]=14; arrm[i][6]=aLWL[k]; } else { break; } } else //if (mLWL>1) { retISL=(cena1 -(pitch_cena[2]+c1*tangensAP))/hAP; if (!mAuto && aMetki[sd][14]>4 && xISL>retISL) ret=xret; else { if (tangensAP==0) ret=(c1+retISL*(b1-c1))/bazaAP; else { if ((tangensAP*bazaAP)==0) return; ret=(cena1-pitch_cena[2]-retISL*(hAP-(b1-c1)*tangensAP))/(tangensAP*bazaAP); } } rl1=0; rl2=0; for (m=0;m=ret) { rl2=arrRL[m]; break; } else { rl1=arrRL[m]; } } arrm[i][0]=cena1; arrm[i][5]=14; arrm[i][6]=aLWL[k]; W=bazaAP*rl2; // x=X; if (xcena2) continue; if (W<=c1+(b1-c1)*retISL) time2=iTime(NULL,Period(),c1+(b1-c1)*retISL-W); else time2=iTime(NULL,Period(),0)+(W-c1-(b1-c1)*retISL)*Period()*60; W=bazaAP*rl1; cena1=pitch_cena[2]+W*tangensAP+retISL*(hAP-(b1-c1)*tangensAP); if (W<=c1+(b1-c1)*retISL) time1=iTime(NULL,Period(),c1+(b1-c1)*retISL-W); else time1=iTime(NULL,Period(),0)+(W-c1-(b1-c1)*retISL)*Period()*60; arrm[i][1]=time1; arrm[i][2]=cena1; arrm[i][3]=time2; arrm[i][4]=cena2; } i++; } } } } // создание метки при пересечении нулевого бара контрольными линиями LTL и/или UTL статичеких вил Эндрюса // mUTL, mLTL if (mAuto || aMetki[sd][11]>0 || aMetki[sd][12]>0) { if (mAuto || ExtUTL) { nameObj=_nameUTL; if (mAuto || ObjectFind(nameObj)>=0) { cena1=pitch_cena[0]+tangensUTL*a1; arrm[i][0]=cena1; arrm[i][5]=11; if (mAuto || aMetki[sd][11]>1) { retISL=(cena1 -(pitch_cena[2]+c1*tangensAP))/hAP; if (!mAuto && aMetki[sd][11]>4 && xISL>retISL) ret=xret; else { if (tangensAP==0) ret=(c1+retISL*(b1-c1))/bazaAP; else { if ((tangensAP*bazaAP)==0) return; ret=(cena1-pitch_cena[2]-retISL*(hAP-(b1-c1)*tangensAP))/(tangensAP*bazaAP); } } rl1=0; rl2=0; for (m=0;m=ret) { rl2=arrRL[m]; break; } else { rl1=arrRL[m]; } } if (rl2>0) { if (pitch_cena[1]>pitch_cena[2]) { X=pitch_cena[1]; } else { X=pitch_cena[2]; } if ((tangensRL-tangensUTL)!=0 && tangensUTL!=0) { cena1=X+bazaAP*rl1*tangensUTL*(tangensRL-tangensAP)/(tangensRL-tangensUTL); x=a1-MathCeil((cena1-pitch_cena[0])/tangensUTL); if (x>0) time1=iTime(Symbol(),Period(),x); else time1=iTime(Symbol(),Period(),0)-x*Period()*60; cena2=X+bazaAP*rl2*tangensUTL*(tangensRL-tangensAP)/(tangensRL-tangensUTL); x=a1-MathCeil((cena2-pitch_cena[0])/tangensUTL); if (x>0) time2=iTime(Symbol(),Period(),x); else time2=iTime(Symbol(),Period(),0)-x*Period()*60; arrm[i][1]=time1; arrm[i][2]=cena1; arrm[i][3]=time2; arrm[i][4]=cena2; } } } i++; } } if (mAuto || ExtLTL) { nameObj=_nameLTL; if (mAuto || ObjectFind(nameObj)>=0) { cena1=pitch_cena[0]+tangensLTL*a1; arrm[i][0]=cena1; arrm[i][5]=12; if (mAuto || aMetki[sd][12]>1) { retISL=(cena1 -(pitch_cena[2]+c1*tangensAP))/hAP; if (!mAuto && aMetki[sd][12]>4 && xISL>retISL) ret=xret; else { if (tangensAP==0) ret=(c1+retISL*(b1-c1))/bazaAP; else { if ((tangensAP*bazaAP)==0) return; ret=(cena1-pitch_cena[2]-retISL*(hAP-(b1-c1)*tangensAP))/(tangensAP*bazaAP); } } rl1=0; rl2=0; for (m=0;m=ret) { rl2=arrRL[m]; break; } else { rl1=arrRL[m]; } } if (rl2>0) { if (pitch_cena[2]>pitch_cena[1]) { X=pitch_cena[1]; } else { X=pitch_cena[2]; } if ((tangensRL-tangensLTL)!=0 && tangensLTL!=0) { cena1=X+bazaAP*rl1*tangensLTL*(tangensRL-tangensAP)/(tangensRL-tangensLTL); x=a1-MathCeil((cena1-pitch_cena[0])/tangensLTL); if (x>0) time1=iTime(Symbol(),Period(),x); else time1=iTime(Symbol(),Period(),0)-x*Period()*60; cena2=X+bazaAP*rl2*tangensLTL*(tangensRL-tangensAP)/(tangensRL-tangensLTL); x=a1-MathCeil((cena2-pitch_cena[0])/tangensLTL); if (x>0) time2=iTime(Symbol(),Period(),x); else time2=iTime(Symbol(),Period(),0)-x*Period()*60; arrm[i][1]=time1; arrm[i][2]=cena1; arrm[i][3]=time2; arrm[i][4]=cena2; } } } } } } } string wl=""; int ii, i_1=0, i_2=ArrayRange(arrm,0)-1; double cl=iClose(NULL,Period(),0), pp; // x - количество меток вверх от текущей цены // y - количество меток вниз if (mAuto) { exitSL=mExitFSL_SSL || Close[0]>=aexitFSL_SSL[1] || Close[0]<=aexitFSL_SSL[0]; if (aPointAP[sd][3]-aPointAP[sd][1]==0) pp=10; else pp=MathAbs((aPointAP[sd][5]-aPointAP[sd][1])/(aPointAP[sd][3]-aPointAP[sd][1])); if (aPointAP[sd][3]>aPointAP[sd][5]) // восходящие вилы - направление вверх { if (aPointAP[sd][5]<=aPointAP[sd][1] && aPointAP[sd][1]=0.854 && pp<=1.146) {x=2; y=2;} // горизонтальные else if ((aPointAP[sd][5]1.146) || aPointAP[sd][1]>aPointAP[sd][3]) {x=3; y=2;} // косые } else if (aPointAP[sd][5]>aPointAP[sd][3]) // нисходящие вилы - направление вниз { if (aPointAP[sd][5]>=aPointAP[sd][1] && aPointAP[sd][1]>aPointAP[sd][3] && pp <0.854) {x=2; y=3;} // разворотные нисходящие else if (aPointAP[sd][1]>aPointAP[sd][5]) { if (pp<0.854) {x=1; y=3;} // трендовые нисходящие else {x=1; y=2;} // конечные нисходящие } else if (aPointAP[sd][5]>aPointAP[sd][1] && aPointAP[sd][1]>aPointAP[sd][3] && pp>=0.854 && pp<=1.146) {x=2; y=2;} // горизонтальные else if ((aPointAP[sd][5]>aPointAP[sd][1] && aPointAP[sd][1]>=aPointAP[sd][3] && pp>1.146) || aPointAP[sd][1]ArrayRange(arrm,0)) i_2=ArrayRange(arrm,0); } else exitSL=true; anum_cena[sd][0]=i_1; anum_cena[sd][1]=i_2-1; for (i=i_1;i10) continue; if (ii==11 && mAuto && ObjectFind(_nameUTL)<0) visibleTL(pitch_cena, pitch_time, 11, sd);// UTL if (ii==12 && mAuto && ObjectFind(_nameLTL)<0) visibleTL(pitch_cena, pitch_time, 12, sd);// LTL if (ii>12) wl=DoubleToStr(arrm[i][6],3); else wl=""; if (ii==13 && (mAuto && ObjectFind(_nameUWL)<0)) // UWL { if (ObjectFind(_nameUTL)<0) visibleTL(pitch_cena, pitch_time, 11, sd);// UTL if (sd==0) { visibleWL(pitch_cena, pitch_time, pitch_cena[0], pitch_time[0], pitch_cena[0]-tangensAP*a1, iTime(Symbol(),Period(),0), 13, sd, "", tangensAP, ExtLinePitchforkS, true); } else { visibleWL(pitch_cena, pitch_time, pitch_cena[0], pitch_time[0], pitch_cena[0]-tangensAP*a1, iTime(Symbol(),Period(),0), 13, sd, "", tangensAP, ExtLinePitchforkD, true); } } if (ii==14 && mAuto && ObjectFind(nameLWL)<0) // LWL { if (ObjectFind(_nameLTL)<0) visibleTL(pitch_cena, pitch_time, 12, sd);// LTL if (sd==0) { visibleWL(pitch_cena, pitch_time, pitch_cena[0], pitch_time[0], pitch_cena[0]-tangensAP*a1, iTime(Symbol(),Period(),0), 14, sd, "", tangensAP, ExtLinePitchforkS, true); } else { visibleWL(pitch_cena, pitch_time, pitch_cena[0], pitch_time[0], pitch_cena[0]-tangensAP*a1, iTime(Symbol(),Period(),0), 14, sd, "", tangensAP, ExtLinePitchforkD, true); } } if (aMetki[sd][ii]==1 || (mAuto &&aMetki[sd][ii]==0)) { nameObj=prefics+atextm[ii]+wl+" x 0-bar"; ObjectCreate(nameObj,OBJ_ARROW,0,iTime(NULL,Period(),0),arrm[i][0]); ObjectSet(nameObj,OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectSet(nameObj,OBJPROP_BACK,mBack); if (writetofile) { FileSeek(handle, 0, SEEK_END); FileWrite(handle, 0, ii, aMetki[sd][ii], 0, DoubleToStr(arrm[i][0], Digits), 0, DoubleToStr(iClose(NULL,Period(),0), Digits), sd, DoubleToStr(pitch_cena[0], Digits), DoubleToStr(pitch_cena[1], Digits), DoubleToStr(pitch_cena[2], Digits)); } } else if (aMetki[sd][ii]>1 && arrm[i][4]>0) { if (aMetki[sd][ii]!=3 && aMetki[sd][ii]!=6 && aMetki[sd][ii]!=8) { nameObj=prefics+atextm[ii]+wl+" left 0-bar"; ObjectCreate(nameObj,OBJ_ARROW,0,arrm[i][1],arrm[i][2]); ObjectSet(nameObj,OBJPROP_ARROWCODE,SYMBOL_LEFTPRICE); ObjectSet(nameObj,OBJPROP_BACK,mBack); nameObj=prefics+atextm[ii]+wl+" right 0-bar"; ObjectCreate(nameObj,OBJ_ARROW,0,arrm[i][3],arrm[i][4]); ObjectSet(nameObj,OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectSet(nameObj,OBJPROP_BACK,mBack); } if (aMetki[sd][ii]>7) { nameObj=prefics+atextm[ii]+wl+" line Zones"; ObjectCreate(nameObj,OBJ_TREND,0,arrm[i][1],arrm[i][2],arrm[i][3],arrm[i][4]); ObjectSet(nameObj,OBJPROP_WIDTH,mLineZonesWidth); ObjectSet(nameObj,OBJPROP_RAY,false); ObjectSet(nameObj,OBJPROP_BACK,mBackZones); } else if (aMetki[sd][ii]>2 && aMetki[sd][ii]!=5) { if (aMetki[sd][ii]>5) nameObj=prefics+"Shift "+atextm[ii]+wl+" Zones"; else nameObj=prefics+atextm[ii]+wl+" Zones"; ObjectCreate(nameObj,OBJ_RECTANGLE,0,arrm[i][1],arrm[i][2],arrm[i][3],arrm[i][4]); ObjectSet(nameObj,OBJPROP_BACK,mBackZones); } if (writetofile) { FileSeek(handle, 0, SEEK_END); FileWrite(handle, 0, ii, aMetki[sd][ii], DoubleToStr(arrm[i][2], Digits), 0, DoubleToStr(arrm[i][4], Digits), DoubleToStr(iClose(NULL,Period(),0), Digits), sd, DoubleToStr(pitch_cena[0], Digits), DoubleToStr(pitch_cena[1], Digits), DoubleToStr(pitch_cena[2], Digits)); } } } } } if(VariantsPRZ==1) { checkAP (arrName); if (ArraySize(arrName)==0) { if (mWriteToFile) { if (FileSize(handle)<1) {FileClose(handle); FileDelete(file);} else FileClose(handle); } return; } str1=DoubleToStr(pitch_cena[0], Digits); str2=DoubleToStr(pitch_cena[1], Digits); str3=DoubleToStr(pitch_cena[2], Digits); /* mSelectVariantsPRZ = 1 - метки пересечения SSL = 2 - метки пересечения медианы = 3 - метки пересечения FSL = 4 - зона пересечения канала медианы = 5 - зона пересечения канала вил = 6 - метки пересечения 1/2 медианы = 7 - зона пересечения канала 1/2 медианы = 8 - зона пересечения канала линий Шиффа = 9 - метки пересечения UTL, LTL */ if (mSelectVariantsPRZ<6) { if (mSelectVariantsPRZ==1) // метки пересечения SSL { externalAP (c1, pitch_cena[2], 0, 0, tangensAP, prefics+"SSL x ", "", "", arrName, handle, str1 , str2, str3, sd); } else if (mSelectVariantsPRZ==2) // метки пересечения медианы { externalAP (a1, pitch_cena[0], 0, 0, tangensAP, prefics+"Mediana x ", "", "", arrName, handle, str1 , str2, str3, sd); } else if (mSelectVariantsPRZ==3) // метки пересечения FSL { externalAP (b1, pitch_cena[1], 0, 0, tangensAP, prefics+"FSL x ", "", "", arrName, handle, str1 , str2, str3, sd); } else if (mSelectVariantsPRZ==4) // зона пересечения канала медианы { externalAP (b1, pitch_cena[1]-hAP*(2-phi), b1, pitch_cena[1]-hAP*(phi-1), tangensAP, prefics+"ISL 38.2 x ", prefics+"ISL 61.8 x ", prefics+"channal Mediana x ", arrName, handle, str1 , str2, str3, sd); } else if (mSelectVariantsPRZ==5) // зона пересечения канала вил { externalAP (b1, pitch_cena[1], c1, pitch_cena[2], tangensAP, prefics+"SSL x ", prefics+"FSL x ", prefics+"channal AP x ", arrName, handle, str1 , str2, str3, sd); } } else if (mSelectVariantsPRZ<9 && ExtPitchforkStatic==2) { cena2=pitch_cena[1]-hAP1_2mediana/2; if (mSelectVariantsPRZ==6) // метки пересечения 1/2 медианы { externalAP (b1, cena2, 0, 0, tangens05median, prefics+"50% Mediana x ", "", "", arrName, handle, str1 , str2, str3, sd); } else if (mSelectVariantsPRZ==7) // зона пересечения канала 1/2 медианы { externalAP (b1, pitch_cena[1]-hAP1_2mediana*(phi-1), b1, pitch_cena[1]-hAP1_2mediana*(2-phi), tangens05median, prefics+"SLM 38.2 x ", prefics+"SLM 61.8 x ", prefics+"channal 50% Mediana x ", arrName, handle, str1 , str2, str3, sd); } else if (mSelectVariantsPRZ==8) // зона пересечения канала линий Шиффа { externalAP (b1, pitch_cena[1], c1, pitch_cena[2], tangens05median, prefics+"SSL Shiff Line x ", prefics+"FSL Shiff Line x ", prefics+"channal Shiff Line x ", arrName, handle, str1 , str2, str3, sd); } } else if (mSelectVariantsPRZ==9) { if (ExtLTL) // метки пересечения LTL { externalAP (a1, pitch_cena[0], 0, 0, tangensLTL, prefics+"LTL x ", "", "", arrName, handle, str1 , str2, str3, sd); } if (ExtUTL) // метки пересечения UTL { externalAP (a1, pitch_cena[0], 0, 0, tangensUTL, prefics+"UTL x ", "", "", arrName, handle, str1 , str2, str3, sd); } } } // закрываем файл для записи меток if (mWriteToFile) { mPeriod=mPeriod+mPeriodWriteToFile*60; if (FileSize(handle)<1) {FileClose(handle); FileDelete(file);} else FileClose(handle); } } //-------------------------------------------------------- // Вывод ценовых меток (metkaAP) в вилах Эндрюса. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Подготовка параметров внешних вил // Начало. //-------------------------------------------------------- /* a1 - номер бара начала линии 1 cenaA1 - цена на линии 1 на баре a1 a2 - номер бара начала линии 2 cenaA2 - цена на линии 2 на баре a2 tangensA - тангенс угла наклона линий базовых вил nameMetki1 - наименование метки 1 nameMetki2 - наименование метки 2 nameZones - наименование зоны aName[] - массив с наименованиями внешних вил Если выводится метка, то в данные правой метки и наименование зоны записываем 0 или "" для строковой переменной int mSSL int mISL382 int mMediana int mISL618 int mFSL int mUWL int mLWL int m1_2Mediana int mSLM int mFSLShiffLines int mUTL int mLTL */ void externalAP (int a1, double cenaA1, int b1, double cenaB1, double tangensA, string nameMetki1, string nameMetki2, string nameZones, string aName[], int handle, string str1 , string str2, string str3, int sd) { int i, j, k, x, y, z , wr, znak; int a2, b2, c2; // номера баров привязки внешних вил double cPitch[3]; // цена в точках привязки внешних вил datetime tPitch[3]; // время в точках привязки внешних вил color PitchColor; // цвет внешних вил, построенных вручную double cena1, cena2, cena3; // цена в точках привязки инструментов вил, построенных вручную datetime time1, time2, time3; // время в точках привязки инструментов вил, построенных вручную datetime twr; double tangensAP, tangens05median; // тангенсы углов наклона внешних вил. double hAP, hAP1_2mediana; // bool typeAP; // = - false вилы созданы с помощью ZUP, = true - вилы созданы вручную string suffics="", sufficsWL="", suffics_APm="", sufficsWL_APm; // идентификатор принадлежности инструментов вил одному комплекту. string txt=""; string nameObjAP=""; // наименования инструментов вил, построенных вручную string nameObj_=""; // название ююю bool canal=true; // флаг вывода меток для линии от базовых вил или от канала, образованного инструментами базовых вил string str=""; double fi; if (StringLen(nameZones)==0) canal=false; for (i=ArraySize(aName)-1;i>=0;i--) { typeAP=false; if (StringFind(aName[i],"Andrews Pitchfork",0)>=0) typeAP=true; if (typeAP && mExternalHandAP==1) PitchColor=ObjectGet(aName[i],OBJPROP_COLOR); // определяем идентификатор принадлежности инструментов вил одному комплекту. suffics=""; sufficsWL=""; if (StringFind(aName[i],"Andrews Pitchfork",0)>=0) { suffics=StringSubstr(aName[i],17); } else { j=StringFind(aName[i],"_",0); suffics=StringSubstr(aName[i],9); sufficsWL=StringSubstr(aName[i],10); if (StringSubstr(aName[i],9,1)=="S") { if (StringSubstr(aName[i],j+1,3)=="APm") { if (j+50) { suffics_APm=StringSubstr(suffics,0,StringFind(suffics,"APm",0)); sufficsWL_APm=StringSubstr(sufficsWL,0,StringFind(sufficsWL,"APm",0)); } // определяем время и цену точек, к которым привязаны внешние вилы Эндрюса tPitch[0]=ObjectGet(aName[i],OBJPROP_TIME1); cPitch[0]=ObjectGet(aName[i],OBJPROP_PRICE1); tPitch[1]=ObjectGet(aName[i],OBJPROP_TIME2); cPitch[1]=ObjectGet(aName[i],OBJPROP_PRICE2); tPitch[2]=ObjectGet(aName[i],OBJPROP_TIME3); cPitch[2]=ObjectGet(aName[i],OBJPROP_PRICE3); // определяем номера баров, к которым привязаны вилы Эндрюса if (typeAP) { twr=iTime(Symbol(),Period(),0); if (tPitch[0]<=twr) a2=iBarShift(NULL,Period(),tPitch[0],false); else a2=-(tPitch[0]-twr)/(Period()*60); if (tPitch[1]<=twr) b2=iBarShift(NULL,Period(),tPitch[1],false); else b2=-(tPitch[1]-twr)/(Period()*60); if (tPitch[2]<=twr) c2=iBarShift(NULL,Period(),tPitch[2],false); else c2=-(tPitch[2]-twr)/(Period()*60); } else { a2=iBarShift(NULL,Period(),tPitch[0],false); b2=iBarShift(NULL,Period(),tPitch[1],false); c2=iBarShift(NULL,Period(),tPitch[2],false); } // тангенс угла наклона вил Эндрюса tangensAP=0; if ((a2-(c2+b2)/2.0)!=0) tangensAP=((cPitch[2]+cPitch[1])/2-cPitch[0])/(a2-(c2+b2)/2.0); // определяем расстояние по вертикали от SSL до FSL - база по высоте вил Эндрюса hAP=cPitch[1]+(b2-c2)*tangensAP-cPitch[2]; if (aMetki[sd][3]>0 || aMetki[sd][2]>0) { // тангенс угла наклона 1/2 медианы вил Эндрюса tangens05median=(cPitch[2]-cPitch[0])/(a2-c2); // определяем расстояние по вертикали от SSL до FSL - база по высоте вил линий Шиффа hAP1_2mediana=cPitch[1]-(cPitch[2]-tangens05median*(b2-c2)); } if (aMetki[sd][1]>0) { txt=" SSL "+suffics; visual (a1, cenaA1, b1, cenaB1, tangensA, c2, cPitch[2], tangensAP, nameMetki1+txt, nameMetki2+txt, nameZones+txt, canal, aMetki[sd][1], handle, 1, str1 , str2, str3); } if (aMetki[sd][5]>0) { if (typeAP && mExternalHandAP==1) { _ISL("ISL_", tPitch, cPitch, PitchColor, STYLE_DASH, 2, suffics); } if ((typeAP && mExternalHandAP>0) || !typeAP) { txt=" ISL 38.2 "+suffics; visual (a1, cenaA1, b1, cenaB1, tangensA, b2, cPitch[1]-hAP*(phi-1), tangensAP, nameMetki1+txt, nameMetki2+txt, nameZones+txt, canal, aMetki[sd][5], handle, 5, str1 , str2, str3); } } if (aMetki[sd][6]>0) { txt=" Mediana "+suffics; visual (a1, cenaA1, b1, cenaB1, tangensA, a2, cPitch[0], tangensAP, nameMetki1+txt, nameMetki2+txt, nameZones+txt, canal, aMetki[sd][6], handle, 6, str1 , str2, str3); } if (aMetki[sd][7]>0) { if (typeAP && mExternalHandAP==1) { _ISL("ISL_", tPitch, cPitch, PitchColor, STYLE_DASH, 2, suffics); } if ((typeAP && mExternalHandAP>0) || !typeAP) { txt=" ISL 61.8 "+suffics; visual (a1, cenaA1, b1, cenaB1, tangensA, b2, cPitch[1]-hAP*(2-phi), tangensAP, nameMetki1+txt, nameMetki2+txt, nameZones+txt, canal, aMetki[sd][7], handle, 7, str1 , str2, str3); } } if (aMetki[sd][8]>0) { txt=" FSL "+suffics; visual (a1, cenaA1, b1, cenaB1, tangensA, b2, cPitch[1], tangensAP, nameMetki1+txt, nameMetki2+txt, nameZones+txt, canal, aMetki[sd][8], handle, 8, str1 , str2, str3); } if (aMetki[sd][13]>0 || aMetki[sd][14]>0) { if (typeAP && mExternalHandAP==1) { cena1=cPitch[0]; time1=tPitch[0]; time2=iTime(Symbol(),Period(),0); cena2=cPitch[0]-tangensAP*a2; visibleWL(cPitch, tPitch, cena1, time1, cena2, time2, 13, sd, suffics, tangensAP, PitchColor, false); // UWL visibleWL(cPitch, tPitch, cena1, time1, cena2, time2, 14, sd, suffics, tangensAP, PitchColor, false); // LWL } if (aMetki[sd][13]>0) { if ((typeAP && mExternalHandAP>0) || (!typeAP && ObjectFind("UWL" + sufficsWL_APm)==0)) { if (!typeAP) nameObj_="UWL" + sufficsWL_APm; else if (typeAP && mExternalHandAP>0) nameObj_="UWL"+ ExtComplekt+"_" + suffics; if (cPitch[1]>cPitch[2]) { y=b2; cena3=cPitch[1]; } else { y=c2; cena3=cPitch[2]; } if (ObjectFind(nameObj_)>=0) { x=ObjectGet(nameObj_,OBJPROP_FIBOLEVELS); for (k=0;k=0) str=StringSubstr(str,z+1); } } } } if (aMetki[sd][14]>0) { if ((typeAP && mExternalHandAP>0) || (!typeAP && ObjectFind("LWL" + sufficsWL_APm)==0)) { if (!typeAP) nameObj_="LWL" + sufficsWL_APm; else if (typeAP && mExternalHandAP>0) nameObj_="LWL"+ ExtComplekt+"_" + suffics; if (cPitch[1]>cPitch[2]) { y=c2; cena3=cPitch[2]; } else { y=b2; cena3=cPitch[1]; } if (ObjectFind(nameObj_)>=0) { x=ObjectGet(nameObj_,OBJPROP_FIBOLEVELS); for (k=0;k=0) str=StringSubstr(str,z+1); } } } } } if (aMetki[sd][3]>0) { if (typeAP && mExternalHandAP==1) { coordinaty_1_2_mediany_AP(cPitch[0], cPitch[1], cPitch[2], tPitch[0], tPitch[1], tPitch[2], time1, time2, cena1, cena2, 2, 0); nameObjAP="pmediana_" + ExtComplekt+"_" + suffics; ObjectDelete(nameObjAP); ObjectCreate(nameObjAP,OBJ_TREND,0,time1,cena1,time2,cena2); ObjectSet(nameObjAP,OBJPROP_STYLE,STYLE_DASH); ObjectSet(nameObjAP,OBJPROP_COLOR,PitchColor); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); } if ((typeAP && mExternalHandAP>0) || (!typeAP && ObjectFind("pmediana"+suffics_APm)==0)) { txt=" 50% Mediana "+suffics; visual (a1, cenaA1, b1, cenaB1, tangensA, b2, cPitch[1]-hAP1_2mediana/2, tangens05median, nameMetki1+txt, nameMetki2+txt, nameZones+txt, canal, aMetki[sd][3], handle, 3, str1 , str2, str3); } } if (aMetki[sd][2]>0) { if (typeAP && mExternalHandAP==1) { if (a2>c2) znak=1; else if (a2==c2) znak=0; else znak=-1; // вывод SLM 38.2 wr=c2+(b2-c2)*(2-phi); cena1=cPitch[1] + (b2-c2)*(phi-1)*tangens05median-hAP1_2mediana*(phi-1); if (wr>=0) { time1=iTime(Symbol(),Period(),wr); cena2=cena1+znak*wr*tangens05median; if (znak>0) time2=iTime(Symbol(),Period(),0); else if (znak<0) time2=iTime(Symbol(),Period(),2*wr); } else { time1=iTime(Symbol(),Period(),0)-wr*Period()*60; if (znak!=0) cena2=cena1+znak*10*tangens05median; else { if (tangens05median>0) cena2=cena1*1.1; else cena2=cena1*0.9; } time2=iTime(Symbol(),Period(),0)-(wr-znak*10)*Period()*60; } nameObjAP="SLM382_" + ExtComplekt+"_" + suffics; ObjectDelete(nameObjAP); ObjectCreate(nameObjAP,OBJ_TREND,0,time1,cena1,time2,cena2); ObjectSet(nameObjAP,OBJPROP_STYLE,STYLE_DASH); ObjectSet(nameObjAP,OBJPROP_COLOR,PitchColor); ObjectSet(nameObjAP,OBJPROP_BACK,ExtBack); // вывод SLM 68.8 wr=c2+(b2-c2)*(phi-1); cena1=cPitch[1] + (b2-c2)*(2-phi)*tangens05median-hAP1_2mediana*(2-phi); if (wr>=0) { time1=iTime(Symbol(),Period(),wr); cena2=cena1+znak*wr*tangens05median; if (znak>0) time2=iTime(Symbol(),Period(),0); else if (znak<0) time2=iTime(Symbol(),Period(),2*wr); } else { time1=iTime(Symbol(),Period(),0)-wr*Period()*60; if (znak!=0) cena2=cena1+znak*10*tangens05median; else { if (tangens05median>0) cena2=cena1*1.1; else cena2=cena1*0.9; } time2=iTime(Symbol(),Period(),0)-(wr-znak*10)*Period()*60; } nameObjAP="SLM618_" + ExtComplekt+"_" + suffics; ObjectDelete(nameObjAP); ObjectCreate(nameObjAP,OBJ_TREND,0,time1,cena1,time2,cena2); ObjectSet(nameObjAP,OBJPROP_STYLE,STYLE_DASH); ObjectSet(nameObjAP,OBJPROP_COLOR,PitchColor); ObjectSet(nameObjAP,OBJPROP_BACK,ExtBack); } if ((typeAP && mExternalHandAP>0) || (!typeAP && ObjectFind("SLM382"+suffics_APm)==0)) { txt=" SLM 38.2 "+suffics; visual (a1, cenaA1, b1, cenaB1, tangensA, b2, cPitch[1]-hAP1_2mediana*(phi-1), tangens05median, nameMetki1+txt, nameMetki2+txt, nameZones+txt, canal, aMetki[sd][2], handle, 2, str1 , str2, str3); } if ((typeAP && mExternalHandAP>0) || (!typeAP && ObjectFind("SLM618"+suffics_APm)==0)) { txt=" SLM 61.8 "+suffics; visual (a1, cenaA1, b1, cenaB1, tangensA, b2, cPitch[1]-hAP1_2mediana*(2-phi), tangens05median, nameMetki1+txt, nameMetki2+txt, nameZones+txt, canal, aMetki[sd][4], handle, 4, str1 , str2, str3); } } if (aMetki[sd][9]>0) { if (typeAP && mExternalHandAP==1) { if (a2>c2) znak=1; else if (a2==c2) znak=0; else znak=-1; // вывод FSL Shiff Lines wr=c2+b2-c2; cena1=cPitch[1]; if (wr>=0) { time1=tPitch[1]; cena2=cena1+znak*wr*tangens05median; if (znak>0) time2=iTime(Symbol(),Period(),0); else if (znak<0) time2=iTime(Symbol(),Period(),2*wr); } else { time1=iTime(Symbol(),Period(),0)-wr*Period()*60; if (znak!=0) cena2=cena1+znak*10*tangens05median; else { if (tangens05median>0) cena2=cena1*1.1; else cena2=cena1*0.9; } time2=iTime(Symbol(),Period(),0)-(wr-znak*10)*Period()*60; } nameObjAP="FSL Shiff Lines_" + ExtComplekt+"_" + suffics; ObjectDelete(nameObjAP); ObjectCreate(nameObjAP,OBJ_TREND,0,time1,cena1,time2,cena2); ObjectSet(nameObjAP,OBJPROP_STYLE,STYLE_DASH); ObjectSet(nameObjAP,OBJPROP_COLOR,PitchColor); ObjectSet(nameObjAP,OBJPROP_BACK,ExtBack); } if ((typeAP && mExternalHandAP>0) || (!typeAP && ObjectFind("FSL Shiff Lines "+suffics_APm)==0)) { txt=" FSL Shiff Lines "+suffics; visual (a1, cenaA1, b1, cenaB1, tangensA, b2, cPitch[1], tangens05median, nameMetki1+txt, nameMetki2+txt, nameZones+txt, canal, aMetki[sd][9], handle, 9, str1 , str2, str3); } } if (aMetki[sd][11]>0 || aMetki[sd][12]>0) { if (typeAP && mExternalHandAP==1) { time1=tPitch[0]; cena1=cPitch[0]; if (aMetki[sd][11]>0) { nameObjAP=nameUTL + suffics; if (cPitch[1]>cPitch[2]) { time2=tPitch[1]; cena2=cPitch[1]; } else { time2=tPitch[2]; cena2=cPitch[2]; } ObjectDelete(nameObjAP); ObjectCreate(nameObjAP,OBJ_TREND,0,time1,cena1,time2,cena2); ObjectSet(nameObjAP,OBJPROP_STYLE,STYLE_DASH); ObjectSet(nameObjAP,OBJPROP_COLOR,PitchColor); ObjectSet(nameObjAP,OBJPROP_BACK,ExtBack); } if (aMetki[sd][12]>0) { nameObjAP=nameLTL + suffics; if (cPitch[1]>=cPitch[2]) { time2=tPitch[2]; cena2=cPitch[2]; } else { time2=tPitch[1]; cena2=cPitch[1]; } ObjectDelete(nameObjAP); ObjectCreate(nameObjAP,OBJ_TREND,0,time1,cena1,time2,cena2); ObjectSet(nameObjAP,OBJPROP_STYLE,STYLE_DASH); ObjectSet(nameObjAP,OBJPROP_COLOR,PitchColor); ObjectSet(nameObjAP,OBJPROP_BACK,ExtBack); } } if (aMetki[sd][11]>0) { if ((typeAP && mExternalHandAP>0) || (!typeAP && ObjectFind("UTL"+sufficsWL_APm)==0)) { txt=" UTL "+suffics; if (cPitch[1]>cPitch[2]) { visual (a1, cenaA1, b1, cenaB1, tangensA, b2, cPitch[1], (cPitch[1]-cPitch[0])/(a2-b2), nameMetki1+txt, nameMetki2+txt, nameZones+txt, canal, aMetki[sd][11], handle, 11, str1 , str2, str3); } else { visual (a1, cenaA1, b1, cenaB1, tangensA, c2, cPitch[2], (cPitch[2]-cPitch[0])/(a2-c2), nameMetki1+txt, nameMetki2+txt, nameZones+txt, canal, aMetki[sd][11], handle, 11, str1 , str2, str3); } } } if (aMetki[sd][12]>0) { if ((typeAP && mExternalHandAP>0) || (!typeAP && ObjectFind("LTL"+sufficsWL_APm)==0)) { txt=" LTL "+suffics; if (cPitch[2]>cPitch[1]) { visual (a1, cenaA1, b1, cenaB1, tangensA, b2, cPitch[1], (cPitch[1]-cPitch[0])/(a2-b2), nameMetki1+txt, nameMetki2+txt, nameZones+txt, canal, aMetki[sd][12], handle, 12, str1 , str2, str3); } else { visual (a1, cenaA1, b1, cenaB1, tangensA, c2, cPitch[2], (cPitch[2]-cPitch[0])/(a2-c2), nameMetki1+txt, nameMetki2+txt, nameZones+txt, canal, aMetki[sd][12], handle, 12, str1 , str2, str3); } } } } } } //-------------------------------------------------------- // Подготовка параметров внешних вил // Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод контрольных линий (TL) - UTL и LTL // Начало. //-------------------------------------------------------- void visibleTL(double& cPitch[], datetime& tPitch[], int metka, int sd) { string nameObj=""; string _nameUTL="", _nameLTL=""; if (sd==0) { _nameUTL=nameUTL; _nameLTL=nameLTL; } else { _nameUTL=nameUTLd; _nameLTL=nameLTLd; } if (metka==11) nameObj=_nameUTL; if (metka==12) nameObj=_nameLTL; if (cPitch[1]>cPitch[2]) { if (metka==11) ObjectCreate(nameObj,OBJ_TREND,0,tPitch[0],cPitch[0],tPitch[1],cPitch[1]); if (metka==12) ObjectCreate(nameObj,OBJ_TREND,0,tPitch[0],cPitch[0],tPitch[2],cPitch[2]); } else { if (metka==11) ObjectCreate(nameObj,OBJ_TREND,0,tPitch[0],cPitch[0],tPitch[2],cPitch[2]); if (metka==12) ObjectCreate(nameObj,OBJ_TREND,0,tPitch[0],cPitch[0],tPitch[1],cPitch[1]); } ObjectSet(nameObj,OBJPROP_STYLE,STYLE_SOLID); if (sd==0) ObjectSet(nameObj,OBJPROP_COLOR,ExtLinePitchforkS); else ObjectSet(nameObj,OBJPROP_COLOR,ExtLinePitchforkD); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); } //-------------------------------------------------------- // Вывод контрольных линий (TL) - UTL и LTL // Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод предупреждающих линий (WL) - UWL и LWL // Начало. //-------------------------------------------------------- void visibleWL(double& cPitch[], datetime& tPitch[], double cena1, datetime time1, double cena2, datetime time2, int metka, int sd, string suffics, double tangensAP, color PitchColor, bool mAuto) { double cena3; datetime time3; string nameObj=""; string _nameUWL="", _nameLWL=""; if (sd==0) { _nameUWL=nameUWL; _nameLWL=nameLWL; } else { _nameUWL=nameUWLd; _nameLWL=nameLWLd; } ML_RL400(-tangensAP, cPitch, tPitch, time2, cena2, false); if (mAuto || aMetki[sd][metka]>0) { if (metka==13) { nameObj=_nameUWL + suffics; if (cPitch[1]>cPitch[2]) { time3=tPitch[1]; cena3=cPitch[1]; } else { time3=tPitch[2]; cena3=cPitch[2]; } } if (metka==14) { nameObj=_nameLWL + suffics; if (cPitch[1]>=cPitch[2]) { time3=tPitch[2]; cena3=cPitch[2]; } else { time3=tPitch[1]; cena3=cPitch[1]; } } ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_FIBOCHANNEL,0,time1,cena1,time2,cena2,time3,cena3); ObjectSet(nameObj,OBJPROP_LEVELCOLOR,PitchColor); ObjectSet(nameObj,OBJPROP_LEVELSTYLE,STYLE_DOT); ObjectSet(nameObj,OBJPROP_RAY,ExtLongWL); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); ObjectSet(nameObj,OBJPROP_COLOR,CLR_NONE); if (metka==13) UWL_LWL (true,nameObj,"UWL ",ExtFiboFreeUWL); if (metka==14) UWL_LWL (true,nameObj,"LWL ",ExtFiboFreeLWL); } } //-------------------------------------------------------- // Вывод предупреждающих линий (WL) - UWL и LWL // Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод ценовых меток на график. // Начало. //-------------------------------------------------------- void visual (int a1, double cenaA1, int a2, double cenaA2, double tgA, int b, double cenaB, double tgB, string m1, string m2, string Zones, bool canal, int metka, int handle, int name, string str1 , string str2, string str3) { int x, x1; double cena1, cena2; datetime tcena1, tcena2; string nameObj_=""; x=(cenaA1-cenaB+tgA*a1-tgB*b)/(tgA-tgB); if (x>a1 && !mVisibleST) return; if (canal) { x1=(cenaA2-cenaB+tgA*a2-tgB*b)/(tgA-tgB); cena2=cenaA2+(a2-x1)*tgA; if (x1>=0) tcena2=iTime(Symbol(),Period(),x1); else tcena2=iTime(Symbol(),Period(),0)-x1*Period()*60; } cena1=cenaA1+(a1-x)*tgA; if (x>=0) tcena1=iTime(Symbol(),Period(),x); else tcena1=iTime(Symbol(),Period(),0)-x*Period()*60; if (canal) { if (handle>=0) { FileSeek(handle, 0, SEEK_END); FileWrite(handle, mSelectVariantsPRZ, name, metka, DoubleToStr(cena1, Digits), 0, DoubleToStr(cena2, Digits), DoubleToStr(iClose(NULL,Period(),0), Digits), mTypeBasiclAP, str1, str2, str3); } if (metka==5 || metka==7 || metka==9) { nameObj_=m1; ObjectCreate(nameObj_,OBJ_ARROW,0,tcena1,cena1); if (tcena17) { nameObj_=Zones; ObjectCreate(nameObj_,OBJ_TREND,0,tcena1,cena1,tcena2,cena2); ObjectSet(nameObj_,OBJPROP_WIDTH,mLineZonesWidth); ObjectSet(nameObj_,OBJPROP_RAY,false); ObjectSet(nameObj_,OBJPROP_BACK,mBackZones); } else if (metka>5) { if (metka>5) nameObj_=Zones; ObjectCreate(nameObj_,OBJ_RECTANGLE,0,tcena1,cena1,tcena2,cena2); ObjectSet(nameObj_,OBJPROP_BACK,mBackZones); } } else { nameObj_=m1; ObjectCreate(nameObj_,OBJ_ARROW,0,tcena1,cena1); ObjectSet(nameObj_,OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectSet(nameObj_,OBJPROP_BACK,mBack); if (handle>=0) { FileSeek(handle, 0, SEEK_END); FileWrite(handle, mSelectVariantsPRZ, name, metka, 0, DoubleToStr(cena1, Digits), 0, DoubleToStr(iClose(NULL,Period(),0), Digits), mTypeBasiclAP, str1, str2, str3); } } } //-------------------------------------------------------- // Вывод ценовых меток на график. // Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Проверка наличия внешних вил для расчета меток пересечения вил // и сохранение названий внешних вил в массив. // Начало. //-------------------------------------------------------- void checkAP (string& aName[]) //arrName[] { int i, j, k; string name=""; /* mTypeExternalAP - выбор типа внешних вил = 0 - динамические или статические вилы текущего комплекта (противоположные базовым) = 1 - сохраненные вилы из текущего комплекта = 2 - любые вилы из текущего комплекта = 3 - статические вилы из других комплектов ZUP с текущего графика = 4 - динамические вилы из других комплектов ZUP с текущего графика = 5 - любые вилы из других комплектов ZUP с текущего графика = 6 - вилы с текущего графика, выведенные вручную, не с помощью ZUP = 7 - любые внешние вилы mTypeBasiclAP - выбор типа базовых вил = 0 - статические вилы из текущего комплекта = 1 - динамические вилы из текущего комплекта */ // mSelectVariantsPRZ ExtMasterPitchfork nameObjAPMaster="Master_"+nameObj; j=ObjectsTotal(); SlavePitchfork = false; if (ExtMasterPitchfork==0) { k=0; for (i=0; i=0) { k++; ArrayResize(aName,k); aName[k-1]=StringSubstr(name,7); SlavePitchfork = true; return; } } } } k=0; if (mTypeExternalAP==0) // динамические или статические вилы текущего комплекта (противоположные базовым) { if (mTypeBasiclAP==0) // динамические вилы текущего комплекта { name="pitchforkD" + ExtComplekt+"_"; if (ObjectFind(name)==0) { ArrayResize(aName,1); aName[0]=name; } } else if (mTypeBasiclAP==1) // статические вилы текущего комплекта { name="pitchforkS" + ExtComplekt+"_"; if (ObjectFind(name)==0) { ArrayResize(aName,1); aName[0]=name; } else { name="pitchforkS" + ExtComplekt+"_"+"_APm_"; if (ObjectFind(name)==0) { ArrayResize(aName,1); aName[0]=name; } } } } else if (mTypeExternalAP==1) // сохраненные вилы из текущего комплекта { for (i=0; i=0 && StringLen(name)>StringLen("pitchforkS" + ExtComplekt+"_")+4) { k++; ArrayResize(aName,k); aName[k-1]=name; } } } } else if (mTypeExternalAP==2) // любые вилы из текущего комплекта { if (mTypeBasiclAP==0) { for (i=0; i=0 && StringLen(name)>StringLen("pitchforkS" + ExtComplekt+"_")+4) { k++; ArrayResize(aName,k); aName[k-1]=name; } } } name="pitchforkD" + ExtComplekt+"_"; if (ObjectFind(name)==0) { k++; ArrayResize(aName,k); aName[k-1]=name; } } else if (mTypeBasiclAP==1) { for (i=0; i=0) { k++; ArrayResize(aName,k); aName[k-1]=name; } } } } } else if (mTypeExternalAP==3) // статические вилы из других комплектов ZUP с текущего графика { for (i=0; i=0) { k++; ArrayResize(aName,k); aName[k-1]=name; } } } } else if (mTypeExternalAP==4) // динамические вилы из других комплектов ZUP с текущего графика { for (i=0; i=0) { k++; ArrayResize(aName,k); aName[k-1]=name; } } } } else if (mTypeExternalAP==5) // любые вилы из других комплектов ZUP с текущего графика { for (i=0; i=0) { k++; ArrayResize(aName,k); aName[k-1]=name; } if (StringFind(name,"pitchforkS" + ExtComplekt+"_",0)<0 && StringFind(name,"pitchforkS",0)>=0) { k++; ArrayResize(aName,k); aName[k-1]=name; } } } } else if (mTypeExternalAP==6) // вилы с текущего графика, выведенные вручную, не с помощью ZUP { for (i=0; i=0) { k++; ArrayResize(aName,k); aName[k-1]=name; } } } } else if (mTypeExternalAP==7) // любые внешние вилы { if (mTypeBasiclAP==0) { for (i=0; i=0 && (StringLen(name)>StringLen("pitchforkS" + ExtComplekt+"_")+4 || StringFind(name,"pitchforkS" + ExtComplekt+"_",0)<0)) { k++; ArrayResize(aName,k); aName[k-1]=name; } if (StringFind(name,"pitchforkD",0)>=0) { k++; ArrayResize(aName,k); aName[k-1]=name; } if (StringFind(name,"Andrews Pitchfork",0)>=0) { k++; ArrayResize(aName,k); aName[k-1]=name; } } } } else if (mTypeBasiclAP==1) { for (i=0; i=0 && (StringLen(name)>StringLen("pitchforkD" + ExtComplekt+"_")+4 || StringFind(name,"pitchforkD" + ExtComplekt+"_",0)<0)) { k++; ArrayResize(aName,k); aName[k-1]=name; } if (StringFind(name,"pitchforkS",0)>=0) { k++; ArrayResize(aName,k); aName[k-1]=name; } if (StringFind(name,"Andrews Pitchfork",0)>=0) { k++; ArrayResize(aName,k); aName[k-1]=name; } } } } } } //-------------------------------------------------------- // Проверка наличия внешних вил для расчета меток пересечения вил // и сохранение названий внешних вил в массив. // Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Заполнение массива значениями RL для расчета ценовых // меток (metkaAP) в вилах Эндрюса. Начало. //-------------------------------------------------------- void RLtoArray (double& aRL[], string nameRL, string fiboFree) { int i, j, k; string str; if(ObjectFind(nameRL)>-1) { j=ObjectGet(nameRL,OBJPROP_FIBOLEVELS); ArrayResize(aRL,j); k=0; if (ExtFiboFreePitchfork || ExtFiboType==2) k=0; else if (ExtFiboType==0) { if (ExtRL146) { aRL[0]=0.146; k=1; } } else if (ExtFiboType==1) { if (ExtRL146) { aRL[0]=0.146; aRL[1]=0.236; k=2; } } for (i=0;k=0) str=StringSubstr(str,k+1); } } ArraySort(aRL); } //-------------------------------------------------------- // Заполнение массива значениями RL для расчета ценовых // меток (metkaAP) в вилах Эндрюса. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод UWL_LWL. Начало. //-------------------------------------------------------- void UWL_LWL (bool visible, string nameObj_, string WL, string fiboFree) { int i,j,k; string str=""; double fi; if (ExtFiboFreePitchfork || ExtFiboType==2) { str=fiboFree; } else { str="0.146,0.236,0.382,0.5,0.618,0.764,0.854,1,1.618,2.0,2.618,4.236"; } j=quantityFibo (str); ObjectSet(nameObj_,OBJPROP_FIBOLEVELS,j+1); for (i=0;i<=j;i++) { k=StringFind(str, ",", 0); fi=StrToDouble(StringTrimLeft(StringTrimRight(StringSubstr(str,0,k)))); ObjectSet(nameObj_,OBJPROP_FIRSTLEVEL+i,fi); if (visible) ObjectSetFiboDescription(nameObj_, i, WL+DoubleToStr(fi*100,1)); if (k>=0) str=StringSubstr(str,k+1); } } //-------------------------------------------------------- // Вывод UWL_LWL. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // фибо-Time. Начало. //-------------------------------------------------------- void fiboTimeX() { bool ft1, ft2, ft3; color ftc1, ftc2, ftc3; ft1=ExtFiboTime1; ft2=ExtFiboTime2; ft3=ExtFiboTime3; ftc1=ExtFiboTime1C; ftc2=ExtFiboTime2C; ftc3=ExtFiboTime3C; if (ExtFiboTimeNum>2) { ft1=ExtFiboTime1x; ft2=ExtFiboTime2x; ft3=ExtFiboTime3x; ftc1=ExtFiboTime1Cx; ftc2=ExtFiboTime2Cx; ftc3=ExtFiboTime3Cx; int mft[]={0,0,0}; string aa=DoubleToStr(ExtFiboTimeNum,0); double ftmincena; mft[0]=StrToInteger(StringSubstr(aa,0,1)); mft[1]=StrToInteger(StringSubstr(aa,1,1)); mft[2]=StrToInteger(StringSubstr(aa,2,1)); ArraySort(mft,WHOLE_ARRAY,0,MODE_DESCEND); if (mft[0]<3) ExtFiboTimeNum=0; else { if (mft[1]==1) mft[1]++; if (mft[1]==0) {mft[1]=mft[0]-1; mft[2]=mft[1]-1;} if (mft[2]==0) mft[2]=mft[1]-1; } if (afrx[mft[0]]afrx[mft[2]]) ftmincena=afrx[mft[2]]; } if (ft1) { if (ExtFiboTimeNum>2) { nameObj="fiboTime1Free" + ExtComplekt+"_"; } else { nameObj="fiboTime1" + ExtComplekt+"_"; } if (ExtSave) { if (ExtFiboTimeNum>2) { nameObj=nameObj + save; } else { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } } ObjectDelete(nameObj); if (ExtFiboTimeNum>2) { ObjectCreate(nameObj,OBJ_FIBOTIMES,0,afr[mft[0]],ftmincena-5*Point,afr[mft[2]],ftmincena-5*Point); } else { if (ExtPitchforkCandle) { if (!ExtPitchfork_1_HighLow) { if (mPitchCena[0]>mPitchCena[2]) { ObjectCreate(nameObj,OBJ_FIBOTIMES,0,mPitchTime[0],mPitchCena[2]-5*Point,mPitchTime[2],mPitchCena[2]-5*Point); } else { ObjectCreate(nameObj,OBJ_FIBOTIMES,0,mPitchTime[0],mPitchCena[0]-5*Point,mPitchTime[2],mPitchCena[0]-5*Point); } } else { ObjectCreate(nameObj,OBJ_FIBOTIMES,0,mPitchTime[0],mPitchCena[1]-5*Point,mPitchTime[2],mPitchCena[1]-5*Point); } } else { if (afrl[mPitch[0]]>0) { if (afrl[mPitch[0]]>afrl[mPitch[2]]) { ObjectCreate(nameObj,OBJ_FIBOTIMES,0,mPitchTime[0],mPitchCena[2]-5*Point,mPitchTime[2],mPitchCena[2]-5*Point); } else { ObjectCreate(nameObj,OBJ_FIBOTIMES,0,mPitchTime[0],mPitchCena[0]-5*Point,mPitchTime[2],mPitchCena[0]-5*Point); } } else { ObjectCreate(nameObj,OBJ_FIBOTIMES,0,mPitchTime[0],mPitchCena[1]-5*Point,mPitchTime[2],afrl[mPitch[1]]-5*Point); } } } ObjectSet(nameObj,OBJPROP_LEVELCOLOR,ftc1); if (ExtFiboTimeNum>2) { fiboTime (nameObj, afr[mft[0]], afr[mft[2]]-afr[mft[0]], 0, "FT1_"); } else { fiboTime (nameObj, mPitchTime[0], mPitchTime[2]-mPitchTime[0], 0, "FT1 "); } } if (ft2) { if (ExtFiboTimeNum>2) { nameObj="fiboTime2Free" + ExtComplekt+"_"; } else { nameObj="fiboTime2" + ExtComplekt+"_"; } if (ExtSave) { if (ExtFiboTimeNum>2) { nameObj=nameObj + save; } else { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } } ObjectDelete(nameObj); if (ExtFiboTimeNum>2) { ObjectCreate(nameObj,OBJ_FIBOTIMES,0,afr[mft[1]],(afrx[mft[2]]+afrx[mft[1]])/2,afr[mft[2]],(afrx[mft[2]]+afrx[mft[1]])/2); } else { ObjectCreate(nameObj,OBJ_FIBOTIMES,0,mPitchTime[1],(mPitchCena[2]+mPitchCena[1])/2,mPitchTime[2],(mPitchCena[2]+mPitchCena[1])/2); } ObjectSet(nameObj,OBJPROP_LEVELCOLOR,ftc2); if (ExtFiboTimeNum>2) { fiboTime (nameObj, afr[mft[1]], afr[mft[2]]-afr[mft[1]], 1, "FT2_"); } else { fiboTime (nameObj, mPitchTime[1], mPitchTime[2]-mPitchTime[1], 1, "FT2 "); } } if (ft3) { datetime shiftTime; if (ExtFiboTimeNum>2) { shiftTime=afr[mft[1]]-afr[mft[0]]; nameObj="fiboTime3Free" + ExtComplekt+"_"; } else { shiftTime=mPitchTime[1]-mPitchTime[0]; nameObj="fiboTime3" + ExtComplekt+"_"; } if (ExtSave) { if (ExtFiboTimeNum>2) { nameObj=nameObj + save; } else { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } } ObjectDelete(nameObj); if (ExtFiboTimeNum>2) { ObjectCreate(nameObj,OBJ_FIBOTIMES,0,afr[mft[2]]-shiftTime,(afrx[mft[2]]+afrx[mft[1]])/2-8*Point,afr[mft[2]],(afrx[mft[2]]+afrx[mft[1]])/2-8*Point); } else { ObjectCreate(nameObj,OBJ_FIBOTIMES,0,mPitchTime[2]-shiftTime,(mPitchCena[2]+mPitchCena[1])/2-8*Point,mPitchTime[2],(mPitchCena[2]+mPitchCena[1])/2-8*Point); } ObjectSet(nameObj,OBJPROP_LEVELCOLOR,ftc3); if (ExtFiboTimeNum>2) { fiboTime (nameObj, afr[mft[2]]-shiftTime, shiftTime, 2, "FT3_"); } else { fiboTime (nameObj, mPitchTime[2]-shiftTime, shiftTime, 2, "FT3 "); } } } //-------------------------------------------------------- // фибо-Time. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // фибо-Time. Начало. //-------------------------------------------------------- void fiboTime (string nameObj, datetime t1, datetime t2, int number, string ftx) { string str="", str1=""; double fi; int j,k; int ftvisibleDT; string ftvisible=""; if (ExtFiboTimeNum>2) { ftvisibleDT=ExtVisibleDateTimex; ftvisible=ExtVisibleNumberFiboTimex; } else { ftvisibleDT=ExtVisibleDateTime; ftvisible=ExtVisibleNumberFiboTime; } ObjectSet(nameObj,OBJPROP_COLOR,ExtObjectColor); ObjectSet(nameObj,OBJPROP_STYLE,ExtObjectStyle); ObjectSet(nameObj,OBJPROP_WIDTH,ExtObjectWidth); ObjectSet(nameObj,OBJPROP_LEVELSTYLE,STYLE_DOT); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); if (ExtFiboFreePitchfork || ExtFiboType==2) // Фибы фибо-Time с пользовательскими числами. { if (number==0) { str=ExtFiboFreeFT1; } else if (number==1) { str=ExtFiboFreeFT2; } else if (number==2) { str=ExtFiboFreeFT3; } } else if (ExtFiboType==1) // Фибы фибо-Time с числами Песавенто. { str="0.382,0.5,0.618,0.707,0.786,0.886,1.0,1.272,1.414,1.618,2.0,2.414,2.618,3.0"; } else if (ExtFiboType==0) // Фибы фибо-Time со стандартными числами. { str="0.146,0.236,0.382,0.5,0.618,0.764,0.854,1.0,1.236,1.382,1.618,2.0,2.618,3.0,4.236"; } j=quantityFibo (str); ObjectSet(nameObj,OBJPROP_FIBOLEVELS, j+3); ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+0,0.0); ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+1,1.0); if (ftvisibleDT && StringSubstr(ftvisible,number,1)=="1") { ObjectSetFiboDescription(nameObj, 0, ftx + "0" + " " + TimeToStr(t1,TIME_DATE|TIME_MINUTES)); ObjectSetFiboDescription(nameObj, 1, ftx + "1.0" + " " + TimeToStr(t1 + t2,TIME_DATE|TIME_MINUTES)); } else { ObjectSetFiboDescription(nameObj, 0, ftx + "0"); ObjectSetFiboDescription(nameObj, 1, ftx + "1.0"); } for (int i=0; i<=j; i++) { k=StringFind(str, ",", 0); str1=StringTrimLeft(StringTrimRight(StringSubstr(str,0,k))); fi=StrToDouble(str1); if (fi<1) str1=StringSubstr(str1,1); ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+(i+2),fi+1); if (ftvisibleDT && StringSubstr(ftvisible,number,1)=="1") { ObjectSetFiboDescription(nameObj, i+2, ftx + str1 + " " + TimeToStr(t1 + t2*(fi+1),TIME_DATE|TIME_MINUTES)); } else { ObjectSetFiboDescription(nameObj, i+2, ftx + str1); } if (k>=0) str=StringSubstr(str,k+1); } } //-------------------------------------------------------- // фибо-Time. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Счетчик фиб. Начало. //-------------------------------------------------------- int quantityFibo (string sFibo) { int j=0,i,k; while (true) { k=StringFind(sFibo, ",",i+1); if (k>0) {j++; i=k;} else return (j); } } //-------------------------------------------------------- // Счетчик фиб. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод вил Эндрюса динамических. Начало. //-------------------------------------------------------- void screenPitchforkD() { int i; double b1,ab1,bc1,ab2,bc2,d,cena,m618=phi-1,m382=2-phi,wr,wr1,wr2; datetime tb1,tab2,tbc2,twr1,twr2; int a0,b0,c0; int pitch_time[]={0,0,0}; double pitch_cena[]={0,0,0}; mPitchTime[0]=afr[2]; mPitchTime[1]=afr[1]; mPitchTime[2]=afr[0]; mPitchCena[0]=afrx[2]; mPitchCena[1]=afrx[1]; mPitchCena[2]=afrx[0]; if (mPitchTime[0]==0) return; cena=afrx[2]; if (afrl[2]>0) { if (ExtCM_0_1A_2B_Dinamic==1) { cena=mPitchCena[0]+(mPitchCena[1]-mPitchCena[0])*ExtCM_FiboDinamic; } else if (ExtCM_0_1A_2B_Dinamic==4) { mPitchTimeSave=mPitchTime[0]; mPitchTime[0]=mPitchTime[1]; if (maxGipotenuza4(mPitchTime,mPitchCena)) { cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*m618; } else { cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*m382; } } else if (ExtCM_0_1A_2B_Dinamic==5) { mPitchTimeSave=mPitchTime[0]; mPitchTime[0]=mPitchTime[1]; if (maxGipotenuza5(mPitchTime,mPitchCena)) { cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*m618; } else { cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*m382; } } else if (ExtCM_0_1A_2B_Dinamic>1) { if (ExtCM_0_1A_2B_Dinamic==2) mPitchTime[0]=mPitchTime[1]; cena=mPitchCena[1]-(mPitchCena[1]-mPitchCena[2])*ExtCM_FiboDinamic; } } else { if (ExtCM_0_1A_2B_Dinamic==1) { cena=mPitchCena[0]-(mPitchCena[0]-mPitchCena[1])*ExtCM_FiboDinamic; } else if (ExtCM_0_1A_2B_Dinamic==4) { mPitchTimeSave=mPitchTime[0]; mPitchTime[0]=mPitchTime[1]; if (maxGipotenuza4(mPitchTime,mPitchCena)) { cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*m618; } else { cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*m382; } } else if (ExtCM_0_1A_2B_Dinamic==5) { mPitchTimeSave=mPitchTime[0]; mPitchTime[0]=mPitchTime[1]; if (maxGipotenuza5(mPitchTime,mPitchCena)) { cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*m618; } else { cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*m382; } } else if (ExtCM_0_1A_2B_Dinamic>1) { if (ExtCM_0_1A_2B_Dinamic==2) mPitchTime[0]=mPitchTime[1]; cena=mPitchCena[1]+(mPitchCena[2]-mPitchCena[1])*ExtCM_FiboDinamic; } } mPitchCena[0]=cena; coordinaty_1_2_mediany_AP(mPitchCena[0], mPitchCena[1], mPitchCena[2], mPitchTime[0], mPitchTime[1], mPitchTime[2], tab2, tbc2, ab1, bc1, ExtPitchforkDinamic, ExtPitchforkDinamicCustom); pitch_time[0]=tab2;pitch_cena[0]=ab1; nameObj="pmedianaD" + ExtComplekt+"_"; ObjectDelete(nameObj); if (ExtPitchforkDinamic==2) { ObjectCreate(nameObj,OBJ_TREND,0,tab2,ab1,tbc2,bc1); ObjectSet(nameObj,OBJPROP_STYLE,STYLE_DASH); ObjectSet(nameObj,OBJPROP_COLOR,ExtLinePitchforkD); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); if (ExtSLMDinamic) { b0=iBarShift(Symbol(),Period(),mPitchTime[1]); c0=iBarShift(Symbol(),Period(),mPitchTime[2]); // смещение slm wr=(ObjectGetValueByShift(nameObj,c0)-mPitchCena[2])*(1-2*m382); //номер бара точки 1 a0=c0-(c0-b0)*m382-1; // время точки 1 twr1=iTime(Symbol(),Period(),a0); // цена точки 1 wr1=ObjectGetValueByShift(nameObj,a0)-wr; // координаты точки 2 wr2=ObjectGetValueByShift(nameObj,0)-wr; twr2=iTime(Symbol(),Period(),0); nameObj="SLM382D" + ExtComplekt+"_"; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TREND,0,twr1,wr1,twr2,wr2); ObjectSet(nameObj,OBJPROP_STYLE,STYLE_DASH); ObjectSet(nameObj,OBJPROP_COLOR,ExtSLMDinamicColor); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); //номер бара точки 1 a0=c0-(c0-b0)*m618-1; // время точки 1 twr1=iTime(Symbol(),Period(),a0); // цена точки 1 nameObj="pmedianaD" + ExtComplekt+"_"; wr1=ObjectGetValueByShift(nameObj,a0)+wr; // координаты точки 2 wr2=ObjectGetValueByShift(nameObj,0)+wr; twr2=iTime(Symbol(),Period(),0); nameObj="SLM618D" + ExtComplekt+"_"; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TREND,0,twr1,wr1,twr2,wr2); ObjectSet(nameObj,OBJPROP_STYLE,STYLE_DASH); ObjectSet(nameObj,OBJPROP_COLOR,ExtSLMDinamicColor); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); } if (ExtFSLShiffLinesDinamic) { c0=iBarShift(Symbol(),Period(),mPitchTime[1]); // время точки 1 twr1=mPitchTime[1]; // цена точки 1 wr1=mPitchCena[1]; // координаты точки 2 nameObj="pmedianaD" + ExtComplekt+"_"; wr2=ObjectGetValueByShift(nameObj,0)-ObjectGetValueByShift(nameObj,c0)+mPitchCena[1]; twr2=iTime(Symbol(),Period(),0); nameObj="FSL Shiff Lines D" + ExtComplekt+"_"; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TREND,0,twr1,wr1,twr2,wr2); ObjectSet(nameObj,OBJPROP_STYLE,STYLE_DASH); ObjectSet(nameObj,OBJPROP_COLOR,ExtFSLShiffLinesDinamicColor); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); } nameObj="1-2pmedianaD" + ExtComplekt+"_"; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TEXT,0,tab2,ab1+3*Point); ObjectSetText(nameObj," 1/2 ML",9,"Arial", ExtLinePitchforkD); } nameObj="pitchforkD" + ExtComplekt+"_"; if (ExtPitchforkDinamic!=4) { pitch_time[0]=mPitchTime[0];pitch_cena[0]=mPitchCena[0]; if (ExtPitchforkDinamic==3) pitch_cena[0]=ab1; } pitch_time[1]=mPitchTime[1];pitch_cena[1]=mPitchCena[1]; pitch_time[2]=mPitchTime[2];pitch_cena[2]=mPitchCena[2]; // Вывод меток в вилах Эндрюса mAPd=false; if (ObjectFind(nameObj)>=0) { if (mAP) { if (ObjectGet(nameObj,OBJPROP_TIME1)!=pitch_time[0] || ObjectGet(nameObj,OBJPROP_PRICE1)!=pitch_cena[0] || ObjectGet(nameObj,OBJPROP_TIME2)!=pitch_time[1] || ObjectGet(nameObj,OBJPROP_PRICE2)!=pitch_cena[1] || ObjectGet(nameObj,OBJPROP_TIME3)!=pitch_time[2] || ObjectGet(nameObj,OBJPROP_PRICE3)!=pitch_cena[2]) { mAPd=true; RZd=-1; } } ObjectDelete(nameObj); } else if (mAP) {mAPd=true; RZd=-1;} if (mAuto_d) { ObjectDelete(nameUWLd); ObjectDelete(nameLWLd); ObjectDelete(nameUTLd); ObjectDelete(nameLTLd); if (mOutRedZone) { pitch_timeD[0]=pitch_time[0];pitch_cenaD[0]=pitch_cena[0]; pitch_timeD[1]=pitch_time[1];pitch_cenaD[1]=pitch_cena[1]; pitch_timeD[2]=pitch_time[2];pitch_cenaD[2]=pitch_cena[2]; aOutRedZone[0]=false; _RZ("RZD", ExtRZDinamicValue, ExtRZDinamicColor, pitch_timeD, pitch_cenaD, ExtRedZoneDinamic, 1, false); } } ObjectCreate(nameObj,OBJ_PITCHFORK,0,pitch_time[0],pitch_cena[0],pitch_time[1],pitch_cena[1],pitch_time[2],pitch_cena[2]); ObjectSet(nameObj,OBJPROP_STYLE,ExtPitchforkStyle); ObjectSet(nameObj,OBJPROP_WIDTH,ExtPitchforkWidth); ObjectSet(nameObj,OBJPROP_COLOR,ExtLinePitchforkD); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); if (ExtMasterPitchfork==1) { nameObjAPMaster="Master_"+nameObj; ObjectDelete(nameObjAPMaster); ObjectCreate(nameObjAPMaster,OBJ_PITCHFORK,0,pitch_time[0],pitch_cena[0],pitch_time[1],pitch_cena[1],pitch_time[2],pitch_cena[2]); ObjectSet(nameObjAPMaster,OBJPROP_STYLE,ExtPitchforkStyle); ObjectSet(nameObjAPMaster,OBJPROP_WIDTH,ExtPitchforkWidth); ObjectSet(nameObjAPMaster,OBJPROP_COLOR,CLR_NONE); ObjectSet(nameObjAPMaster,OBJPROP_BACK,true); } if (ExtPivotZoneDinamicColor>0 && ExtPitchforkDinamic<4) PivotZone(pitch_time, pitch_cena, ExtPivotZoneDinamicColor, "PivotZoneD"); if (ExtFiboFanMedianaDinamicColor>0) { coordinaty_mediany_AP(pitch_cena[0], pitch_cena[1], pitch_cena[2], pitch_time[0], pitch_time[1], pitch_time[2], tb1, b1); nameObj="FanMedianaDinamic" + ExtComplekt+"_"; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_FIBOFAN,0,pitch_time[0],pitch_cena[0],tb1,b1); ObjectSet(nameObj,OBJPROP_LEVELSTYLE,STYLE_DASH); ObjectSet(nameObj,OBJPROP_LEVELCOLOR,ExtFiboFanMedianaDinamicColor); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); if (ExtFiboType==0) { screenFibo_st(); } else if (ExtFiboType==1) { screenFibo_Pesavento(); } else if (ExtFiboType==2) { ObjectSet(nameObj,OBJPROP_FIBOLEVELS,Sizefi); for (i=0;i0) { channelISL(pitch_cena[0], pitch_cena[1], pitch_cena[2], pitch_time[0], pitch_time[1], pitch_time[2], 1); } //-------------------------------------------------------- if (ExtISLDinamic) { _ISL("ISL_D", pitch_time, pitch_cena, ExtLinePitchforkD, ExtISLStyleDinamic, 1, ""); } //-------------------------------------------------------- if (ExtRLDinamic) { _RL("RLineD", pitch_time, pitch_cena, ExtLinePitchforkD, ExtRLStyleDinamic, ExtVisibleRLDinamic, 1, ""); } //-------------------------------------------------------- if (ExtRedZoneDinamic>0) { _RZ("RZD", ExtRZDinamicValue, ExtRZDinamicColor, pitch_time, pitch_cena, ExtRedZoneDinamic, 1, true); } //-------------------------------------------------------- } //-------------------------------------------------------- // Вывод вил Эндрюса динамических. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод ISL. Начало. //-------------------------------------------------------- void _ISL(string nameISL, datetime pitch_time[], double pitch_cena[], color lineColor, int lineStyle, int StaticDinamic, string suffcs) // StaticDinamic 0 - Static, 1 - Dinamic { int i,j,k, a, b, c, znak=1; string str=""; double fi,a1,b1,c1,tangens,x; datetime ta1,tb1,tc1; datetime twr; if (pitch_time[2]=pitch_time[0]) a=iBarShift(Symbol(),Period(),pitch_time[0]); else a=-(pitch_time[0]-twr)/(Period()*60); if (twr>=pitch_time[1]) b=iBarShift(Symbol(),Period(),pitch_time[1]); else b=-(pitch_time[1]-twr)/(Period()*60); if (twr>=pitch_time[2]) c=iBarShift(Symbol(),Period(),pitch_time[2]); else c=-(pitch_time[2]-twr)/(Period()*60); x=a-(b+c)/2.0; ta1=pitch_time[1]; a1=pitch_cena[1]; tangens=znak*(pitch_cena[0]-(pitch_cena[1]+pitch_cena[2])/2.0)/x; ML_RL400(tangens, pitch_cena, pitch_time, tb1, b1, true); tc1=pitch_time[2]; c1=pitch_cena[2]; nameObj=nameISL + ExtComplekt+"_" + suffcs; if (ExtSave && nameISL=="ISL_S") { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_FIBOCHANNEL,0,ta1,a1,tb1,b1,tc1,c1); ObjectSet(nameObj,OBJPROP_LEVELCOLOR,lineColor); ObjectSet(nameObj,OBJPROP_LEVELSTYLE,lineStyle); ObjectSet(nameObj,OBJPROP_LEVELWIDTH,ExtISLWidth); ObjectSet(nameObj,OBJPROP_RAY,false); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); ObjectSet(nameObj,OBJPROP_COLOR,CLR_NONE); if (StaticDinamic==2) { str="0.618,0.382"; } else if (ExtFiboFreePitchfork || ExtFiboType==2) { if (StaticDinamic==0) { str=ExtFiboFreeISLStatic ; } else { str=ExtFiboFreeISLDinamic; } } else if (ExtFiboType==0) { str="0.854,0.764,0.618,0.382,0.236,0.146"; } else if (ExtFiboType==1) { str="0.886,0.786,0.618,0.382,0.236,0.146"; } j=quantityFibo (str); ObjectSet(nameObj,OBJPROP_FIBOLEVELS,j+1); for (i=0;i<=j;i++) { k=StringFind(str, ",", 0); fi=StrToDouble(StringTrimLeft(StringTrimRight(StringSubstr(str,0,k)))); ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+i,-fi); if (StaticDinamic==0) { if (ExtVisibleISLStatic) ObjectSetFiboDescription(nameObj, i," ISL "+DoubleToStr(fi*100,1)); } else if (StaticDinamic==1) { if (ExtVisibleISLDinamic) ObjectSetFiboDescription(nameObj, i," ISL "+DoubleToStr(fi*100,1)); } else { if (mVisibleISL) ObjectSetFiboDescription(nameObj, i," ISL "+DoubleToStr(fi*100,1)); } if (k>=0) str=StringSubstr(str,k+1); } } //-------------------------------------------------------- // Вывод ISL. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод RLine. Начало. //-------------------------------------------------------- void _RL(string nameRL, datetime pitch_time[], double pitch_cena[], color lineColor, int lineStyle, bool visibleRL, int StaticDinamic, string RZ) // StaticDinamic 0 - Static, 1 - Dinamic { string str=""; double fi; int i,j,k,n,nbase1,nbase2,mirror1,mirror2; double a1,b1,c1; datetime ta1,tb1,tc1; n=iBarShift(Symbol(),Period(),pitch_time[0])-(iBarShift(Symbol(),Period(),pitch_time[1])+iBarShift(Symbol(),Period(),pitch_time[2]))/2.0; nbase1=iBarShift(Symbol(),Period(),mPitchTime[1]); nbase2=iBarShift(Symbol(),Period(),mPitchTime[2]); if (nbase1+n<=Bars) { mirror1=1; mirror2=0; ta1=Time[nbase1+n]; tb1=Time[nbase2+n]; tc1=mPitchTime[1]; a1=(pitch_cena[0]-(mPitchCena[1]+mPitchCena[2])/2)+mPitchCena[1]; b1=(pitch_cena[0]-(mPitchCena[1]+mPitchCena[2])/2)+mPitchCena[2]; c1=mPitchCena[1]; } else { mirror1=-1; mirror2=-1; ta1=mPitchTime[2]; tb1=mPitchTime[1]; tc1=Time[nbase2+n]; a1=mPitchCena[2]; b1=mPitchCena[1]; c1=(pitch_cena[0]-(mPitchCena[1]+mPitchCena[2])/2)+mPitchCena[2]; } nameObj=nameRL + ExtComplekt+"_"; if (nameRL=="RZS" || nameRL=="RZD") { if (ExtSave && nameRL=="RZS") { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } j=1; str=RZ; } else { if (ExtSave && nameRL=="RLineS") { if (ExtPitchforkCandle && iBarShift(Symbol(),Period(),ExtDateTimePitchfork_3)>0) { nameObj=nameObj + save; } else { if (mPitch[2]>0) { nameObj=nameObj + save; } } } if (ExtFiboFreePitchfork || ExtFiboType==2) { if (StaticDinamic==0) { j=quantityFibo (ExtFiboFreeRLStatic); str=ExtFiboFreeRLStatic; } else { j=quantityFibo (ExtFiboFreeRLDinamic); str=ExtFiboFreeRLDinamic; } } else if (ExtFiboType==1) { if (ExtRL146) j=16; else j=14; str="0.382,0.5,0.618,0.707,0.786,0.886,1,1.128,1.272,1.414,1.618,2.0,2.414,2.618,4.236,0.146,0.236"; } else if (ExtFiboType==0) { if (ExtRL146) j=12; else j=11; str="0.236,0.382,0.5,0.618,0.764,0.854,1,1.236,1.618,2.0,2.618,4.236,0.146"; } } ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_FIBOCHANNEL,0,ta1,a1,tb1,b1,tc1,c1); ObjectSet(nameObj,OBJPROP_LEVELCOLOR,lineColor); if (ExtRLineBase) { ObjectSet(nameObj,OBJPROP_COLOR,CLR_NONE); } else { ObjectSet(nameObj,OBJPROP_COLOR,lineColor); } ObjectSet(nameObj,OBJPROP_LEVELSTYLE,lineStyle); ObjectSet(nameObj,OBJPROP_RAY,false); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); ObjectSet(nameObj,OBJPROP_FIBOLEVELS,j+1); for (i=0;i<=j;i++) { k=StringFind(str, ",", 0); fi=StrToDouble(StringTrimLeft(StringTrimRight(StringSubstr(str,0,k)))); ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+i,mirror2+mirror1*fi); if (visibleRL) ObjectSetFiboDescription(nameObj, i, " RL "+DoubleToStr(fi*100,1)); if (k>=0) str=StringSubstr(str,k+1); } } //-------------------------------------------------------- // Вывод RLine. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод RedZone. Начало. //-------------------------------------------------------- void _RZ(string nameRZ, double RZValue, color RZColor, datetime pitch_time[], double pitch_cena[], int RedZone, int StaticDinamic, bool visible) { int i,j,k,n,_nbase1,_nbase2; double b1=0,hRZ=0,delta=0,h=0,hbase=0,tangens23=0,tangensMediana=0,n1,nbase0=0,nbase1=0,nbase2=0; datetime tb1; nbase0=iBarShift(Symbol(),Period(),pitch_time[0]); nbase1=iBarShift(Symbol(),Period(),pitch_time[1]); nbase2=iBarShift(Symbol(),Period(),pitch_time[2]); _nbase1=iBarShift(Symbol(),Period(),pitch_time[1]); _nbase2=iBarShift(Symbol(),Period(),pitch_time[2]); if ((nbase1-nbase2)==0) return; tangens23=(pitch_cena[2]-pitch_cena[1])/(nbase1-nbase2); n1=nbase0-(nbase1+nbase2)/2; if (n1==0) return; tangensMediana=((pitch_cena[2]+pitch_cena[1])/2-pitch_cena[0])/n1; if (pitch_cena[1]>pitch_cena[2]) { for (i=_nbase1-1;i>=_nbase2;i--) { delta=(pitch_cena[1]+(_nbase1-i)*tangens23)-High[i]; if (delta=_nbase2;i--) { delta=(pitch_cena[1]+(_nbase1-i)*tangens23)-Low[i]; if (delta>h) h=delta; } } if (!visible) // поверка на выход из красной зоны { if (pitch_cena[1]>pitch_cena[2]) { for (i=nbase2+1;i>=0;i--) { delta=(pitch_cena[1]+(_nbase1-i)*tangens23)-High[i]; if (delta=0;i--) { delta=(pitch_cena[1]+(_nbase1-i)*tangens23)-Low[i]; if (delta>h) { if (nameRZ=="RZS") {aOutRedZone[1]=true; return;} if (nameRZ=="RZD") {aOutRedZone[0]=true; return;} if (nameRZ=="RZ_") {aOutRedZone[2]=true; return;} } } } return; } if (tangens23==0) return; hbase=pitch_cena[0]-(pitch_cena[1]-(nbase0-nbase1)*tangens23); hRZ=hbase*RZValue; if (RedZone>1) { if (hbase==0) return; if (StaticDinamic==0) { _RL("RZS", pitch_time, pitch_cena, ExtRZStaticColor, ExtRLStyleStatic, true, 0, DoubleToStr(MathAbs(h/hbase),3)); } else { _RL("RZD", pitch_time, pitch_cena, ExtRZDinamicColor, ExtRLStyleDinamic, true, 1, DoubleToStr(MathAbs(h/hbase),3)); } } else { if (infoTF) { if (hbase==0) return; if (nameRZ=="RZS") { info_RZS_RL=DoubleToStr(MathAbs(100*h/hbase),1); } else if (nameRZ=="RZD") { info_RZD_RL=DoubleToStr(MathAbs(100*h/hbase),1); } } if (MathAbs(hRZ)=0) tb1=Time[n]; else tb1=Time[0]+MathAbs(n)*60*Period(); b1=pitch_cena[2]+i*tangens23-hRZ; nameObj=nameRZ + ExtComplekt+"_"; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_CHANNEL,0,pitch_time[2],pitch_cena[2],tb1,b1,pitch_time[1],pitch_cena[1]); ObjectSet(nameObj, OBJPROP_COLOR, RZColor); ObjectSet(nameObj, OBJPROP_BACK, true); ObjectSet(nameObj, OBJPROP_RAY, false); } } //-------------------------------------------------------- // Вывод RedZone. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Подпрограмма вывода канала по ISL .382 - .618. Начало. //-------------------------------------------------------- void channelISL(double A_1, double B_2, double C_3, datetime T_1, datetime T_2, datetime T_3, int StaticDinamic) { double tangens; int n1, n2, n3, nc1, nb1; double c1, c2, b1, b2, nc1_, nb1_; string nameObj=""; // номера баров, от которых строятся вилы Эндрюса n1=iBarShift(Symbol(),Period(),T_1); n2=iBarShift(Symbol(),Period(),T_2); n3=iBarShift(Symbol(),Period(),T_3); // тангенс угла наклона медианы вил Эндрюса tangens=((C_3 + B_2)/2 -A_1)/(n1-(n2 + n3)/2.0); // номера баров точек 1 (nc1) и 3 (nb1) для привязки канала, уменьшенные на n3 nc1_=(n2-n3)*(2.0-phi); nb1_=(n2-n3)*(phi-1); nc1=nc1_; nb1=nb1_; // вычисляем цену в точках 1 и 3 для привязки канала c2=C_3+(B_2+(n2-n3)*tangens-C_3)*(2-phi); b2=C_3+(B_2+(n2-n3)*tangens-C_3)*(phi-1); c1=c2-tangens*nc1; b1=b2-tangens*nb1; nameObj="CISL" + ExtComplekt+"_" + StaticDinamic; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_CHANNEL,0,Time[nc1+n3],c1,Time[0],c2+tangens*n3,Time[nb1+n3],b1); // Time[n3],b2); ObjectSet(nameObj, OBJPROP_BACK, true); if (StaticDinamic==0) { ObjectSet(nameObj, OBJPROP_COLOR, ExtISLChannelStaticColor); } else { ObjectSet(nameObj, OBJPROP_COLOR, ExtISLChannelDinamicColor); } } //-------------------------------------------------------- // Подпрограмма выводв канала по ISL .382 - .618. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Подпрограмма расчета координат 1/2 медианы вил Эндрюса. Начало. //-------------------------------------------------------- // Передаваемые параметры цена и время трех точек вил Эндрюса // а также ссылка на переменные - // tAB2, tBC2 - время баров, через которые проводится 1/2 медиана // AB2, BC2 - ценовое значение точек, через которые проводится 1/2 медиана // void coordinaty_1_2_mediany_AP(double A_1, double B_2, double C_3, datetime T_1, datetime T_2, datetime T_3, datetime& tAB2, datetime& tBC2, double& AB2, double& BC2, int type, double Custom) { double tangens; int n1, n2, n3, nab2, nbc2; datetime twr; // номера баров, от которых строятся вилы Эндрюса twr=iTime(Symbol(),Period(),0); if (T_1<=twr) n1=iBarShift(Symbol(),Period(),T_1); else n1=-(T_1-twr)/(Period()*60); if (T_2<=twr) n2=iBarShift(Symbol(),Period(),T_2); else n2=-(T_2-twr)/(Period()*60); if (T_3<=twr) n3=iBarShift(Symbol(),Period(),T_3); else n3=-(T_3-twr)/(Period()*60); // тангенс угла наклона 1/2 медианы вил Эндрюса if ((n1 - n3)==0) return; tangens=(C_3 - A_1)/(n1 - n3); // номера баров, через которые будет построена 1/2 медиана nab2=MathCeil((n1+n2)/2.0); nbc2=MathCeil((n2+n3)/2.0); // значения цены точек, через которые будет построена 1/2 медиана if (type!=3) { AB2=(A_1 + B_2)/2 - (nab2-(n1+n2)/2.0)*tangens; } else { if (type==3 && Custom<0.00000001) { AB2=(A_1 + B_2)/2; } else if (Custom>8.99999999) { AB2=(A_1 + C_3)/2; } else { AB2=B_2+(C_3-B_2)*Custom; } } BC2=(B_2 + C_3)/2 - (nbc2-(n2+n3)/2.0)*tangens; // время баров, через которые будет построена 1/2 медиана if (nab2>=0) tAB2=iTime(Symbol(),Period(),nab2); else tAB2=iTime(Symbol(),Period(),0)-nab2*Period()*60; if (nbc2>=0) tBC2=iTime(Symbol(),Period(),nbc2); else tBC2=iTime(Symbol(),Period(),0)-nbc2*Period()*60; } //-------------------------------------------------------- // Подпрограмма расчета координат 1/2 медианы вил Эндрюса. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Подпрограмма расчета координаты точки на медиане вил Эндрюса. Начало. //-------------------------------------------------------- // Передаваемые параметры цена и время трех точек вил Эндрюса // а также ссылка на переменные - // tAB2, tBC2 - время баров, через которые проводится 1/2 медиана // AB2, BC2 - ценовое значение точек, через которые проводится 1/2 медиана // void coordinaty_mediany_AP(double A_1, double B_2, double C_3, datetime T_1, datetime T_2, datetime T_3, datetime& tB1, double& B1) { double tangens; int n1, n2, n3, nbc2; // номера баров, от которых строятся вилы Эндрюса n1=iBarShift(Symbol(),Period(),T_1); n2=iBarShift(Symbol(),Period(),T_2); n3=iBarShift(Symbol(),Period(),T_3); // тангенс угла наклона медианы вил Эндрюса if ((n1 - (n3+n2)/2.0)==0) return; tangens=(A_1-(C_3+B_2)/2)/(n1 - (n3+n2)/2.0); if (tangens==0) return; // номер бара, через который проходит медиана nbc2=MathCeil((n2+n3)/2.0); // значения цены точки, через которую проходит медиана B1=(B_2 + C_3)/2 - ((n2+n3)/2.0-nbc2)*tangens; // время бара, через который проходит медиана tB1=Time[nbc2]; } //-------------------------------------------------------- // Подпрограмма расчета координаты точки на медиане вил Эндрюса. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Сравнение гипотенуз для ExtCM_0_1A_2B=4. Начало. //------------------------------------------------------- bool maxGipotenuza4(datetime pitch_time1[], double pitch_cena1[]) { double k2,k3; datetime k4,k5; k2=MathAbs(pitch_cena1[0]-pitch_cena1[1])/ASBar; k3=MathAbs(pitch_cena1[1]-pitch_cena1[2])/ASBar; k4=iBarShift(NULL,GrossPeriod,mPitchTimeSave)-iBarShift(NULL,GrossPeriod,pitch_time1[1]); k5=iBarShift(NULL,GrossPeriod,pitch_time1[1])-iBarShift(NULL,GrossPeriod,pitch_time1[2]); if (k2*k2+k4*k4>k3*k3+k5*k5) return(true); else return(false); } //-------------------------------------------------------- // Сравнение гипотенуз для ExtCM_0_1A_2B=4. Конец. //------------------------------------------------------- //-------------------------------------------------------- // Сравнение гипотенуз для ExtCM_0_1A_2B=5. Начало. //------------------------------------------------------- bool maxGipotenuza5(datetime pitch_time1[], double pitch_cena1[]) { double k2,k3; datetime k4,k5; k2=MathAbs(pitch_cena1[0]-pitch_cena1[1])/Point; k3=MathAbs(pitch_cena1[1]-pitch_cena1[2])/Point; k4=iBarShift(NULL,GrossPeriod,mPitchTimeSave)-iBarShift(NULL,GrossPeriod,pitch_time1[1]); k5=iBarShift(NULL,GrossPeriod,pitch_time1[1])-iBarShift(NULL,GrossPeriod,pitch_time1[2]); if (k2*k2+k4*k4>k3*k3+k5*k5) return(true); else return(false); } //-------------------------------------------------------- // Сравнение гипотенуз для ExtCM_0_1A_2B=5. Конец. //------------------------------------------------------- //-------------------------------------------------------- // Pivot Zone. Начало. //------------------------------------------------------- void PivotZone(datetime pitch_time1[], double pitch_cena1[], color PivotZoneColor, string name) { datetime ta1, tb1; double a1, b1, d, n1; int m, m1, m2; ta1=pitch_time1[2]; a1=pitch_cena1[2]; m1=iBarShift(Symbol(),Period(),pitch_time1[0])-iBarShift(Symbol(),Period(),pitch_time1[1]); m2=iBarShift(Symbol(),Period(),pitch_time1[1])-iBarShift(Symbol(),Period(),pitch_time1[2]); m=iBarShift(Symbol(),Period(),pitch_time1[2]); n1=iBarShift(Symbol(),Period(),pitch_time1[0])-(iBarShift(Symbol(),Period(),pitch_time1[1])+iBarShift(Symbol(),Period(),pitch_time1[2]))/2.0; d=(pitch_cena1[0]-(pitch_cena1[1]+pitch_cena1[2])/2.0)/n1; if (m1>m2) { if (m1>m) { tb1=Time[0]+(m1-m)*Period()*60; } else { tb1=Time[iBarShift(Symbol(),Period(),pitch_time1[2])-m1]; } b1=pitch_cena1[0]-d*(2*m1+m2); } else { if (m2>m) { tb1=Time[0]+(m2-m)*Period()*60; } else { tb1=Time[iBarShift(Symbol(),Period(),pitch_time1[2])-m2]; } b1=pitch_cena1[0]-d*(2*m2+m1); } nameObj=name + ExtComplekt+"_"; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_RECTANGLE,0,ta1,a1,tb1,b1); ObjectSetText(nameObj,"PZ "+Period_tf+" "+TimeToStr(tb1,TIME_DATE|TIME_MINUTES)); ObjectSet(nameObj, OBJPROP_BACK, ExtPivotZoneFramework); ObjectSet(nameObj, OBJPROP_COLOR, PivotZoneColor); } //-------------------------------------------------------- // Pivot Zone. Конец. //------------------------------------------------------- //-------------------------------------------------------- // Определение точки пересечения RL400 медианы. Начало. //------------------------------------------------------- // flag=true - рассчитывается ISL // flag=false - рассчитывается UWL/LWL void ML_RL400(double Tangens, double pitch_cena1[], datetime pitch_time1[], int& tB1, double& B1, bool flag) { int m, m1, m2, a, b, c; datetime twr; twr=iTime(Symbol(),Period(),0); if (twr>=pitch_time1[0]) a=iBarShift(Symbol(),Period(),pitch_time1[0]); else a=-(pitch_time1[0]-twr)/(Period()*60); if (twr>=pitch_time1[1]) b=iBarShift(Symbol(),Period(),pitch_time1[1]); else b=-(pitch_time1[1]-twr)/(Period()*60); if (twr>=pitch_time1[2]) c=iBarShift(Symbol(),Period(),pitch_time1[2]); else c=-(pitch_time1[2]-twr)/(Period()*60); m1=a; m2=MathCeil((b+c)/2.0); m=(m1-m2)*6.85; // *4 04-01-2012 if (m>m2) { tB1=Time[0]+(m-m2)*Period()*60; if (tB1<0) tB1=2133648000; if (flag) { B1=pitch_cena1[1]-Tangens*(b+(tB1-Time[0])/(60*Period())); } else { B1=pitch_cena1[0]-Tangens*(a+(tB1-Time[0])/(60*Period())); } } else { tB1=Time[m2-m]; if (flag) B1=pitch_cena1[1]-Tangens*(b-iBarShift(Symbol(),Period(),tB1)); else B1=pitch_cena1[0]-Tangens*(a-iBarShift(Symbol(),Period(),tB1)); } } //-------------------------------------------------------- // Определение точки пересечения RL400 медианы. Конец. //------------------------------------------------------- //-------------------------------------------------------- // Вывод произвольных фибовееров. Начало. //-------------------------------------------------------- void screenFiboFan() { int i; double a1,b1; a1=afrx[mFan[0]]; b1=afrx[mFan[1]]; nameObj="FiboFan" + ExtComplekt+"_"; if (mFan[1]>0) { if (ExtSave) { nameObj=nameObj + save; } } ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_FIBOFAN,0,afr[mFan[0]],a1,afr[mFan[1]],b1); ObjectSet(nameObj,OBJPROP_LEVELSTYLE,ExtFanStyle); ObjectSet(nameObj,OBJPROP_LEVELWIDTH,ExtFanWidth); ObjectSet(nameObj,OBJPROP_LEVELCOLOR,ExtFiboFanColor); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); ObjectSet(nameObj,OBJPROP_COLOR,ExtObjectColor); ObjectSet(nameObj,OBJPROP_STYLE,ExtObjectStyle); ObjectSet(nameObj,OBJPROP_WIDTH,ExtObjectWidth); if (ExtFiboType==0) { screenFibo_st(); } else if (ExtFiboType==1) { screenFibo_Pesavento(); } else if (ExtFiboType==2) { ObjectSet(nameObj,OBJPROP_FIBOLEVELS,Sizefi); for (i=0;i0) { if (ExtSave) { nameObj=nameObj + save; } } screenFibo_(ExtFiboS, " ", mFibo[0], mFibo[1]); } //-------------------------------------------------------- // Вывод фиб статических. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод фиб динамических. Начало. //-------------------------------------------------------- void screenFiboD() { nameObj="fiboD" + ExtComplekt+"_"; screenFibo_(ExtFiboD, "", 1, 0); } //-------------------------------------------------------- // Вывод фиб динамических. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Создание фиб. Начало. //-------------------------------------------------------- void screenFibo_(color colorFibo, string otstup, int a1, int a2) { 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;i0) { ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+i+2,1+fi[i]); ObjectSetFiboDescription(nameObj, i+2, "Fe "+fitxt100[i]+" "+" %$"+fibo); } } } } //-------------------------------------------------------- // Фибы пользовательские. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод фибо-дуг статических. Начало. //-------------------------------------------------------- void screenFiboArcS() { double fibo_0, fibo_100, AutoScale; fibo_0=afrx[mArcS[0]];fibo_100=afrx[mArcS[1]]; if (ExtArcStaticScale>0) { AutoScale=ExtArcStaticScale; } else { AutoScale=(MathAbs(fibo_0-fibo_100)/Point)/MathAbs(iBarShift(Symbol(),Period(),afr[mArcS[1]])-iBarShift(Symbol(),Period(),afr[mArcS[0]])); } nameObj="FiboArcS" + ExtComplekt+"_"; if (ExtSave) { nameObj=nameObj + save; } ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_FIBOARC,0,afr[mArcS[0]],fibo_0,afr[mArcS[1]],fibo_100); fiboArc(AutoScale, ExtArcStaticColor); } //-------------------------------------------------------- // Вывод фибо-дуг статических. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод фибо-дуг динамических. Начало. //-------------------------------------------------------- void screenFiboArcD() { double fibo_0, fibo_100, AutoScale; fibo_0=afrx[mArcD[0]];fibo_100=afrx[mArcD[1]]; if (ExtArcDinamicScale>0) { AutoScale=ExtArcDinamicScale; } else { AutoScale=(MathAbs(fibo_0-fibo_100)/Point)/MathAbs(iBarShift(Symbol(),Period(),afr[mArcD[1]])-iBarShift(Symbol(),Period(),afr[mArcD[0]])); } nameObj="FiboArcD" + ExtComplekt+"_"; ObjectDelete(nameObj); ObjectCreate(nameObj, OBJ_FIBOARC,0,afr[mArcD[0]],fibo_0,afr[mArcD[1]],fibo_100); fiboArc(AutoScale, ExtArcDinamicColor); } //-------------------------------------------------------- // Вывод фибо-дуг динамических. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Фибы для фибо-дуг. Начало. //-------------------------------------------------------- void fiboArc(double AutoScale, color ArcColor) { ObjectSet(nameObj,OBJPROP_SCALE,AutoScale); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); ObjectSet(nameObj,OBJPROP_COLOR,ExtObjectColor); ObjectSet(nameObj,OBJPROP_STYLE,ExtObjectStyle); ObjectSet(nameObj,OBJPROP_WIDTH,ExtObjectWidth); ObjectSet(nameObj,OBJPROP_ELLIPSE,true); ObjectSet(nameObj,OBJPROP_LEVELCOLOR,ArcColor); ObjectSet(nameObj,OBJPROP_LEVELSTYLE,ExtArcStyle); ObjectSet(nameObj,OBJPROP_LEVELWIDTH,ExtArcWidth); if (ExtFiboType==0) { fiboArc_st(); } else if (ExtFiboType==1) { fiboArc_Pesavento(); } else if (ExtFiboType==2) { fiboArc_custom(); } } //-------------------------------------------------------- // Фибы для фибо-дуг. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Фибы для стандартных фибо-дуг. Начало. //-------------------------------------------------------- void fiboArc_st() { double fi_1[]={0.0, 0.146, 0.236, 0.382, 0.5, 0.618, 0.764, 0.854, 1.0, 1.236, phi, 2.0, 2.618, 3.0, 4.236, 4.618}; 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", "200.0", "261.8", "300.0", "423.6", "461.8"}; int i; Sizefi_1=16; ObjectSet(nameObj,OBJPROP_FIBOLEVELS,Sizefi_1); for (i=0;i= 0 && y2 >= 0) || (x2 <= 0 && y2 <= 0)) color lineColor = spiralColor1; else lineColor = spiralColor2; ObjectDelete(label); ObjectCreate(label, OBJ_TREND, 0, GetTime(timeShift1), price1, GetTime(timeShift2), price2, 0, 0); ObjectSet(label, OBJPROP_RAY, 0); ObjectSet(label, OBJPROP_COLOR, lineColor); ObjectSet(label, OBJPROP_STYLE, ExtSpiralStyle); ObjectSet(label, OBJPROP_WIDTH, ExtSpiralWidth); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ datetime GetTime(int timeShift) { if(timeShift >= 0) return(Time[timeShift]); datetime time = Time[0] - Period()*timeShift*60; return(time); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double Scale() { double priceRange = WindowPriceMax(0) - WindowPriceMin(0); double barsCount = WindowBarsPerChart(); double chartScale = (priceRange / Point) / barsCount; return(chartScale*GPixels/VPixels); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //-------------------------------------------------------- // Функции для рисования золотой спирали. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод фибо-вееров статических. Начало. //-------------------------------------------------------- void screenFiboFanS() { double fiboPrice1, fiboPrice2; nameObj="fiboFanS" + ExtComplekt+"_"; ObjectDelete(nameObj); if (ExtPitchforkCandle) { if (ExtPitchfork_1_HighLow) { fiboPrice1=mPitchCena[1];fiboPrice2=mPitchCena[2]; } else { fiboPrice1=mPitchCena[1];fiboPrice2=mPitchCena[2]; } ObjectCreate(nameObj,OBJ_FIBOFAN,0,mPitchTime[1],fiboPrice1,mPitchTime[2],fiboPrice2); } else { if (afrl[mPitch[1]]>0) { fiboPrice1=afrl[mPitch[1]];fiboPrice2=afrh[mPitch[2]]; } else { fiboPrice1=afrh[mPitch[1]];fiboPrice2=afrl[mPitch[2]]; } ObjectCreate(nameObj,OBJ_FIBOFAN,0,afr[mPitch[1]],fiboPrice1,afr[mPitch[2]],fiboPrice2); } ObjectSet(nameObj,OBJPROP_LEVELCOLOR,ExtFiboFanS); FiboFanLevel(); } //-------------------------------------------------------- // Вывод фибо-вееров статических. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод фибо-вееров динамических. Начало. //-------------------------------------------------------- void screenFiboFanD() { double fiboPrice1, fiboPrice2; nameObj="fiboFanD" + ExtComplekt+"_"; ObjectDelete(nameObj); fiboPrice1=afrx[1];fiboPrice2=afrx[0]; ObjectCreate(nameObj,OBJ_FIBOFAN,0,afr[1],fiboPrice1,afr[0],fiboPrice2); ObjectSet(nameObj,OBJPROP_LEVELCOLOR,ExtFiboFanD); FiboFanLevel(); } //-------------------------------------------------------- // Вывод фибо-вееров динамических. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Уровни фибо-вееров. Конец. //-------------------------------------------------------- void FiboFanLevel() { if(ExtFiboFanExp) ObjectSet(nameObj,OBJPROP_FIBOLEVELS,6); else ObjectSet(nameObj,OBJPROP_FIBOLEVELS,4); ObjectSet(nameObj,OBJPROP_COLOR,ExtObjectColor); ObjectSet(nameObj,OBJPROP_STYLE,ExtObjectStyle); ObjectSet(nameObj,OBJPROP_WIDTH,ExtObjectWidth); ObjectSet(nameObj,OBJPROP_LEVELSTYLE,STYLE_DASH); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+0,0.236); ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+1,0.382); ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+2,0.5); ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+3,phi-1); if (ExtFiboFanHidden) { ObjectSetFiboDescription(nameObj, 0, "23.6"); ObjectSetFiboDescription(nameObj, 1, "38.2"); ObjectSetFiboDescription(nameObj, 2, "50.0"); ObjectSetFiboDescription(nameObj, 3, "61.8"); } if(ExtFiboFanExp) { if (ExtFiboType==0) { ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+4,0.764); ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+5,0.854); if (ExtFiboFanHidden) { ObjectSetFiboDescription(nameObj, 4, "76.4"); ObjectSetFiboDescription(nameObj, 5, "85.4"); } } else { ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+4,0.786); ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+5,0.886); if (ExtFiboFanHidden) { ObjectSetFiboDescription(nameObj, 4, "78.6"); ObjectSetFiboDescription(nameObj, 5, "88.6"); } } } } //-------------------------------------------------------- // Уровни фибо-вееров. Начало. //-------------------------------------------------------- //-------------------------------------------------------- // Вывод расширений Фибоначчи. Начало. //-------------------------------------------------------- void FiboExpansion() { if (ExtFiboExpansion>1) { int i; double znach1,znach2,fi_1[]; nameObj="fiboExpansion" + ExtComplekt+"_"; if (mExpansion[2]>0) { if (ExtSave) { nameObj=nameObj + save; } } ObjectDelete(nameObj); if (afrl[mExpansion[0]]>0) { ObjectCreate(nameObj,OBJ_EXPANSION,0,afr[mExpansion[0]],afrl[mExpansion[0]],afr[mExpansion[1]],afrh[mExpansion[1]],afr[mExpansion[2]],afrl[mExpansion[2]]); znach1=afrh[mExpansion[1]]-afrl[mExpansion[0]]; znach2=afrl[mExpansion[2]]; } else { ObjectCreate(nameObj,OBJ_EXPANSION,0,afr[mExpansion[0]],afrh[mExpansion[0]],afr[mExpansion[1]],afrl[mExpansion[1]],afr[mExpansion[2]],afrh[mExpansion[2]]); znach1=-(afrh[mExpansion[0]]-afrl[mExpansion[1]]); znach2=afrh[mExpansion[2]]; } ObjectSet(nameObj,OBJPROP_COLOR,ExtObjectColor); ObjectSet(nameObj,OBJPROP_STYLE,ExtObjectStyle); ObjectSet(nameObj,OBJPROP_WIDTH,ExtObjectWidth); ObjectSet(nameObj,OBJPROP_LEVELCOLOR,ExtFiboExpansionColor); ObjectSet(nameObj,OBJPROP_LEVELSTYLE,ExtExpansionStyle); ObjectSet(nameObj,OBJPROP_LEVELWIDTH,ExtExpansionWidth); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); if (ExtFiboType==0) { FiboExpansion_st(znach1, znach2); } else if (ExtFiboType==1) { FiboExpansion_Pesavento(znach1, znach2); } else if (ExtFiboType==2) { ObjectSet(nameObj,OBJPROP_FIBOLEVELS,Sizefi); for (i=0;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); } } //-------------------------------------------------------- // Удаление объектов. Конец. // Удаление соединительных линий и чисел. //-------------------------------------------------------- //-------------------------------------------------------- // Удаление объектов. Начало. // Удаление объектов паттернов Gartley. //-------------------------------------------------------- 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); if (StringFind(txt,"_"+ExtComplekt+"StrongPatternVL_")>-1) ObjectDelete (txt); } } //-------------------------------------------------------- // Удаление объектов. Конец. // Удаление объектов паттернов Gartley. //-------------------------------------------------------- //-------------------------------------------------------- // Удаление объектов. Начало. // Удаление объектов паттернов Gartley. //-------------------------------------------------------- void delete_objects3() { int i; string txt=""; for (i=ObjectsTotal()-1; i>=0; i--) { txt=ObjectName(i); if (StringFind(txt,"_"+ExtComplekt+"StrongPattern_")>-1)ObjectDelete (txt); if (StringFind(txt,"_"+ExtComplekt+"StrongPatternVL_")>-1) ObjectDelete (txt); if (StringFind(txt,"_"+ExtComplekt+"Triangle")>-1)ObjectDelete (txt); if (StringFind(txt,"_"+ExtComplekt+"ABCDzz")>-1)ObjectDelete (txt); if (RangeForPointD>0) { if (StringFind(txt,"_"+ExtComplekt+"PointD")>-1)ObjectDelete (txt); if (StringFind(txt,"_"+ExtComplekt+"PDL")>-1)ObjectDelete (txt); } if (StringFind(txt,"_"+ExtComplekt+"Equilibrium")>-1)ObjectDelete (txt); if (StringFind(txt,"_"+ExtComplekt+"Reaction")>-1)ObjectDelete (txt); if (bigText) { if (StringFind(txt,"#_TextPattern_#" + ExtComplekt+"_")>-1)ObjectDelete (txt); } vBullBearToNumberPattern=""; vNamePatternToNumberPattern=""; vNameStrongToNumberPattern=""; if (VectorOfAMirrorTrend>0) if (StringFind(txt,"_"+ExtComplekt+"VectorOfAMirrorTrend")>-1) ObjectDelete (txt); 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); } } //-------------------------------------------------------- // Удаление объектов. Конец. // Удаление объектов паттернов Gartley. //-------------------------------------------------------- //-------------------------------------------------------- // Удаление объектов. Начало. // Удаление соединительных линий и чисел. //-------------------------------------------------------- void delete_objects4() { int i; string txt=""; for (i=ObjectsTotal()-1; i>=0; i--) { txt=ObjectName(i); if (StringFind(txt,"_" + ExtComplekt + "pg")>-1) ObjectDelete (txt); } } //-------------------------------------------------------- // Удаление объектов. Конец. // Удаление соединительных линий и чисел. //-------------------------------------------------------- //-------------------------------------------------------- // Удаление объектов. Начало. // Удаление Equilibrium. //-------------------------------------------------------- void delete_objects5() { int i; string txt=""; for (i=ObjectsTotal()-1; i>=0; i--) { txt=ObjectName(i); if (StringFind(txt,"_"+ExtComplekt+"Equilibrium")>-1)ObjectDelete (txt); else if (StringFind(txt,"_"+ExtComplekt+"Reaction")>-1)ObjectDelete (txt); } } //-------------------------------------------------------- // Удаление объектов. Конец. // Удаление Equilibrium. //-------------------------------------------------------- //-------------------------------------------------------- // Удаление меток в вилах Эндрюса и файлов с метками. Начало. //-------------------------------------------------------- void delete_objects6(int sd) { int i, k=0; //, handle; string txt="", tmp="", metka="", file=""; if (sd==0) // статических { file="\\Price Label S\\"; metka="m#"+ExtComplekt+"_"+"s"; } if (sd==1) // динамических { file="\\Price Label D\\"; metka="m#"+ExtComplekt+"_"+"d"; } for (i=ObjectsTotal()-1; i>=0; i--) { txt=ObjectName(i); if (StringFind(txt,metka)>-1) {ObjectDelete (txt); k++;} } // удаление файла с метками if (k>0 && mWriteToFile && mAP) { tmp="_"; if (ExtMasterPitchfork>0) { tmp="_0_"; } else { if (SlavePitchfork) tmp="_"+StringSubstr(""+ExtComplekt,StringLen(""+ExtComplekt)-1)+"_"; else { for (i=ObjectsTotal()-1; i>=0; i--) { if (ObjectType(ObjectName(i))==OBJ_PITCHFORK) { if (StringFind(ObjectName(i),"Master_",0)>=0) { tmp="_"+StringSubstr(""+ExtComplekt,StringLen(""+ExtComplekt)-1)+"_"; break; } } } } } if (ExtIndicator==6 && GrossPeriod==Period()) file=file+Symbol()+"_"+GrossPeriod+tmp+ExtComplekt+".csv"; else file=file+Symbol()+"_"+Period()+tmp+ExtComplekt+".csv"; // handle=FileOpen(file,FILE_CSV|FILE_WRITE,';'); // FileClose(handle); FileDelete(file); } } //-------------------------------------------------------- // Удаление меток в вилах Эндрюса и файлов с метками. Конец. //-------------------------------------------------------- /* //-------------------------------------------------------- // Удаление меток в вилах Эндрюса. Начало. //-------------------------------------------------------- void delete_objects7(int sd) { int i, k=0; //, handle; string txt="", tmp="", metka="", file=""; if (sd==0) // статических { file="\\Price Label S\\"; metka="m#"+ExtComplekt+"_"+"s"; } if (sd==1) // динамических { file="\\Price Label D\\"; metka="m#"+ExtComplekt+"_"+"d"; } for (i=ObjectsTotal()-1; i>=0; i--) { txt=ObjectName(i); if (StringFind(txt,metka)>-1) {ObjectDelete (txt); k++;} } } //-------------------------------------------------------- // Удаление меток в вилах Эндрюса. Конец. //-------------------------------------------------------- */ //-------------------------------------------------------- // Удаление объектов. Начало. // Удаление сигнальной метки APm. //-------------------------------------------------------- void delete_objects8() { int i, i_APm=0, count_APm=0; string txt=""; if (!ExtCustomStaticAP || !AutoMagnet) { if (ObjectFind("AM_0_" + ExtComplekt)==0) { ObjectDelete("AM_0_" + ExtComplekt); ObjectDelete("AM_1_" + ExtComplekt); ObjectDelete("AM_2_" + ExtComplekt); } } if (!ObjectFind(nameCheckLabel)==0) return; for (i=ObjectsTotal()-1; i>=0; i--) { txt=ObjectName(i); // подсчет колическтва вил с меткой APm if (ObjectType(txt)==OBJ_PITCHFORK) { if (StringFind(txt,"_APm",0)>0) i_APm++; } } ObjectDelete(nameCheckLabel_hidden); if (i_APm>1) { if (ObjectFind(nameCheckLabel)==0) { // Проверка положения сигнальной метки APm if (ObjectGet(nameCheckLabel,OBJPROP_XDISTANCE)!=vX || ObjectGet(nameCheckLabel,OBJPROP_YDISTANCE)!=vY) { count_APm=(i_APm-1)*2; } else { count_APm=i_APm; } ObjectCreate(nameCheckLabel_hidden,OBJ_TEXT,0,0,0); ObjectSetText(nameCheckLabel_hidden,""+i_APm+"_"+count_APm); ObjectSet(nameCheckLabel_hidden, OBJPROP_COLOR, CLR_NONE); ObjectSet(nameCheckLabel_hidden, OBJPROP_BACK, true); } } if (i_APm>0) { ObjectDelete(nameCheckLabel); ObjectCreate(nameCheckLabel,OBJ_LABEL,0,0,0); ObjectSetText(nameCheckLabel,"APm"); ObjectSet(nameCheckLabel, OBJPROP_FONTSIZE, 10); ObjectSet(nameCheckLabel, OBJPROP_COLOR, Red); ObjectSet(nameCheckLabel, OBJPROP_CORNER, 1); ObjectSet(nameCheckLabel, OBJPROP_XDISTANCE, vX+2); ObjectSet(nameCheckLabel, OBJPROP_YDISTANCE, vY); } else ObjectDelete(nameCheckLabel); } //-------------------------------------------------------- // Удаление объектов. Конец. // Удаление сигнальной метки APm. //-------------------------------------------------------- //-------------------------------------------------------- // Удаление объектов. Начало. // Удаление инструментов вил, созданных вручную. //-------------------------------------------------------- void delete_objects9() { int i; string txt=""; for (i=ObjectsTotal()-1; i>=0; i--) { txt=ObjectName(i); if (StringFind(txt,"pmediana_" + ExtComplekt+"_")>-1) ObjectDelete(txt); if (StringFind(txt,"SLM382_" + ExtComplekt+"_")>-1) ObjectDelete(txt); if (StringFind(txt,"SLM618_" + ExtComplekt+"_")>-1) ObjectDelete(txt); if (StringFind(txt,"ISL_" + ExtComplekt+"_")>-1) ObjectDelete(txt); if (StringFind(txt,nameUTL)>-1) ObjectDelete(txt); if (StringFind(txt,nameLTL)>-1) ObjectDelete(txt); if (StringFind(txt,nameUWL)>-1) ObjectDelete(txt); if (StringFind(txt,nameLWL)>-1) ObjectDelete(txt); if (StringFind(txt,"FSL Shiff Lines S_" + ExtComplekt+"_")>-1) ObjectDelete(txt); } } //-------------------------------------------------------- // Удаление объектов. Конец. // Удаление инструментов вил, созданных вручную. //-------------------------------------------------------- //-------------------------------------------------------- // Удаление объектов. Начало. // Удаление инструментов динамических вил. //-------------------------------------------------------- void delete_objects10() { ObjectDelete(nameUTLd);ObjectDelete(nameLTLd); ObjectDelete(nameUWLd);ObjectDelete(nameLWLd); ObjectDelete("RLineD" + ExtComplekt+"_"); ObjectDelete("pitchforkD" + ExtComplekt+"_"); ObjectDelete("Master_pitchforkD" + ExtComplekt+"_"); ObjectDelete("ISL_D" + ExtComplekt+"_"); ObjectDelete("RZD" + ExtComplekt+"_"); ObjectDelete("PivotZoneD" + ExtComplekt+"_"); ObjectDelete("pmedianaD" + ExtComplekt+"_"); ObjectDelete("1-2pmedianaD" + ExtComplekt+"_"); ObjectDelete("SLM382D" + ExtComplekt+"_"); ObjectDelete("SLM618D" + ExtComplekt+"_"); ObjectDelete("FSL Shiff Lines D" + ExtComplekt+"_"); ObjectDelete("FanMedianaDinamic" + ExtComplekt+"_"); ObjectDelete("CISL" + ExtComplekt+"_"+1); delete_objects6(1); } //-------------------------------------------------------- // Удаление объектов. Конец. // Удаление инструментов динамических вил. //-------------------------------------------------------- //-------------------------------------------------------- // Удаление объектов. Начало. // Удаление спирали. //-------------------------------------------------------- void delete_objects_spiral() { int i; for(i=0;i=0; i--) { txt=ObjectName(i); if (StringFind(txt,"NumberPeak" + "_" + ExtComplekt + "_")>-1) ObjectDelete (txt); } } //-------------------------------------------------------- // Удаление объектов. Конец. // Удаление номеров переломов зигзага. //-------------------------------------------------------- //-------------------------------------------------------- // Удаление динамических объектов. Начало. //-------------------------------------------------------- void delete_objects_dinamic() { int i; ObjectDelete("fiboD" + ExtComplekt+"_"); ObjectDelete("fiboFanD" + ExtComplekt+"_"); ObjectDelete("RLineD" + ExtComplekt+"_"); ObjectDelete("pitchforkD" + ExtComplekt+"_"); ObjectDelete("Master_pitchforkD" + ExtComplekt+"_"); ObjectDelete("ISL_D" + ExtComplekt+"_"); ObjectDelete("RZD" + ExtComplekt+"_"); ObjectDelete("pmedianaD" + ExtComplekt+"_"); ObjectDelete("1-2pmedianaD" + ExtComplekt+"_"); ObjectDelete("SLM382D" + ExtComplekt+"_"); ObjectDelete("SLM618D" + ExtComplekt+"_"); ObjectDelete("FSL Shiff Lines D" + ExtComplekt+"_"); ObjectDelete("fiboExpansion" + ExtComplekt+"_"); ObjectDelete("PivotZoneD" + ExtComplekt+"_"); ObjectDelete("FanMedianaDinamic" + ExtComplekt+"_"); ObjectDelete("FiboArcD" + ExtComplekt+"_"); if (ExtPivotZZ1Num==1) ObjectDelete("LinePivotZZ" + "1" + ExtComplekt+"_"); if (ExtPivotZZ2Num==1) ObjectDelete("LinePivotZZ" + "2" + ExtComplekt+"_"); for (i=0; i<7; i++) { nameObj="VLD"+i+" " + ExtComplekt+"_"; ObjectDelete(nameObj); } } //-------------------------------------------------------- // Удаление динамических объектов. Конец. //-------------------------------------------------------- //---------------------------------------------------- // ZigZag Алекса немного измененный. Начало. //---------------------------------------------------- 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--) { // запоминаем значение направления тренда fs и средней цены si на предыдущем баре if (tisi+di && Low[i]si-Low[i]) si=High[i]-di; // Отклонение хая от средней цены больше отклонения лова // else if (High[i]-si=si+di) si=High[i]-di; // else if (Low[i]si+di) si=High[i]-di; // } } // Вычисление начального значения средней цены if (i>cbi-1) {si=(High[i]+Low[i])/2;} // Определяем направление тренда для расчетного бара if (si>sip) fs=1; // Тренд восходящий if (si0) { 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]; // простановка метки на нисходящем луче } } // Продолжение tренда. Отслеживание тренда. if (fs==1 && High[i]>hm) {hm=High[i]; tai=Time[i]; si=High[i]-di;} if (fs==2 && Low[i]=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 (aim0) 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] && hLastLow[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_mLow[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] && hLastLow[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_mLow[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 (lLasthLast_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) // Определяем точку смены тенденции. { // запоминаем значение направления тренда fs на предыдущем баре 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;countBarExtHigh[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) // Определяем точку смены тенденции. { // запоминаем значение направления тренда fs на предыдущем баре 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;countBarExtHigh[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 (hLast0) {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;} // гуляющая метка } //=================================================================================================== // Нулевой бар. Расчет первого луча ZigZag-a 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 (aim0 && 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(zzbarlowzzbarhigh) {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(kMprice[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(0); } _Gartley("ExtIndicator=11_"+vBars+"", 0); if (saveParametersZZ) { saveParametersZZ=false; minBarsToNumberPattern=vBars; } if (ExtGartleyTypeSearch==0 && vPatOnOff) { return(0); } } } } //------------------------------------------------------------------ // ZigZag_Talex конец //------------------------------------------------------------------ /*-------------------------------------------------------------------+ / Фунция для поиска у первого бара (если он внешний) какой экстремум | / будем использовать в качестве вершины. Для 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(fbarlowfbarhigh) pr=High[zzbarlow]; if(fbarlowfbarhigh) pr=High[zzbarlow]; if(fbarlow0) {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); // final cutting 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(lasthigh0) { if(lastlow>curlow) zzL[lastlowpos]=0; else zzL[shift]=0; } //--- if((curlow=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 (wrpeakminSize*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(0); } _Gartley("ExtIndicator=11_"+AlgorithmSearchPatterns+"", 0); if (saveParametersZZ) { saveParametersZZ=false; minSizeToNumberPattern=vSize; } if (ExtGartleyTypeSearch==0 && vPatOnOff) { return(0); } } } } 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); } } //-------------------------------------------------------- // ZigZag tauber. Конец. //-------------------------------------------------------- //---------------------------------------------------- // Индикатор подобный встроенному в Ensign. Начало. //---------------------------------------------------- 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 (lLastLow[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];} // тренд нисходящий } // if (ti0) {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]Low[i+1] && High[i+1]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 (chHL && chHL_PeakDet_or_vts) {ha[i+1]=si+di; la[i+1]=si;} } } else { if (Close[i]Low[i] && High[i]0) { ha[ai]=High[ai]; tml=Time[i]; ha[i]=0; la[i]=Low[i]; // простановка метки на нисходящем луче } // else if (chHL && chHL_PeakDet_or_vts) {ha[i]=si+di; la[i]=si;} } } } else // fs==2 { if (lLasthLast && fl) {fs=1; countBar=minBars; fl=false;} if (countBar==0 && si+dilLast && 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 (chHL && chHL_PeakDet_or_vts) {ha[i+1]=si; la[i+1]=si-di;} } } else { if (Close[i]>hLast && fl) {fs=1; countBar=minBars; fl=false;} if (countBar==0 && si+dilLast && 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; // простановка метки на восходящем луче } // else if (chHL && chHL_PeakDet_or_vts==1) {ha[i]=si; la[i]=si-di;} } } } } // Продолжение тренда 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]=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 (aim0) _maxbarZZ=ExtMaxBar; else _maxbarZZ=Bars; if (ExtIndicator==11) { Depth = minDepth; } else { Depth = minBars; minDepth = minBars; maxDepth = minBars; } 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) { if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) vDepth=minBarsToNumberPattern; else vDepth=minBars; endSearchPattern=true; } Depth = vDepth; vDepth-=IterationStepDepth; } else { if (vDepth > maxDepth) { if (ExtGartleyTypeSearch>0 && ExtIndicator==11 && vPatOnOff) vDepth=minBarsToNumberPattern; else vDepth=minBars; 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(val==lastlow) val=0.0; else { lastlow=val; for(back=1; back<=vBackstep; back++) { res=zzL[shift+back]; if((res!=0)&&(res>val)) 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(val==lasthigh) val=0.0; else { lasthigh=val; for(back=1; back<=vBackstep; back++) { res=zzH[shift+back]; if((res!=0)&&(res0) 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(lasthigh0) { if(lastlow>curlow) zzL[lastlowpos]=0; else zzL[shift]=0; } if((curlow=ExtMinBar; shift--) { zz[shift]=zzL[shift]; if(shift>=_maxbarZZ-Depth) {zzH[shift]=0.0; zzL[shift]=0.0; zz[shift]=0.0;} else { res=zzH[shift]; if(res!=0.0) { zz[shift]=res; } } } NoGorb(Depth); // удаляем горбы зигзага if (ExtIndicator!=11 && ExtLabel>0) // расставляем метки на барах, где появился новый луч и на переломах зигзага { Metka(); } // поиск паттернов if (ExtIndicator==11) { if (ExtLabel>0 && endSearchPattern) // расставляем метки на барах, где появился новый луч и на переломах зигзага { Metka(); } if (endSearchPattern) { return(0); } _Gartley("ExtIndicator=11_0_" + Depth+"/"+vBackstep, Depth); if (saveParametersZZ) { saveParametersZZ=false; minBarsToNumberPattern=Depth; } if (ExtGartleyTypeSearch==0 && vPatOnOff) { return(0); } if (FiboStep) {vBackstep=vDepth*1.618; ExtBackstep=vBackstep;} } // поиск паттернов конец } } //-------------------------------------------------------- // ZigZag из МТ. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Исправление возникающих горбов зигзага. Начало. //-------------------------------------------------------- void NoGorb(int Depth) { double vel1, vel2, vel3, vel4; int bar1, bar2, bar3, bar4; int count; for(int bar=Bars-Depth; bar>=0; bar--) { if (zz[bar]!=0) { count++; vel4=vel3;bar4=bar3; vel3=vel2;bar3=bar2; vel2=vel1;bar2=bar1; vel1=zz[bar];bar1=bar; if (count<3) continue; if ((vel3vel2)&&(vel2>vel1)) {zz[bar2]=0;zzL[bar2]=0;zzH[bar2]=0;bar=bar3+1;} if ((vel2==vel1)&&(vel1!=0 )) {zz[bar1]=0;zzL[bar1]=0;zzH[bar1]=0;bar=bar3+1;} } } } //-------------------------------------------------------- // Исправление возникающих горбов зигзага. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Расстановка меток. Начало. //-------------------------------------------------------- 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; } } } //-------------------------------------------------------- // Расстановка меток. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Поиск паттернов Gartley. Начало. //-------------------------------------------------------- void _Gartley(string _Depth, int Depth) { int i, ip=0, in=0, ik[2], iu, ibreak, j, k, m, shift, kod, kod1; bool PotencialsLevels_retXD_=false; double LevelDA1272,LevelDA1618,LevelDA2,LevelDA2618,LevelDA3618,LevelDA4236,LevelDC786=0,LevelDC886=0,LevelDC1272,LevelDC1618,LevelDC2,LevelDC2618,LevelDC3618,LevelDC4236; 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 vl786=min_DeltaGartley * 0.786; double vh786=max_DeltaGartley * 0.786; double vl886=min_DeltaGartley * 0.886; double vh886=max_DeltaGartley * 0.886; int aXABCD[5]; // номера баров с точками XABCD пятиточечных паттернов double retXD; double retXB; double retBD; double retAC; double XA, BC, XC, BD, AB, CD; double vDelta0 = 0.0000001; int X=0,A=1,B=2,C=3,D=4; string nameObj1="", nameObj2=""; string vBull = "Bullish"; string vBear = "Bearish"; string vCustom = "Custom"; string v4Point = "4-Point Continuation"; string vABCD = "AB=CD"; string vABCD1272 = "1.272*AB=CD"; string vABCD1618 = "1.618*AB=CD"; string v50 = "5-0"; string vDragon = "Dragon"; datetime tDragonE = 0; double cDragonE = 0; int aNumBarPeak[]; double tangensXB; color colorPattern; bool yes; LevelForDmin = 0; LevelForDmax = 0; vBullBear = ""; vNamePattern = ""; vNameStrongPattern = ""; if (ExtIndicator!=11) delete_objects3(); if (varStrongPatterns==1 || PotencialsLevels_retXD>0) delete_FiboStrongPattern(); if ((ExtGartleyTypeSearch==0 && ExtIndicator==11) || ExtIndicator!=11) vPatOnOff = false; maxPeak = 0; 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; } } aXABCD[D] = aNumBarPeak[0]; k = 0; while (k < maxPeak-5 && (aXABCD[D] < bartoD+2 || patternInfluence==2)) { aXABCD[X] = aNumBarPeak[k + 4]; aXABCD[A] = aNumBarPeak[k + 3]; aXABCD[B] = aNumBarPeak[k + 2]; aXABCD[C] = aNumBarPeak[k + 1]; aXABCD[D] = aNumBarPeak[k]; vBullBear = ""; vNamePattern = ""; if (CustomPattern<2) { tangensXB=(zz[aXABCD[B]]-zz[aXABCD[X]])/(aXABCD[X]-aXABCD[B]); if (zz[aXABCD[C]]>zz[aXABCD[D]] && (zz[aXABCD[B]]+(aXABCD[B]-aXABCD[D])*tangensXB)>zz[aXABCD[D]]) { vBullBear = vBull; } else if (zz[aXABCD[C]]0) { // определяем ретресменты retXB = (zz[aXABCD[A]] - zz[aXABCD[B]]) / (zz[aXABCD[A]] - zz[aXABCD[X]] + vDelta0); retAC = (zz[aXABCD[C]] - zz[aXABCD[B]]) / (zz[aXABCD[A]] - zz[aXABCD[B]] + vDelta0); retBD = (zz[aXABCD[C]] - zz[aXABCD[D]]) / (zz[aXABCD[C]] - zz[aXABCD[B]] + vDelta0); if ((zz[aXABCD[A]]>zz[aXABCD[C]] && vBullBear == vBull) || (zz[aXABCD[A]]=deltapatterns[ip,0] && retXD<=deltapatterns[ip,1]) {ret[0]=ip; vlXD = deltapatterns[ip,0]; vhXD = deltapatterns[ip,1];} if (retXB>=deltapatterns[ip,0] && retXB<=deltapatterns[ip,1]) {ret[1]=ip; vlXB = deltapatterns[ip,0]; vhXB = deltapatterns[ip,1];} if (retAC>=deltapatterns[ip,0] && retAC<=deltapatterns[ip,1]) {ret[2]=ip; vlAC = deltapatterns[ip,0]; vhAC = deltapatterns[ip,1];} if (retBD>=deltapatterns[ip,0] && retBD<=deltapatterns[ip,1]) {ret[3]=ip; vlBD = deltapatterns[ip,0]; vhBD = deltapatterns[ip,1];} } if (PotencialsLevels_retXD<2 && SelectPattern<8) { if (varStrongPatterns==0) { if (ret[0]>0 && ret[1]>0 && ret[2]>0 && ret[3]>0) { for (shift=0;shift<8;shift++) if (ret[0]==nstrcod[shift,0]) break; if (shift==8) ret[0]=0; } else ret[0]=0; } else if (varStrongPatterns==1) { if (ret[0]==0) { for (ip=1;ip<18;ip++) if (retXD>=deltapatterns[ip,1] && retXD<=deltapatterns[ip+1,0]) {ret[0]=ip+1; break;} for (shift=0;shift<8;shift++) if (ret[1]==nstrind[shift,0]) break; if (shift==8) ret[0]=0; } } if (ret[0]>0) { kod=ret[3]+100*ret[2]+10000*ret[1]; yes=false; for (ip=shift;ip<788;ip++) { if (varStrongPatterns==0) { if (ret[0]levelXD[iu,1] && ik[0]=0) { vNamePattern=namepatterns[ik[1]]; vNameStrongPattern = "["+retpatternstxt[ret[1]]+"/"+retpatternstxt[ret[2]]+"/"+retpatternstxt[ret[3]]+"]"; ret[0]=ik[0]; vlXD = deltapatterns[ik[0],0]; vhXD = deltapatterns[ik[0],1]; yes=true; } } } // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 //0.146 0.236 0.382 0.447 0.5 0.618 0.707 0.786 0.886 1.128 1.272 1.414 1.618 2.0 2.236 2.618 3.1416 3.618 4.236 if (yes) { // рассчитываем зону развития точки D паттерна if (RangeForPointD>0 || patternTrue) { if (retAC<1) { XA=zz[aXABCD[A]] - zz[aXABCD[X]]; BC=zz[aXABCD[C]] - zz[aXABCD[B]]; if (varStrongPatterns==0) { if (vBullBear==vBull) { LevelForDmin = MathMax(zz[aXABCD[A]]-XA*vhXD,zz[aXABCD[C]]-BC*vhBD); LevelForDmax = MathMin(zz[aXABCD[A]]-XA*vlXD,zz[aXABCD[C]]-BC*vlBD); } else { LevelForDmin = MathMax(zz[aXABCD[A]]-XA*vlXD,zz[aXABCD[C]]-BC*vlBD); LevelForDmax = MathMin(zz[aXABCD[A]]-XA*vhXD,zz[aXABCD[C]]-BC*vhBD); } } else if (varStrongPatterns==1) { if (vBullBear==vBull) { LevelForDmin = MathMin(zz[aXABCD[A]]-XA*vhXD,zz[aXABCD[C]]-BC*vhBD); LevelForDmax = MathMax(zz[aXABCD[A]]-XA*vlXD,zz[aXABCD[C]]-BC*vlBD); } else { LevelForDmin = MathMin(zz[aXABCD[A]]-XA*vlXD,zz[aXABCD[C]]-BC*vlBD); LevelForDmax = MathMax(zz[aXABCD[A]]-XA*vhXD,zz[aXABCD[C]]-BC*vhBD); } } if (RangeForPointD==2) { LevelDA1272 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*1.272; LevelDA1618 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*phi; LevelDA2 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*2; LevelDA2618 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*(1+phi); LevelDA3618 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*(2+phi); LevelDA4236 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*(4.236); } } else { XC=zz[aXABCD[C]] - zz[aXABCD[X]]; BC=zz[aXABCD[C]] - zz[aXABCD[B]]; if (varStrongPatterns==0) { if (vBullBear==vBull) { LevelForDmin = MathMax(zz[aXABCD[C]]-XC*vhXD,zz[aXABCD[C]]-BC*vhBD); LevelForDmax = MathMin(zz[aXABCD[C]]-XC*vlXD,zz[aXABCD[C]]-BC*vlBD); } else { LevelForDmin = MathMax(zz[aXABCD[C]]-XC*vlXD,zz[aXABCD[C]]-BC*vlBD); LevelForDmax = MathMin(zz[aXABCD[C]]-XC*vhXD,zz[aXABCD[C]]-BC*vhBD); } } else if (varStrongPatterns==1) { if (vBullBear==vBull) { LevelForDmin = MathMin(zz[aXABCD[C]]-XC*vhXD,zz[aXABCD[C]]-BC*vhBD); LevelForDmax = MathMax(zz[aXABCD[C]]-XC*vlXD,zz[aXABCD[C]]-BC*vlBD); } else { LevelForDmin = MathMin(zz[aXABCD[C]]-XC*vlXD,zz[aXABCD[C]]-BC*vlBD); LevelForDmax = MathMax(zz[aXABCD[C]]-XC*vhXD,zz[aXABCD[C]]-BC*vhBD); } } if (RangeForPointD==2) { LevelDA1272 = 0; LevelDA1618 = 0; LevelDA2 = 0; LevelDA2618 = 0; LevelDA3618 = 0; LevelDA4236 = 0; } } if (RangeForPointD==2) { LevelDC1272 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*1.272; LevelDC1618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*phi; LevelDC2 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*2; LevelDC2618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(1+phi); LevelDC3618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(2+phi); LevelDC4236 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(4.236); } if (patternTrue) { if (k<2) { if (vBullBear==vBull) { for (ibreak=aXABCD[D]-1;ibreak>=0;ibreak--) { if (iLow(NULL,0,ibreak)=0;ibreak--) { if (iHigh(NULL,0,ibreak)>LevelForDmax) { vNamePattern = ""; vNameStrongPattern = ""; break; } } } } else { if (vBullBear==vBull) { for (ibreak=k;ibreak>=2;ibreak--) { if (iLow(NULL,0,aNumBarPeak[ibreak-2])=2;ibreak--) { if (iHigh(NULL,0,aNumBarPeak[ibreak-2])>LevelForDmax) { vNamePattern = ""; vNameStrongPattern = ""; break; } } } } } } break; } } } } // размытые паттерны if (StringLen(vNamePattern)==0 && PotencialsLevels_retXD<2 && SelectPattern<8) { for (ip=0;ip<27;ip++) { if (!CustomPat_[ip]) continue; vlAC = minAC_[ip]; vlBD = minBD_[ip]; vlXB = minXB_[ip]; vlXD = minXD_[ip]; vhAC = maxAC_[ip]; vhBD = maxBD_[ip]; vhXB = maxXB_[ip]; vhXD = maxXD_[ip]; if (retAC>vlAC && retACvlBD && retBDvlXB && retXBvlXD && retXD0 || patternTrue) { if (retAC<1) { XA=zz[aXABCD[A]] - zz[aXABCD[X]]; BC=zz[aXABCD[C]] - zz[aXABCD[B]]; if (vBullBear==vBull) { LevelForDmin = MathMax(zz[aXABCD[A]]-XA*vhXD,zz[aXABCD[C]]-BC*vhBD); LevelForDmax = MathMin(zz[aXABCD[A]]-XA*vlXD,zz[aXABCD[C]]-BC*vlBD); } else { LevelForDmin = MathMax(zz[aXABCD[A]]-XA*vlXD,zz[aXABCD[C]]-BC*vlBD); LevelForDmax = MathMin(zz[aXABCD[A]]-XA*vhXD,zz[aXABCD[C]]-BC*vhBD); } if (RangeForPointD==2) { LevelDA1272 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*1.272; LevelDA1618 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*phi; LevelDA2 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*2; LevelDA2618 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*(1+phi); LevelDA3618 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*(2+phi); LevelDA4236 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*(4.236); } } else { XC=zz[aXABCD[C]] - zz[aXABCD[X]]; BC=zz[aXABCD[C]] - zz[aXABCD[B]]; if (vBullBear==vBull) { LevelForDmin = MathMax(zz[aXABCD[C]]-XC*vhXD,zz[aXABCD[C]]-BC*vhBD); LevelForDmax = MathMin(zz[aXABCD[C]]-XC*vlXD,zz[aXABCD[C]]-BC*vlBD); } else { LevelForDmin = MathMax(zz[aXABCD[C]]-XC*vlXD,zz[aXABCD[C]]-BC*vlBD); LevelForDmax = MathMin(zz[aXABCD[C]]-XC*vhXD,zz[aXABCD[C]]-BC*vhBD); } if (RangeForPointD==2) { LevelDA1272 = 0; LevelDA1618 = 0; LevelDA2 = 0; LevelDA2618 = 0; LevelDA3618 = 0; LevelDA4236 = 0; } } if (RangeForPointD==2) { LevelDC1272 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*1.272; LevelDC1618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*phi; LevelDC2 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*2; LevelDC2618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(1+phi); LevelDC3618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(2+phi); LevelDC4236 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(4.236); } if (patternTrue) { if (k<2) { if (vBullBear==vBull) { for (ibreak=aXABCD[D]-1;ibreak>=0;ibreak--) { if (iLow(NULL,0,ibreak)=0;ibreak--) { if (iHigh(NULL,0,ibreak)>LevelForDmax) { vNamePattern = ""; break; } } } } else { if (vBullBear==vBull) { for (ibreak=k;ibreak>=2;ibreak--) { if (iLow(NULL,0,aNumBarPeak[ibreak-2])=2;ibreak--) { if (iHigh(NULL,0,aNumBarPeak[ibreak-2])>LevelForDmax) { vNamePattern = ""; break; } } } } } } } if (StringLen(vNamePattern)>0) { break; } } } if (Dragon && StringLen(vNamePattern)==0 && k<=PeakZZDragon && PotencialsLevels_retXD<2) { vlXB=min_DeltaGartley * 0.382; vhXB=max_DeltaGartley * 0.5; vlAC=min_DeltaGartley * 0.618; vhAC=max_DeltaGartley * 1.272; if (retXB>=vlXB && retXB<=vhXB && retAC>=vlAC && retAC<=vhAC) { vNamePattern=vDragon; cDragonE=zz[aXABCD[X]]+(aXABCD[X]-aXABCD[C])*tangensXB; if ((vBullBear==vBear && cDragonEiHigh(NULL,0,aXABCD[C]))) vNamePattern=""; else { tDragonE=0; double _level=0; bool BB=false; if (vBullBear==vBull) { vBullBear=vBear; _level=MathMax(iHigh(NULL,0,aXABCD[A]),iHigh(NULL,0,aXABCD[C])); } else { vBullBear=vBull; _level=MathMin(iLow(NULL,0,aXABCD[A]),iLow(NULL,0,aXABCD[C])); BB=true; } for (i=aXABCD[C]-1;i>=0;i--) { if (tDragonE==0) { cDragonE=zz[aXABCD[X]]+(aXABCD[X]-i)*tangensXB; if (cDragonE>=iLow(NULL,0,i) && cDragonE<=iHigh(NULL,0,i)) { tDragonE=iTime(NULL,0,i); i++; } } else { if (BB) { if (_level>iLow(NULL,0,i)) {vNamePattern=""; break;} } else { if (_level0 && StringLen(vNamePattern)==0 && PotencialsLevels_retXD<2) { vBullBear = ""; vNamePattern = ""; vlAC = minAC; vlBD = minBD; vlXB = minXB; vlXD = minXD; vhAC = maxAC; vhBD = maxBD; vhXB = maxXB; vhXD = maxXD; if (filtrEquilibrium) tangensXB=(zz[aXABCD[B]]-zz[aXABCD[X]])/(aXABCD[X]-aXABCD[B]); if (zz[aXABCD[C]]>zz[aXABCD[D]] && (((zz[aXABCD[B]]+(aXABCD[B]-aXABCD[D])*tangensXB)>zz[aXABCD[D]] && filtrEquilibrium) || !filtrEquilibrium)) { vBullBear = vBull; } else if (zz[aXABCD[C]]0) { // определяем ретресменты retXB = (zz[aXABCD[A]] - zz[aXABCD[B]]) / (zz[aXABCD[A]] - zz[aXABCD[X]] + vDelta0); retAC = (zz[aXABCD[C]] - zz[aXABCD[B]]) / (zz[aXABCD[A]] - zz[aXABCD[B]] + vDelta0); retBD = (zz[aXABCD[C]] - zz[aXABCD[D]]) / (zz[aXABCD[C]] - zz[aXABCD[B]] + vDelta0); if ((zz[aXABCD[A]]>zz[aXABCD[C]] && vBullBear == vBull) || (zz[aXABCD[A]]vlAC && retACvlBD && retBDvlXB && retXBvlXD && retXD0 || patternTrue) { if (retAC<1) { XA=zz[aXABCD[A]] - zz[aXABCD[X]]; BC=zz[aXABCD[C]] - zz[aXABCD[B]]; if (vBullBear==vBull) { LevelForDmin = MathMax(zz[aXABCD[A]]-XA*vhXD,zz[aXABCD[C]]-BC*vhBD); LevelForDmax = MathMin(zz[aXABCD[A]]-XA*vlXD,zz[aXABCD[C]]-BC*vlBD); } else { LevelForDmin = MathMax(zz[aXABCD[A]]-XA*vlXD,zz[aXABCD[C]]-BC*vlBD); LevelForDmax = MathMin(zz[aXABCD[A]]-XA*vhXD,zz[aXABCD[C]]-BC*vhBD); } if (RangeForPointD==2) { LevelDA1272 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*1.272; LevelDA1618 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*phi; LevelDA2 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*2; LevelDA2618 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*(1+phi); LevelDA3618 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*(2+phi); LevelDA4236 = zz[aXABCD[A]]-(zz[aXABCD[A]]-zz[aXABCD[B]])*(4.236); } } else { XC=zz[aXABCD[C]] - zz[aXABCD[X]]; BC=zz[aXABCD[B]] - zz[aXABCD[D]]; if (vBullBear==vBull) { LevelForDmin = MathMax(zz[aXABCD[C]]-XC*vhXD,zz[aXABCD[C]]-BC*vhBD); LevelForDmax = MathMin(zz[aXABCD[C]]-XC*vlXD,zz[aXABCD[C]]-BC*vlBD); } else { LevelForDmin = MathMax(zz[aXABCD[C]]-XC*vlXD,zz[aXABCD[C]]-BC*vlBD); LevelForDmax = MathMin(zz[aXABCD[C]]-XC*vhXD,zz[aXABCD[C]]-BC*vhBD); } if (RangeForPointD==2) { LevelDA1272 = 0; LevelDA1618 = 0; LevelDA2 = 0; LevelDA2618 = 0; LevelDA3618 = 0; LevelDA4236 = 0; } } if (RangeForPointD==2) { LevelDC1272 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*1.272; LevelDC1618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*phi; LevelDC2 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*2; LevelDC2618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(1+phi); LevelDC3618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(2+phi); LevelDC4236 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(4.236); } if (patternTrue) { if (k<2) { if (vBullBear==vBull) { for (ibreak=aXABCD[D]-1;ibreak>=0;ibreak--) { if (iLow(NULL,0,ibreak)=0;ibreak--) { if (iHigh(NULL,0,ibreak)>LevelForDmax) { vNamePattern = ""; break; } } } } else { if (vBullBear==vBull) { for (ibreak=k;ibreak>=0;ibreak--) { if (iLow(NULL,0,aNumBarPeak[ibreak-2])=0;ibreak--) { if (iHigh(NULL,0,aNumBarPeak[ibreak-2])>LevelForDmax) { vNamePattern = ""; break; } } } } } } } } } PotencialsLevels_retXD_=false; if (StringLen(vNamePattern)==0 && PotencialsLevels_retXD>0 && k<=PotencialsLevelsNum) { iu=-1; // определяем ретресменты retAC = (zz[aXABCD[C]] - zz[aXABCD[B]]) / (zz[aXABCD[A]] - zz[aXABCD[B]] + vDelta0); retBD = (zz[aXABCD[C]] - zz[aXABCD[D]]) / (zz[aXABCD[C]] - zz[aXABCD[B]] + vDelta0); // точные паттерны vNameStrongPattern = ""; ArrayInitialize(ret,0); for (ip=1;ip<19;ip++) { if (retAC>=deltapatterns[ip,0] && retAC<=deltapatterns[ip,1]) {ret[2]=ip; vlAC = deltapatterns[ip,0]; vhAC = deltapatterns[ip,1];} if (retBD>=deltapatterns[ip,0] && retBD<=deltapatterns[ip,1]) {ret[3]=ip; vlBD = deltapatterns[ip,0]; vhBD = deltapatterns[ip,1];} } if (ret[3]>0 && ret[2]>0) { kod1=ret[3]+100*ret[2]; ArrayInitialize(levelXD,0); ArrayInitialize(strongABCD,false); for (ip=0;ip<95;ip++) if (kod1==nstrind1[ip,0]) break; // смещение в индексе index - nstrind1[ip,1] if (ip<95) { PotencialsLevels_retXD_=true; for(in=nstrind1[ip,1];iniu) { iu++; levelXD[iu,0]=codPatterns[index[in,0],2]; levelXD[iu,1]=codPatterns[index[in,0],0]; } } } } } } } } // The 4-Point Continuation Pattern - Jim Kane if (Ext_4PointPattern && StringLen(vNamePattern)==0 && PotencialsLevels_retXD<2) { vBullBear = ""; vNamePattern = ""; vlAC=min_DeltaGartley * 0.786; vlBD=min_DeltaGartley * 0.786; vlXB=0; vhAC = max_DeltaGartley * 0.886; vhBD = max_DeltaGartley * 0.886; if ((zz[aXABCD[A]] - zz[aXABCD[B]]) / (zz[aXABCD[A]] - zz[aXABCD[X]] + vDelta0)<_maxXB) { // определяем ретресменты retAC = (zz[aXABCD[C]] - zz[aXABCD[B]]) / (zz[aXABCD[A]] - zz[aXABCD[B]] + vDelta0); retBD = (zz[aXABCD[C]] - zz[aXABCD[D]]) / (zz[aXABCD[C]] - zz[aXABCD[B]] + vDelta0); if (retAC>vlAC && retACvlBD && retBDzz[aXABCD[D]]) { vBullBear = vBull; } else if (zz[aXABCD[C]]0 || patternTrue) { BC=zz[aXABCD[C]] - zz[aXABCD[B]]; if (vBullBear==vBull) { LevelForDmin = zz[aXABCD[C]]-BC*vhBD; LevelForDmax = zz[aXABCD[C]]-BC*vlBD; } else { LevelForDmin = zz[aXABCD[C]]-BC*vlBD; LevelForDmax = zz[aXABCD[C]]-BC*vhBD; } if (RangeForPointD==2) { LevelDA1272 = 0; LevelDA1618 = 0; LevelDA2 = 0; LevelDA2618 = 0; LevelDA3618 = 0; LevelDA4236 = 0; LevelDC786 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*0.786; LevelDC886 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*0.886; LevelDC1272 = 0; LevelDC1618 = 0; LevelDC2 = 0; LevelDC2618 = 0; LevelDC3618 = 0; LevelDC4236 = 0; } if (patternTrue) { if (k<2) { if (vBullBear==vBull) { for (ibreak=aXABCD[D]-1;ibreak>=0;ibreak--) { if (iLow(NULL,0,ibreak)=0;ibreak--) { if (iHigh(NULL,0,ibreak)>LevelForDmax) { vNamePattern = ""; break; } } } } else { if (vBullBear==vBull) { for (ibreak=k;ibreak>=0;ibreak--) { if (iLow(NULL,0,aNumBarPeak[ibreak-2])=0;ibreak--) { if (iHigh(NULL,0,aNumBarPeak[ibreak-2])>LevelForDmax) { vNamePattern = ""; break; } } } } } } } } } if (_50 && StringLen(vNamePattern)==0 && PotencialsLevels_retXD<2) { vBullBear = ""; vNamePattern = ""; vlAC=min_DeltaGartley * 1.618; vlBD=min_DeltaGartley * 0.5; vlXB=min_DeltaGartley * 1.128; vhAC = max_DeltaGartley * 2.236; vhBD = max_DeltaGartley * 0.5; vhXB = max_DeltaGartley * 1.618; // определяем ретресменты retAC = (zz[aXABCD[C]] - zz[aXABCD[B]]) / (zz[aXABCD[A]] - zz[aXABCD[B]] + vDelta0); retBD = (zz[aXABCD[C]] - zz[aXABCD[D]]) / (zz[aXABCD[C]] - zz[aXABCD[B]] + vDelta0); retXB = (zz[aXABCD[A]] - zz[aXABCD[B]]) / (zz[aXABCD[A]] - zz[aXABCD[X]] + vDelta0); if (retAC>vlAC && retACvlBD && retBDvlXB && retXBzz[aXABCD[D]]) { vBullBear = vBull; } else if (zz[aXABCD[C]]0 || patternTrue) { BC=zz[aXABCD[C]] - zz[aXABCD[B]]; if (vBullBear==vBull) { LevelForDmin = zz[aXABCD[C]]-BC*vhBD; LevelForDmax = zz[aXABCD[C]]-BC*vlBD; } else { LevelForDmin = zz[aXABCD[C]]-BC*vlBD; LevelForDmax = zz[aXABCD[C]]-BC*vhBD; } if (RangeForPointD==2) { LevelDA1272 = 0; LevelDA1618 = 0; LevelDA2 = 0; LevelDA2618 = 0; LevelDA3618 = 0; LevelDA4236 = 0; LevelDC1272 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*1.272; LevelDC1618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*phi; LevelDC2 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*2; LevelDC2618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(1+phi); LevelDC3618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(2+phi); LevelDC4236 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(4.236); } if (patternTrue) { if (k<2) { if (vBullBear==vBull) { for (ibreak=aXABCD[D]-1;ibreak>=0;ibreak--) { if (iLow(NULL,0,ibreak)=0;ibreak--) { if (iHigh(NULL,0,ibreak)>LevelForDmax) { vNamePattern = ""; break; } } } } else { if (vBullBear==vBull) { for (ibreak=k;ibreak>=0;ibreak--) { if (iLow(NULL,0,aNumBarPeak[ibreak-2])=0;ibreak--) { if (iHigh(NULL,0,aNumBarPeak[ibreak-2])>LevelForDmax) { vNamePattern = ""; break; } } } } } } } } if (ABCD && StringLen(vNamePattern)==0 && PotencialsLevels_retXD<2) { vBullBear = ""; vNamePattern = ""; AB=MathAbs(zz[aXABCD[B]] - zz[aXABCD[A]]); CD=MathAbs(zz[aXABCD[D]] - zz[aXABCD[C]]); if (CD>AB*min_DeltaGartley && CD_ABCDtype[iABCD]*AB*min_DeltaGartley && CD<_ABCDtype[iABCD]*AB*max_DeltaGartley) { vNamePattern=_ABCDtypetxt[iABCD]+"*AB=CD"; break; } } } if (StringLen(vNamePattern)>0) { if (zz[aXABCD[C]]>zz[aXABCD[D]]) { vBullBear = vBull; } else if (zz[aXABCD[C]]0 || patternTrue) { if (vNamePattern==vABCD) { if (vBullBear==vBull) { LevelForDmin = zz[aXABCD[C]]-AB*max_DeltaGartley; LevelForDmax = zz[aXABCD[C]]-AB*min_DeltaGartley; } else { LevelForDmin = zz[aXABCD[C]]+AB*min_DeltaGartley; LevelForDmax = zz[aXABCD[C]]+AB*max_DeltaGartley; } } else { if (vBullBear==vBull) { LevelForDmin = zz[aXABCD[C]]-_ABCDtype[iABCD]*AB*max_DeltaGartley; LevelForDmax = zz[aXABCD[C]]-_ABCDtype[iABCD]*AB*min_DeltaGartley; } else { LevelForDmin = zz[aXABCD[C]]+_ABCDtype[iABCD]*AB*min_DeltaGartley; LevelForDmax = zz[aXABCD[C]]+_ABCDtype[iABCD]*AB*max_DeltaGartley; } } if (RangeForPointD==2) { LevelDA1272 = 0; LevelDA1618 = 0; LevelDA2 = 0; LevelDA2618 = 0; LevelDA3618 = 0; LevelDA4236 = 0; LevelDC1272 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*1.272; LevelDC1618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*phi; LevelDC2 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*2; LevelDC2618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(1+phi); LevelDC3618 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(2+phi); LevelDC4236 = zz[aXABCD[C]]-(zz[aXABCD[C]]-zz[aXABCD[B]])*(4.236); } if (patternTrue) { if (k<2) { if (vBullBear==vBull) { for (ibreak=aXABCD[D]-1;ibreak>=0;ibreak--) { if (iLow(NULL,0,ibreak)=0;ibreak--) { if (iHigh(NULL,0,ibreak)>LevelForDmax) { vNamePattern = ""; break; } } } } else { if (vBullBear==vBull) { for (ibreak=k;ibreak>=0;ibreak--) { if (iLow(NULL,0,aNumBarPeak[ibreak-2])=0;ibreak--) { if (iHigh(NULL,0,aNumBarPeak[ibreak-2])>LevelForDmax) { vNamePattern = ""; break; } } } } } } } } if ((levelD && varStrongPatterns==1 && StringLen(vNameStrongPattern)>0) || (iu>=0 && PotencialsLevels_retXD_)) // вывод уровня точки D по значению retXD { if (iu>=0 && PotencialsLevels_retXD_) { nameObj="_"+ExtComplekt+"StrongPattern_" + k + ""; ObjectDelete(nameObj); nameObj1="_"+ExtComplekt+"StrongPatternVL_" + k + ""; ObjectDelete(nameObj1); ObjectCreate(nameObj1,OBJ_VLINE,0,Time[aXABCD[D]],zz[aXABCD[C]]); ObjectSet(nameObj1,OBJPROP_WIDTH,0); ObjectSet(nameObj1,OBJPROP_STYLE,STYLE_DOT); ObjectSet(nameObj1,OBJPROP_COLOR,colorLevelD); double pointC=0, pointD; int abcd=0, ii; if (retBD<9) { ObjectCreate(nameObj,OBJ_FIBO,0,Time[aXABCD[D]],zz[aXABCD[A]],Time[aXABCD[D]],zz[aXABCD[B]]); pointC=zz[aXABCD[B]]; } else { ObjectCreate(nameObj,OBJ_FIBO,0,Time[aXABCD[D]],zz[aXABCD[A]],Time[aXABCD[D]],zz[aXABCD[D]]); pointC=zz[aXABCD[D]]; } PotencialsLevels_retXD_=false; if (visibleLevelsABCD==0) { ObjectSet(nameObj,OBJPROP_FIBOLEVELS,iu+1); } else { ii=iu; if (visibleLevelsABCD==1 || visibleLevelsABCD==3) { for (i=0;i<19;i++) { if (strongABCD[i]) abcd++; } } if (visibleLevelsABCD==1) { ObjectSet(nameObj,OBJPROP_FIBOLEVELS,iu+1+abcd); } else if (visibleLevelsABCD==2) { ObjectSet(nameObj,OBJPROP_FIBOLEVELS,iu+1+3); } else if (visibleLevelsABCD==3) { ObjectSet(nameObj,OBJPROP_FIBOLEVELS,iu+1+abcd+3); } if (visibleLevelsABCD==1 || visibleLevelsABCD==3) { for (i=0;i<19;i++) { if (strongABCD[i]) { ii++; pointD=zz[aXABCD[D]]+(zz[aXABCD[C]]-zz[aXABCD[D]])*retpatterns[i]; ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+ii,(pointD-pointC)/(zz[aXABCD[A]]-pointC)); ObjectSetFiboDescription(nameObj, ii, "BD=" +retpatternstxt[i]+" %$"); } } } if (visibleLevelsABCD==2 || visibleLevelsABCD==3) { ii++; pointD=zz[aXABCD[D]]+(zz[aXABCD[C]]-zz[aXABCD[B]]); ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+ii,(pointD-pointC)/(zz[aXABCD[A]]-pointC)); ObjectSetFiboDescription(nameObj, ii, "AB=CD" + " %$"); ii++; pointD=zz[aXABCD[D]]+(zz[aXABCD[C]]-zz[aXABCD[B]])*1.272; ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+ii,(pointD-pointC)/(zz[aXABCD[A]]-pointC)); ObjectSetFiboDescription(nameObj, ii, "1.272*AB=CD" + " %$"); ii++; pointD=zz[aXABCD[D]]+(zz[aXABCD[C]]-zz[aXABCD[B]])*1.618; ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+ii,(pointD-pointC)/(zz[aXABCD[A]]-pointC)); ObjectSetFiboDescription(nameObj, ii, "1.618*AB=CD" + " %$"); } } } else { nameObj="_"+ExtComplekt+"StrongPattern_" + countGartley + ""; ObjectDelete(nameObj); if (retAC<9) { ObjectCreate(nameObj,OBJ_FIBO,0,Time[aXABCD[D]],zz[aXABCD[X]],Time[aXABCD[D]],zz[aXABCD[A]]); } else { ObjectCreate(nameObj,OBJ_FIBO,0,Time[aXABCD[D]],zz[aXABCD[X]],Time[aXABCD[D]],zz[aXABCD[C]]); } ObjectSet(nameObj,OBJPROP_FIBOLEVELS,iu+1); } ObjectSet(nameObj,OBJPROP_LEVELCOLOR,colorLevelD); ObjectSet(nameObj,OBJPROP_COLOR,CLR_NONE); ObjectSet(nameObj,OBJPROP_LEVELWIDTH,0); ObjectSet(nameObj,OBJPROP_LEVELSTYLE,2); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); ObjectSet(nameObj,OBJPROP_RAY,false); for (i=0;i0 && (aXABCD[D] < bartoD+2 || patternInfluence==2) || (iu>=0 && PotencialsLevels_retXD_)) { if (LevelForDmin>LevelForDmax) { LevelForD=LevelForDmin; LevelForDmin=LevelForDmax; LevelForDmax=LevelForD; } if (ExtGartleyTypeSearch>0 && ExtIndicator==11) { for (m=0;m<=countGartley;m++) // проверка на появление нового паттерна { if (vNamePattern==v4Point || StringFind(vNamePattern,"AB=CD",0)>-1) { if (PeakCenaX[m]==0 && PeakCenaA[m]==zz[aXABCD[A]] && PeakCenaB[m]==zz[aXABCD[B]] && PeakCenaC[m]==zz[aXABCD[C]] && PeakCenaD[m]==zz[aXABCD[D]]) { if (PeakTimeX[m]==0 && PeakTimeA[m]==Time[aXABCD[A]] && PeakTimeB[m]==Time[aXABCD[B]] && PeakTimeC[m]==Time[aXABCD[C]] && PeakTimeD[m]==Time[aXABCD[D]]) {k++; break;} } } else { if (PeakCenaX[m]==zz[aXABCD[X]] && PeakCenaA[m]==zz[aXABCD[A]] && PeakCenaB[m]==zz[aXABCD[B]] && PeakCenaC[m]==zz[aXABCD[C]] && PeakCenaD[m]==zz[aXABCD[D]]) { if (PeakTimeX[m]==Time[aXABCD[X]] && PeakTimeA[m]==Time[aXABCD[A]] && PeakTimeB[m]==Time[aXABCD[B]] && PeakTimeC[m]==Time[aXABCD[C]] && PeakTimeD[m]==Time[aXABCD[D]]) {k++; break;} } } } if (m<=countGartley) { continue; } if (ArraySize(PeakCenaX)-1) { PeakCenaX[countGartley]=0; PeakTimeX[countGartley]=0; } else { PeakCenaX[countGartley]=zz[aXABCD[X]]; PeakTimeX[countGartley]=Time[aXABCD[X]]; } PeakCenaA[countGartley]=zz[aXABCD[A]]; PeakCenaB[countGartley]=zz[aXABCD[B]]; PeakCenaC[countGartley]=zz[aXABCD[C]]; PeakCenaD[countGartley]=zz[aXABCD[D]]; PeakTimeA[countGartley]=Time[aXABCD[A]]; PeakTimeB[countGartley]=Time[aXABCD[B]]; PeakTimeC[countGartley]=Time[aXABCD[C]]; PeakTimeD[countGartley]=Time[aXABCD[D]]; if (NumberPattern-1==countGartley) { saveParametersZZ=true; LevelForDminToNumberPattern=LevelForDmin; LevelForDmaxToNumberPattern=LevelForDmax; vBullBearToNumberPattern = vBullBear; vNamePatternToNumberPattern = vNamePattern; vNameStrongToNumberPattern = vNameStrongPattern; } if (countColor==ColorSize) countColor=0; // "перезаряжаем" счетчик цветов colorPattern=ColorList[countColor]; countColor++; countGartley++; } else { colorPattern=ExtColorPatterns; LevelForDminToNumberPattern=LevelForDmin; LevelForDmaxToNumberPattern=LevelForDmax; vBullBearToNumberPattern = vBullBear; vNamePatternToNumberPattern = vNamePattern; vNameStrongToNumberPattern = vNameStrongPattern; } if (Equilibrium && ExtGartleyTypeSearch==0 && vNamePattern!=v50 && StringFind(vNamePattern,"AB=CD",0)==-1 && vNamePattern!=v4Point) { double tangens, h_ea=0, h_ec=0, delta; tangens=(zz[aXABCD[B]]-zz[aXABCD[X]])/(aXABCD[X]-aXABCD[B]); if (ReactionType) { h_ea=zz[aXABCD[A]]-(zz[aXABCD[X]]+(aXABCD[X]-aXABCD[A])*tangens); h_ec=zz[aXABCD[C]]-(zz[aXABCD[B]]+(aXABCD[B]-aXABCD[C])*tangens); } else { if (zz[aXABCD[X]]>zz[aXABCD[A]]) { for (i=aXABCD[X]-1;i>=aXABCD[A];i--) { delta=Low[i]-(zz[aXABCD[X]]+(aXABCD[X]-i)*tangens); if (delta=aXABCD[C];i--) { delta=Low[i]-(zz[aXABCD[B]]+(aXABCD[B]-i)*tangens); if (delta=aXABCD[A];i--) { delta=High[i]-(zz[aXABCD[X]]+(aXABCD[X]-i)*tangens); if (delta>h_ea) h_ea=delta; } for (i=aXABCD[B]-1;i>=aXABCD[C];i--) { delta=High[i]-(zz[aXABCD[B]]+(aXABCD[B]-i)*tangens); if (delta>h_ec) h_ec=delta; } } } nameObj="_"+ExtComplekt+"Equilibrium_" + countGartley; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[X]],zz[aXABCD[X]],Time[aXABCD[B]],zz[aXABCD[B]]); ObjectSet(nameObj,OBJPROP_COLOR,ColorEquilibrium); ObjectSet(nameObj,OBJPROP_STYLE,EquilibriumStyle); ObjectSet(nameObj,OBJPROP_WIDTH,EquilibriumWidth); nameObj="_"+ExtComplekt+"Reaction1_" + countGartley; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],zz[aXABCD[B]]+tangens*(aXABCD[B]-aXABCD[C])-h_ec,Time[0],zz[aXABCD[B]]+tangens*aXABCD[B]-h_ec); ObjectSet(nameObj,OBJPROP_COLOR,ColorReaction); ObjectSet(nameObj,OBJPROP_STYLE,EquilibriumStyle); ObjectSet(nameObj,OBJPROP_WIDTH,EquilibriumWidth); nameObj="_"+ExtComplekt+"Reaction2_" + countGartley; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],zz[aXABCD[B]]+tangens*(aXABCD[B]-aXABCD[C])-h_ea,Time[0],zz[aXABCD[B]]+tangens*aXABCD[B]-h_ea); ObjectSet(nameObj,OBJPROP_COLOR,ColorReaction); ObjectSet(nameObj,OBJPROP_STYLE,EquilibriumStyle); ObjectSet(nameObj,OBJPROP_WIDTH,EquilibriumWidth); } vPatOnOff = true; //--------------------------------------------- if(f==1 && ExtIndicator!=11) { f=0; if(ExtPlayAlert) { Alert (Symbol()," ",Period()," появился новый Паттерн"); PlaySound("alert.wav"); } if (ExtSendMail) _SendMail("There was a pattern","on " + Symbol() + " " + Period() + " pattern " + vBullBear + " " + vNamePattern + " " + vNameStrongPattern); } //--------------------------------------------- if (StringLen(vBullBear)>0) { if (visibleABCDrayZZ && StringFind(vNamePattern,"AB=CD",0)>-1) { nameObj="_"+ExtComplekt+"ABCDzz1_" + countGartley + "_" + _Depth + "_" + aXABCD[D] + "_" +vBullBear + " " + vNamePattern; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[A]],zz[aXABCD[A]],Time[aXABCD[B]],zz[aXABCD[B]]); ObjectSet(nameObj,OBJPROP_COLOR,colorPattern); ObjectSet(nameObj,OBJPROP_STYLE,ABCDrayZZStyle); ObjectSet(nameObj,OBJPROP_WIDTH,ABCDrayZZWidth); ObjectSet(nameObj, OBJPROP_RAY, false); nameObj="_"+ExtComplekt+"ABCDzz2_" + countGartley + "_" + _Depth + "_" + aXABCD[D] + "_" +vBullBear + " " + vNamePattern; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[B]],zz[aXABCD[B]],Time[aXABCD[C]],zz[aXABCD[C]]); ObjectSet(nameObj,OBJPROP_COLOR,colorPattern); ObjectSet(nameObj,OBJPROP_STYLE,ABCDrayZZStyle); ObjectSet(nameObj, OBJPROP_RAY, false); ObjectSet(nameObj,OBJPROP_WIDTH,ABCDrayZZWidth); nameObj="_"+ExtComplekt+"ABCDzz3_" + countGartley + "_" + _Depth + "_" + aXABCD[D] + "_" +vBullBear + " " + vNamePattern; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],zz[aXABCD[C]],Time[aXABCD[D]],zz[aXABCD[D]]); ObjectSet(nameObj,OBJPROP_COLOR,colorPattern); ObjectSet(nameObj,OBJPROP_STYLE,ABCDrayZZStyle); ObjectSet(nameObj,OBJPROP_WIDTH,ABCDrayZZWidth); ObjectSet(nameObj, OBJPROP_RAY, false); } else { nameObj1="_"+ExtComplekt+"Triangle1_" + countGartley + "_" + _Depth + "_" + aXABCD[D] + "_" +vBullBear + " " + vNamePattern; //* + " " + vNameStrongPattern; nameObj2="_"+ExtComplekt+"Triangle2_" + countGartley + "_" + _Depth + "_" + aXABCD[D] + "_" +vBullBear + " " + vNamePattern; // + " " + vNameStrongPattern; if (vNamePattern == v4Point || StringFind(vNamePattern,"AB=CD",0)>-1) // || vNamePattern==v50) { ObjectCreate(nameObj1,OBJ_TRIANGLE,0,Time[aXABCD[A]],zz[aXABCD[A]],Time[aXABCD[B]],zz[aXABCD[B]],Time[aXABCD[C]],zz[aXABCD[C]]); } else { ObjectCreate(nameObj1,OBJ_TRIANGLE,0,Time[aXABCD[X]],zz[aXABCD[X]],Time[aXABCD[A]],zz[aXABCD[A]],Time[aXABCD[B]],zz[aXABCD[B]]); } ObjectSet(nameObj1,OBJPROP_COLOR,colorPattern); if (vNamePattern==vDragon) { ObjectCreate(nameObj2,OBJ_TRIANGLE,0,Time[aXABCD[B]],zz[aXABCD[B]],Time[aXABCD[C]],zz[aXABCD[C]],tDragonE,cDragonE); } else { ObjectCreate(nameObj2,OBJ_TRIANGLE,0,Time[aXABCD[B]],zz[aXABCD[B]],Time[aXABCD[C]],zz[aXABCD[C]],Time[aXABCD[D]],zz[aXABCD[D]]); } ObjectSet(nameObj2,OBJPROP_COLOR,colorPattern); } } if (RangeForPointD>0 && LevelForDmin > 0) // Вывод прямоугольника для зоны точки D { for (j=aXABCD[C];j>=aXABCD[D];j--) { if (vBullBear == vBull) { if (LevelForDmax>=Low[j]) {TimeForDmax = Time[j]; break;} } else if (vBullBear == vBear) { if (LevelForDmin<=High[j]) {TimeForDmin = Time[j]; break;} } } if (vBullBear == vBull) { TimeForDmin = TimeForDmax+((LevelForDmax-LevelForDmin)/((zz[aXABCD[C]]-zz[aXABCD[D]])/(aXABCD[C]-aXABCD[D]+1)))*Period()*60; } else if (vBullBear == vBear) { TimeForDmax = TimeForDmin+((LevelForDmax-LevelForDmin)/((zz[aXABCD[D]]-zz[aXABCD[C]])/(aXABCD[C]-aXABCD[D]+1)))*Period()*60; } if (TimeForDmin>TimeForDmax) { timeLineD=TimeForDmin; TimeForDmin=TimeForDmax; TimeForDmax=timeLineD; } else { timeLineD=TimeForDmax; } if (VectorOfAMirrorTrend==1) { nameObj="_"+ExtComplekt+"VectorOfAMirrorTrend_1_" + countGartley + ""; } else if (VectorOfAMirrorTrend==2) { nameObj="_"+ExtComplekt+"VectorOfAMirrorTrend_2_" + countGartley + ""; if (vBullBear == vBear) ObjectCreate(nameObj,OBJ_TREND,0,TimeForDmin,LevelForDmax,TimeForDmax,LevelForDmin); else ObjectCreate(nameObj,OBJ_TREND,0,TimeForDmin,LevelForDmin,TimeForDmax,LevelForDmax); ObjectSet(nameObj, OBJPROP_BACK, false); ObjectSet(nameObj, OBJPROP_RAY, true); ObjectSet(nameObj, OBJPROP_COLOR, LawnGreen); ObjectSet(nameObj, OBJPROP_STYLE, STYLE_DASH); } nameObj="_"+ExtComplekt+"PointD_" + countGartley + ""; ObjectCreate(nameObj,OBJ_RECTANGLE,0,TimeForDmin,LevelForDmin,TimeForDmax,LevelForDmax); ObjectSet(nameObj, OBJPROP_BACK, false); ObjectSet(nameObj, OBJPROP_COLOR, ExtColorRangeForPointD); if (RangeForPointD==2) { if (LevelForDmax>=LevelDA1272 && LevelDA1272>=LevelForDmin) { nameObj="_"+ExtComplekt+"PDLA1272_" + countGartley + ""; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],LevelDA1272,timeLineD,LevelDA1272); ObjectSet(nameObj, OBJPROP_COLOR, ExtLineForPointD_AB); ObjectSet(nameObj, OBJPROP_RAY, false); } if (LevelForDmax>=LevelDA1618 && LevelDA1618>=LevelForDmin) { nameObj="_"+ExtComplekt+"PDLA1618_" + countGartley + ""; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],LevelDA1618,timeLineD,LevelDA1618); ObjectSet(nameObj, OBJPROP_COLOR, ExtLineForPointD_AB); ObjectSet(nameObj, OBJPROP_RAY, false); } if (LevelForDmax>=LevelDA2 && LevelDA2>=LevelForDmin) { nameObj="_"+ExtComplekt+"PDLA2_" + countGartley + ""; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],LevelDA2,timeLineD,LevelDA2); ObjectSet(nameObj, OBJPROP_COLOR, ExtLineForPointD_AB); ObjectSet(nameObj, OBJPROP_RAY, false); } if (LevelForDmax>=LevelDA2618 && LevelDA2618>=LevelForDmin) { nameObj="_"+ExtComplekt+"PDLA2618_" + countGartley + ""; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],LevelDA2618,timeLineD,LevelDA2618); ObjectSet(nameObj, OBJPROP_COLOR, ExtLineForPointD_AB); ObjectSet(nameObj, OBJPROP_RAY, false); } if (LevelForDmax>=LevelDA3618 && LevelDA3618>=LevelForDmin) { nameObj="_"+ExtComplekt+"PDLA3618_" + countGartley + ""; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],LevelDA3618,timeLineD,LevelDA3618); ObjectSet(nameObj, OBJPROP_COLOR, ExtLineForPointD_AB); ObjectSet(nameObj, OBJPROP_RAY, false); } if (LevelForDmax>=LevelDA4236 && LevelDA4236>=LevelForDmin) { nameObj="_"+ExtComplekt+"PDLA4618_" + countGartley + ""; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],LevelDA4236,timeLineD,LevelDA4236); ObjectSet(nameObj, OBJPROP_COLOR, ExtLineForPointD_AB); ObjectSet(nameObj, OBJPROP_RAY, false); } if (LevelForDmax>=LevelDC786 && LevelDC786>=LevelForDmin) { nameObj="_"+ExtComplekt+"PDLC786_" + countGartley + ""; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],LevelDC786,timeLineD,LevelDC786); ObjectSet(nameObj, OBJPROP_COLOR, ExtLineForPointD_BC); ObjectSet(nameObj, OBJPROP_RAY, false); } if (LevelForDmax>=LevelDC886 && LevelDC886>=LevelForDmin) { nameObj="_"+ExtComplekt+"PDLC886_" + countGartley + ""; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],LevelDC886,timeLineD,LevelDC886); ObjectSet(nameObj, OBJPROP_COLOR, ExtLineForPointD_BC); ObjectSet(nameObj, OBJPROP_RAY, false); } if (LevelForDmax>=LevelDC1272 && LevelDC1272>=LevelForDmin) { nameObj="_"+ExtComplekt+"PDLC1272_" + countGartley + ""; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],LevelDC1272,timeLineD,LevelDC1272); ObjectSet(nameObj, OBJPROP_COLOR, ExtLineForPointD_BC); ObjectSet(nameObj, OBJPROP_RAY, false); } if (LevelForDmax>=LevelDC1618 && LevelDC1618>=LevelForDmin) { nameObj="_"+ExtComplekt+"PDLC1618_" + countGartley + ""; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],LevelDC1618,timeLineD,LevelDC1618); ObjectSet(nameObj, OBJPROP_COLOR, ExtLineForPointD_BC); ObjectSet(nameObj, OBJPROP_RAY, false); } if (LevelForDmax>=LevelDC2 && LevelDC2>=LevelForDmin) { nameObj="_"+ExtComplekt+"PDLC2_" + countGartley + ""; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],LevelDC2,timeLineD,LevelDC2); ObjectSet(nameObj, OBJPROP_COLOR, ExtLineForPointD_BC); ObjectSet(nameObj, OBJPROP_RAY, false); } if (LevelForDmax>=LevelDC2618 && LevelDC2618>=LevelForDmin) { nameObj="_"+ExtComplekt+"PDLC2618_" + countGartley + ""; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],LevelDC2618,timeLineD,LevelDC2618); ObjectSet(nameObj, OBJPROP_COLOR, ExtLineForPointD_BC); ObjectSet(nameObj, OBJPROP_RAY, false); } if (LevelForDmax>=LevelDC3618 && LevelDC3618>=LevelForDmin) { nameObj="_"+ExtComplekt+"PDLC3618_" + countGartley + ""; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],LevelDC3618,timeLineD,LevelDC3618); ObjectSet(nameObj, OBJPROP_COLOR, ExtLineForPointD_BC); ObjectSet(nameObj, OBJPROP_RAY, false); } if (LevelForDmax>=LevelDC4236 && LevelDC4236>=LevelForDmin) { nameObj="_"+ExtComplekt+"PDLC4236_" + countGartley + ""; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[C]],LevelDC4236,timeLineD,LevelDC4236); ObjectSet(nameObj, OBJPROP_COLOR, ExtLineForPointD_BC); ObjectSet(nameObj, OBJPROP_RAY, false); } } if (ExtIndicator==11 && ExtHiddenPP==2) { k1=MathCeil((aXABCD[X]+aXABCD[B])/2); nameObj="_" + ExtComplekt + "pgtxt" + Time[aXABCD[B]] + "_" + Time[aXABCD[X]]; ObjectCreate(nameObj,OBJ_TEXT,0,Time[k1],(zz[aXABCD[B]]+zz[aXABCD[X]])/2); ObjectSetText(nameObj,DoubleToStr(retXB,3),ExtSizeTxt,"Arial", ExtNotFibo); nameObj="_" + ExtComplekt + "pg" + Time[aXABCD[B]] + "_" + Time[aXABCD[X]]; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[X]],zz[aXABCD[X]],Time[aXABCD[B]],zz[aXABCD[B]]); ObjectSet(nameObj,OBJPROP_RAY,false); ObjectSet(nameObj,OBJPROP_STYLE,STYLE_DOT); ObjectSet(nameObj,OBJPROP_COLOR,ExtLine); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); k1=MathCeil((aXABCD[X]+aXABCD[D])/2); nameObj="_" + ExtComplekt + "pgtxt" + Time[aXABCD[D]] + "_" + Time[aXABCD[X]]; ObjectCreate(nameObj,OBJ_TEXT,0,Time[k1],(zz[aXABCD[D]]+zz[aXABCD[X]])/2); ObjectSetText(nameObj,DoubleToStr(retXD,3),ExtSizeTxt,"Arial", ExtNotFibo); nameObj="_" + ExtComplekt + "pg" + Time[aXABCD[D]] + "_" + Time[aXABCD[X]]; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[X]],zz[aXABCD[X]],Time[aXABCD[D]],zz[aXABCD[D]]); ObjectSet(nameObj,OBJPROP_RAY,false); ObjectSet(nameObj,OBJPROP_STYLE,STYLE_DOT); ObjectSet(nameObj,OBJPROP_COLOR,ExtLine); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); k1=MathCeil((aXABCD[B]+aXABCD[D])/2); nameObj="_" + ExtComplekt + "pgtxt" + Time[aXABCD[D]] + "_" + Time[aXABCD[B]]; ObjectCreate(nameObj,OBJ_TEXT,0,Time[k1],(zz[aXABCD[D]]+zz[aXABCD[B]])/2); ObjectSetText(nameObj,DoubleToStr(retBD,3),ExtSizeTxt,"Arial", ExtNotFibo); nameObj="_" + ExtComplekt + "pg" + Time[aXABCD[D]] + "_" + Time[aXABCD[B]]; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[B]],zz[aXABCD[B]],Time[aXABCD[D]],zz[aXABCD[D]]); ObjectSet(nameObj,OBJPROP_RAY,false); ObjectSet(nameObj,OBJPROP_STYLE,STYLE_DOT); ObjectSet(nameObj,OBJPROP_COLOR,ExtLine); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); k1=MathCeil((aXABCD[A]+aXABCD[C])/2); nameObj="_" + ExtComplekt + "pgtxt" + Time[aXABCD[C]] + "_" + Time[aXABCD[A]]; ObjectCreate(nameObj,OBJ_TEXT,0,Time[k1],(zz[aXABCD[C]]+zz[aXABCD[A]])/2); ObjectSetText(nameObj,DoubleToStr(retAC,3),ExtSizeTxt,"Arial", ExtNotFibo); nameObj="_" + ExtComplekt + "pg" + Time[aXABCD[C]] + "_" + Time[aXABCD[A]]; ObjectCreate(nameObj,OBJ_TREND,0,Time[aXABCD[A]],zz[aXABCD[A]],Time[aXABCD[C]],zz[aXABCD[C]]); ObjectSet(nameObj,OBJPROP_RAY,false); ObjectSet(nameObj,OBJPROP_STYLE,STYLE_DOT); ObjectSet(nameObj,OBJPROP_COLOR,ExtLine); ObjectSet(nameObj,OBJPROP_BACK,ExtBack); } } return(0); } else { vBullBear = ""; vNamePattern = ""; } k++; if (patternInfluence==1) { if (!(ExtIndicator>5 && ExtIndicator<11 && GrossPeriod>Period())) { bartoD=AllowedBandPatternInfluence*(aNumBarPeak[k+4]-aNumBarPeak[k]); } } } } //-------------------------------------------------------- // Поиск паттернов Gartley. Конец. //-------------------------------------------------------- //---------------------------------------------------- // nen-ZigZag. Режим DT. Начало. //---------------------------------------------------- void nenZigZag() { if (cbi>0) { // datetime nen_time=iTime(NULL,GrossPeriod,ExtMinBar); datetime nen_time=iTime(NULL,GrossPeriod,0); int i=0, j=0; // j - номер бара с максимальным максимумом (минимальным минимумом) в полоске nen-ZigZag double nen_dt=0, last_j=0, last_nen=0; //last_j - значение максимального максимума (минимального минимума) в полоске nen_ZigZag int limit, big_limit, bigshift=0; int i_metka=-1, i_metka_m=-1, k, m, jm; bool fl_metka=false; double last_jm=0, last_nen_m=0; // if (ExtLabel>0) metka=1; else metka=0; if (ExtMaxBar>0) _maxbarZZ=ExtMaxBar; else _maxbarZZ=Bars; if (init_zz) { limit=_maxbarZZ-1; big_limit=iBars(NULL,GrossPeriod)-1; } else { limit=iBarShift(NULL,0,afr[2]); big_limit=iBarShift(NULL,GrossPeriod,afr[2]); } while (bigshift=nen_time) { if (ExtIndicator==6) { if (ExtLabel>0) { ha[i]=iCustom(NULL,GrossPeriod,"ZigZag_new_nen6",minBars,ExtBackstep,1,1,bigshift); la[i]=iCustom(NULL,GrossPeriod,"ZigZag_new_nen6",minBars,ExtBackstep,1,2,bigshift); } nen_ZigZag[i]=iCustom(NULL,GrossPeriod,"ZigZag_new_nen6",minBars,ExtBackstep,0,0,bigshift); } else if (ExtIndicator==7) { if (ExtLabel>0) { ha[i]=iCustom(NULL,GrossPeriod,"DT_ZZ_nen",minBars,1,1,bigshift); la[i]=iCustom(NULL,GrossPeriod,"DT_ZZ_nen",minBars,1,2,bigshift); } nen_ZigZag[i]=iCustom(NULL,GrossPeriod,"DT_ZZ_nen",minBars,0,0,bigshift); } else if (ExtIndicator==8) nen_ZigZag[i]=iCustom(NULL,GrossPeriod,"CZigZag",minBars,ExtDeviation,0,bigshift); else if (ExtIndicator==10) { if (ExtLabel>0) { ha[i]=iCustom(NULL,GrossPeriod,"Swing_ZZ_1",minBars,1,1,bigshift); la[i]=iCustom(NULL,GrossPeriod,"Swing_ZZ_1",minBars,1,2,bigshift); } nen_ZigZag[i]=iCustom(NULL,GrossPeriod,"Swing_ZZ_1",minBars,1,0,bigshift); } i++; } else {bigshift++;nen_time=iTime(NULL,GrossPeriod,bigshift);} } if (init_zz) // обработка истории { double i1=0, i2=0; init_zz=false; for (i=limit;i>ExtMinBar;i--) // определение направления первого луча { if (nen_ZigZag[i]>0) { if (i1==0) i1=nen_ZigZag[i]; else if (i1>0 && i1!=nen_ZigZag[i]) i2=nen_ZigZag[i]; if (i2>0) { if (i1>i2) hi_nen=true; else hi_nen=false; break; } } } } else // режим реального времени { if (afrl[2]>0) hi_nen=false; else hi_nen=true; } for (i=limit;i>=0;i--) { // if (i0) { if (ExtLabel==2) { if (i_metka_m>=0 && !fl_metka) { m=i_metka_m-GrossPeriod/Period(); for (k=i_metka_m; k>m; k--) { ha[k]=0; la[k]=0; } if (hi_nen) ha[jm]=last_nen_m; else la[jm]=last_nen_m; jm=0; last_nen_m=0; last_jm=0; i_metka_m=-1; } if (i_metka<0) i_metka=i; } fl_metka=true; if (nen_dt>0 && nen_dt!=nen_ZigZag[i]) { if (i_metka>=0 && fl_metka) { m=i_metka-GrossPeriod/Period(); for (k=i_metka; k>m; k--) { ha[k]=0; la[k]=0; } if (hi_nen) ha[j]=last_nen; else la[j]=last_nen; i_metka=i; } if (hi_nen) {hi_nen=false;zzH[j]=last_nen;} else {hi_nen=true;zzL[j]=last_nen;} last_j=0;nen_dt=0;zz[j]=last_nen; } if (hi_nen) { nen_dt=nen_ZigZag[i]; if (last_jLow[i]) {j=i;last_j=Low[i];last_nen=nen_ZigZag[i];} } if (nen_dt>0 && i==0) // определение перелома на нулевом баре GrossPeriod { if (i_metka>=0 && fl_metka) { m=i_metka-GrossPeriod/Period(); for (k=i_metka; k>m; k--) { ha[k]=0; la[k]=0; } if (hi_nen) ha[j]=last_nen; else la[j]=last_nen; fl_metka=false; } zz[j]=last_nen; if (hi_nen) zzH[j]=last_nen; else zzL[j]=last_nen; } } else { if (last_j>0 && fl_metka) { if (i_metka>=0 && fl_metka) { m=i_metka-GrossPeriod/Period(); for (k=i_metka; k>m; k--) { ha[k]=0; la[k]=0; } if (hi_nen) ha[j]=last_nen; else la[j]=last_nen; } fl_metka=false; if (hi_nen) {hi_nen=false;zzH[j]=last_nen;} else {hi_nen=true;zzL[j]=last_nen;} last_j=0;nen_dt=0;zz[j]=last_nen; i_metka=-1; } if (ExtLabel==2) { if ((ha[i]>0 || la[i]>0) && !fl_metka) { if (i_metka_m<0) { i_metka_m=i; jm=i; if (hi_nen) { last_jm=High[i];last_nen_m=ha[i]; } else { last_jm=Low[i];last_nen_m=la[i]; } } if (hi_nen) { if (last_nen_m>last_jm) {jm=i;last_jm=High[i];} } else { if (last_nen_mMathAbs(a)) return(a*1.0/b); else return(0);} //============================================================================================= double ray_value(double B1, double P1, double B2, double P2, double AAA){return(P1+( AAA -B1)*div(P2-P1,B2-B1));} //============================================================================================= datetime bar2time(int b){int t,TFsec=Period()*60; if(b<0) t=Time[0]-(b)*TFsec; else if(b>(Bars-1)) t=Time[Bars-1]-(b-Bars+1)*TFsec; else t=Time[b]; return(t);} //============================================================================================= int time2bar(datetime t){int b,t0=Time[0],TFsec=Period()*60; if(t>t0) b=(t0-t)/TFsec; else if(t=0 && a=a; i--) {zzH[i]=zzH[i-a]; zzL[i]=zzL[i-a];} for(;i>=0;i--) {zzH[i]=0; zzL[i]=0;} } } else { ii=barz; H1=ii+1; L1=ii; H2=ii+3; L2=ii+2; L2p=Low[L2];H2p=High[H2]; L1p=Low[L1];H1p=High[H1]; H3=H2; H3p=H2p; L3=L2; L3p=L2p; } act_time=Time[1]; for(c=0; ii>=0; c++, ii--) { H=ii; L=ii; Hp= High[H]; Lp= Low[L]; //------------------------------------------------------------------------------------- if(H2=H1p ) { H1=H; H1p=Hp; if( H1p>H2p ) { zzH[H2]=0; H1=H; H1p=Hp; H2=H1; H2p=H1p; L1=H1; L1p=H1p; zzH[H2]=H2p; } } else if( Lp<=L1p ) { L1=L; L1p=Lp; x=ray_value(L2,L2p,H2+(L2-H3)*0.5,H2p+(L2p-H3p)*0.5,L1); if( L1p<=L2p//также работает L1p<=L2p*0.75+H2p*0.25 или любые другие условия || tb*tb*Point<(H2p-L1p)*(H2-L1)) { //сдвигаем все Low L4=L3; L4p=L3p; L3=L2; L3p=L2p; L2=L1; L2p=L1p; H1=L1; H1p=L1p; zzL[L2]=L2p; } } } //-------------------------------------------------------------- if(L2=H1p ) { H1=H; H1p=Hp; x=ray_value(H2,H2p,L2+0.5*(H2-L3),L2p+0.5*(H2p-L3p),H1); if( H1p>=H2p//можно и так: H1p>=H2p*0.75+L2p*0.25 || tb*tb*Point<(H1p-L2p)*(L2-H1)) { //сдвигаем все High H4=H3; H4p=H3p; H3=H2; H3p=H2p; H2=H1; H2p=H1p; L1=H1; L1p=H1p; zzH[H2]=H2p; } } }//-------------------------------------------------------------------------------- }//for for(ii=bb-1; ii>=0; ii--) zz[ii]=MathMax(zzL[ii],zzH[ii]); } //======================================================================= // SQZZ by tovaroved.lv. Конец. //======================================================================= //-------------------------------------------------------- // ZZ_2L_nen . Начало. //#property copyright "Copyright © 2007, wellx. ver 0.07 alpha" //#property link "aveliks@gmail.com" //-------------------------------------------------------- void ZZ_2L_nen() { int count = IndicatorCounted(); int k, i,shift,cnt, pos,curhighpos,curlowpos; if (Bars-count-1>2) { count=0; NewBarTime=0; countbars=0; realcnt=0; ArrayInitialize(zz,0); ArrayInitialize(zzL,0); ArrayInitialize(zzH,0); } for (k=(Bars-count-1);k>=0;k--) { if(( NewBarTime==Time[0]) || (realcnt==Bars)) first=false; else first=true; //-------------------------------------------------------------------- //Находим первую точку индикатора //-------------------------------------------------------------------- if (first) { lastlowpos=Bars-1; lasthighpos=Bars-1; zzL[Bars-1]=0.0; zzH[Bars-1]=0.0; zz[Bars-1]=0.0; realcnt=2; for(shift=(Bars-2); shift>=0; shift--) { if ((High[shift]>High[shift+1]) && (Low[shift]>=Low[shift+1])) { zzL[shift]=0.0; zzH[shift]=High[shift]; zz[shift]=High[shift]; lasthighpos=shift; lasthigh=High[shift]; lastlow=Low[Bars-1]; pos=shift; first=false; break; } if ((High[shift]<=High[shift+1]) && (Low[shift]High[shift+1]) && (Low[shift](Low[shift+1]-Low[shift])) { zzL[shift]=0.0; zzH[shift]=High[shift]; zz[shift]=High[shift]; zzL[shift]=0.0; lasthighpos=shift; lasthigh=High[shift]; lastlow=Low[Bars-1]; pos=shift; first=false; break; } if ((High[shift]-High[shift+1])<(Low[shift+1]-Low[shift])) { zzL[shift]=Low[shift]; zzH[shift]=0.0; zz[shift]=Low[shift]; lasthighpos=shift; lasthigh=High[shift]; lastlow=Low[Bars-1]; pos=shift; first=false; break; } if ((High[shift]-High[shift+1])==(Low[shift+1]-Low[shift])) { zzL[shift]=0.0; zzH[shift]=0.0; zz[shift]=0.0; } } if ((High[shift]Low[shift+1])) { zzL[shift]=0.0; zzH[shift]=0.0; zz[shift]=0.0; } pos=shift; realcnt=realcnt+1; } //------------------------------------------------------------------------- // здесь начинается отработка основного цикла ЗЗ //------------------------------------------------------------------------- for(shift=pos-1; shift>=0; shift--) { if ((High[shift]>High[shift+1]) && (Low[shift]>=Low[shift+1])) { if (lasthighposHigh[lasthighpos]) { zzL[shift]=0.0; zzH[shift]=High[shift]; zz[shift]=High[shift]; zz[lasthighpos]=0.0; if (shift!=0) lasthighpos=shift; lasthigh=High[shift]; if (lastlowpos!=Bars) { // Надо рассчитать позднее длины лучей } } } if (lasthighpos>lastlowpos) { if ((((High[shift]-Low[lastlowpos])>(StLevel*Point)) && ((lastlowpos-shift)>=minBars)) || ((High[shift]-Low[lastlowpos])>=(BigLevel*Point))) { zzL[shift]=0.0; zzH[shift]=High[shift]; zz[shift]=High[shift]; //zz[lasthighpos]=0.0; if (shift!=0) lasthighpos=shift; lasthigh=High[shift]; } } } if ((High[shift]<=High[shift+1]) && (Low[shift]lasthighpos) { if ((((High[lasthighpos]-Low[shift])>(StLevel*Point)) && ((lasthighpos-shift)>=minBars)) || ((High[lasthighpos]-Low[shift])>=(BigLevel*Point))) { zzL[shift]=Low[shift]; zzH[shift]=0.0; zz[shift]=Low[shift]; //zz[lastlowpos]=0.0; if (shift!=0) lastlowpos=shift; lastlow=Low[shift]; } } } if ((High[shift]>High[shift+1]) && (Low[shift]High[lasthighpos]) { zzL[shift]=0.0; zzH[shift]=High[shift]; zz[shift]=High[shift]; zz[lasthighpos]=0.0; if (shift!=0) lasthighpos=shift; lasthigh=High[shift]; } } } realcnt=realcnt+1; // if (shift<=0) } first=false; countbars=Bars; NewBarTime=Time[0]; } //**************************************************************************************************** // // Обработка нулевого бара // //**************************************************************************************************** else //if (!first) { if (realcnt!=Bars) { first=True; return(0); } if (Close[0]>=lasthigh) { if (lastlowposlastlow) { if ((((High[0]-Low[lastlowpos])>(StLevel*Point)) && ((lastlowpos)>=minBars)) || ((High[0]-Low[lastlowpos])>(BigLevel*Point))) { zzL[0]=0.0; zzH[0]=High[0]; zz[0]=High[0]; lasthigh=High[0]; // lasthighpos=0; } } } if (lastlowpos>lasthighpos) { if (High[0]>=lasthigh) { zz[lasthighpos]=0.0; zz[0]=High[0]; zzL[0]=0.0; zzH[0]=High[0]; lasthighpos=0; lasthigh=High[0]; } } //lasthigh=High[0]; } if (Close[0]<=lastlow) { if (lastlowposlasthighpos) { if (High[0](StLevel*Point)) && ((lasthighpos-shift)>=minBars)) || ((High[lasthighpos]-Low[shift])>(BigLevel*Point))) { zz[0]=Low[0]; zzL[0]=Low[0]; zzH[0]=0.0; lastlow=Low[0]; // lastlowpos=0; } } } //lastlow=Low[0]; } } return(0); } } //-------------------------------------------------------- // ZZ_2L_nen . Конец. //#property copyright "Copyright © 2007, wellx. ver 0.07 alpha" //#property link "aveliks@gmail.com" //-------------------------------------------------------- //-------------------------------------------------------- // Индикатор i-vts . Начало. //-------------------------------------------------------- //+------------------------------------------------------------------+ //| i-VTS.mq4 | //| Тахир & KimIV | //| http://www.kimiv.ru | //| | //| 06.12.2005 Индикатор VTS | //+------------------------------------------------------------------+ // // Этот индикатор Игорь Ким перевел с MQL на MQ4 // void i_vts() // { int LoopBegin, sh; if (NumberOfBars==0) LoopBegin=Bars-1; else LoopBegin=NumberOfBars-1; LoopBegin=MathMin(Bars-25, LoopBegin); for (sh=LoopBegin; sh>=0; sh--) { GetValueVTS("", 0, NumberOfVTS, sh); ha[sh]=ms[0]; la[sh]=ms[1]; } } void i_vts1() // { int LoopBegin, sh; if (NumberOfBars==0) LoopBegin=Bars-1; else LoopBegin=NumberOfBars-1; LoopBegin=MathMin(Bars-25, LoopBegin); for (sh=LoopBegin; sh>=0; sh--) { GetValueVTS("", 0, NumberOfVTS1, sh); ham[sh]=ms[0]; lam[sh]=ms[1]; } } //+------------------------------------------------------------------+ //------- Поключение внешних модулей --------------------------------- //+------------------------------------------------------------------+ //| Параметры: | //| sym - наименование инструмента | //| tf - таймфрейм (количество минут) | //| ng - номер группы | //| nb - номер бара | //| ms - массив сигналов | //+------------------------------------------------------------------+ void GetValueVTS(string sym, int tf, int ng, int nb) { if (sym=="") sym=Symbol(); double f1, f2, s1, s2; f1=iClose(sym, tf, nb)-3*iATR(sym, tf, 10, nb); f2=iClose(sym, tf, nb)+3*iATR(sym, tf, 10, nb); for (int i=1; i<=ng; i++) { s1=iClose(sym, tf, nb+i)-3*iATR(sym, tf, 10, nb+i); s2=iClose(sym, tf, nb+i)+3*iATR(sym, tf, 10, nb+i); if (f1s2) f2=s2; } ms[0]=f2; // верхняя линия ms[1]=f1; // нижняя линия } //+------------------------------------------------------------------+ //-------------------------------------------------------- // Индикатор i-vts . Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Параметры разных таймфреймов и другая информация. Начало. //-------------------------------------------------------- void info_TF() { string info="", info1="", info2="", info3="", info4="", txt="", txt0="", txt1="", regim="", perc="", mp0="", mp1=""; int i, j=0, k; double pips; openTF[0]=iOpen(NULL,PERIOD_MN1,0); closeTF[0]=iClose(NULL,PERIOD_MN1,0); lowTF[0]=iLow(NULL,PERIOD_MN1,0); highTF[0]=iHigh(NULL,PERIOD_MN1,0); openTF[1]=iOpen(NULL,PERIOD_W1,0); closeTF[1]=iClose(NULL,PERIOD_W1,0); lowTF[1]=iLow(NULL,PERIOD_W1,0); highTF[1]=iHigh(NULL,PERIOD_W1,0); openTF[2]=iOpen(NULL,PERIOD_D1,0); closeTF[2]=iClose(NULL,PERIOD_D1,0); lowTF[2]=iLow(NULL,PERIOD_D1,0); highTF[2]=iHigh(NULL,PERIOD_D1,0); openTF[3]=iOpen(NULL,PERIOD_H4,0); closeTF[3]=iClose(NULL,PERIOD_H4,0); lowTF[3]=iLow(NULL,PERIOD_H4,0); highTF[3]=iHigh(NULL,PERIOD_H4,0); openTF[4]=iOpen(NULL,PERIOD_H1,0); closeTF[4]=iClose(NULL,PERIOD_H1,0); lowTF[4]=iLow(NULL,PERIOD_H1,0); highTF[4]=iHigh(NULL,PERIOD_H1,0); if (StringSubstr(info_comment,2,1)=="1") { if (minPercent>0) perc=DoubleToStr(MathAbs(minPercent),1); else perc="0.0"; switch (ExtIndicator) { case 0 : {regim=" | "+ ExtIndicator + " / " + minBars + " / " + ExtBackstep; break;} case 1 : {regim=" | "+ ExtIndicator + " / " + minSize + " / " + perc+" %"; break;} case 2 : {regim=" | "+ ExtIndicator + " / " + minBars + "/" + minSize; break;} case 3 : {regim=" | "+ ExtIndicator + " / " + minBars; break;} case 4 : {regim=" | "+ ExtIndicator + " / " + minSize; break;} case 5 : {regim=" | "+ ExtIndicator + " / " + minBars; break;} case 6 : {regim=" | "+ ExtIndicator + " / " + GrossPeriod + " / " + minBars + " / " + ExtBackstep; break;} case 7 : {regim=" | "+ ExtIndicator + " / " + GrossPeriod + " / " + minBars; break;} case 8 : {regim=" | "+ ExtIndicator + " / " + GrossPeriod + " / " + minBars + " / " + ExtDeviation; break;} case 10 : {regim=" | "+ ExtIndicator + " / " + GrossPeriod + " / " + minBars; break;} case 11 : {regim=" | "+ ExtIndicator + " / " + Depth + " / " + ExtBackstep; break;} case 12 : {regim=" | "+ ExtIndicator + " / " + minSize; break;} case 13 : {regim=" | "+ ExtIndicator + " / " + minBars + " / " + minSize; break;} case 14 : {regim=" | "+ ExtIndicator + " / " + StLevel + " / " + BigLevel + " / " + minBars; break;} } } if (_ExtPitchforkStatic>0) { if (ExtCustomStaticAP) { regim=regim + " / APm"; } else { if (ExtPitchforkCandle) regim=regim + " / APs-bars"; else regim=regim + " / APs-" + ExtPitchforkStaticNum; } } info=""; if (StringSubstr(info_comment,0,1)=="1") { for (i=0;i<5;i++) { pips=(highTF[i]-lowTF[i])/Point; if (pips>0) { if (openTF[i]==closeTF[i]) {txt=" = ";} else if (openTF[i]!=closeTF[i] && MathAbs((highTF[i]-lowTF[i])/(openTF[i]-closeTF[i]))>=6.6) {txt=" -|- ";} else if (openTF[i]>closeTF[i]) {txt=" \/ ";} else if (openTF[i]0) { if (afrh[1]!=0) info1=info1+" "+DoubleToStr(100*MathAbs(afrh[1]-afrl[0])/afrh[1],2)+" %"; } else { if (afrl[1]!=0) info1=info1+" "+DoubleToStr(100*MathAbs(afrh[0]-afrl[1])/afrl[1],2)+" %"; } } info1=info1+regim; if (StringSubstr(info_comment,3,1)=="1") { if (StringLen(vNamePatternToNumberPattern)>0) { info2="It is found " + countGartley + " patterns - for pattern N " + NumberPattern + " - " + vBullBearToNumberPattern + " " + vNamePatternToNumberPattern +" " +vNameStrongToNumberPattern+ " - " + DoubleToStr(LevelForDminToNumberPattern,Digits) + " < Range of the prices D < " + DoubleToStr(LevelForDmaxToNumberPattern,Digits) + ""; } else info2=""; } if (StringSubstr(info_comment,4,1)=="1") { if (info_RZS_RL=="") { info=""; } else { info="RL_Static="+info_RZS_RL + " "; } info3=info; if (info_RZD_RL=="") { info3=info; } else { info3=info+"RL_Dinamic="+info_RZD_RL; } } if (infoMerrillPattern) { for (k=4;k>=0;k--) { j=mPeak0[k][1]; txt0=txt0+j; j=mPeak1[k][1]; txt1=txt1+j; } for (k=0;k<32;k++) { if (txt0==mMerrillPatterns[k][0]) {mp0=mMerrillPatterns[k][1]+" "+mMerrillPatterns[k][2];} if (txt1==mMerrillPatterns[k][0]) {mp1=mMerrillPatterns[k][1]+" "+mMerrillPatterns[k][2];} } if (StringLen(mp1)>0 && StringLen(mp0)>0) info4="Static "+mp1+" / "+"Dinamic "+mp0; else if (StringLen(mp1)>0) info4="Static "+mp1; else if (StringLen(mp0)>0) info4="Dinamic "+mp0; } Comment(info1,"\n",info2,"\n",""+info3,"\n",""+info4); // if (RangeForPointD>0 && vNamePatternToNumberPattern != "") if (bigText) { nameObj="#_TextPattern_#" + ExtComplekt+"_"; ObjectDelete(nameObj); if (StringLen(vNamePatternToNumberPattern)>0) { ObjectCreate(nameObj,OBJ_LABEL,0,0,0); ObjectSetText(nameObj,vBullBearToNumberPattern + " " + vNamePatternToNumberPattern + " " + vNameStrongToNumberPattern); ObjectSet(nameObj, OBJPROP_FONTSIZE, bigTextSize); if (vBullBearToNumberPattern=="Bullish") ObjectSet(nameObj, OBJPROP_COLOR, bigTextColor); else ObjectSet(nameObj, OBJPROP_COLOR, bigTextColorBearish); ObjectSet(nameObj, OBJPROP_CORNER, 1); ObjectSet(nameObj, OBJPROP_XDISTANCE, bigTextX); ObjectSet(nameObj, OBJPROP_YDISTANCE, bigTextY); } if (infoMerrillPattern) { nameObj="#_TextPatternMP_#" + ExtComplekt+"_"; ObjectDelete(nameObj); ObjectCreate(nameObj,OBJ_LABEL,0,0,0); ObjectSetText(nameObj,info4); ObjectSet(nameObj, OBJPROP_FONTSIZE, bigTextSize); ObjectSet(nameObj, OBJPROP_COLOR, bigTextColor); ObjectSet(nameObj, OBJPROP_CORNER, 1); ObjectSet(nameObj, OBJPROP_XDISTANCE, bigTextX); ObjectSet(nameObj, OBJPROP_YDISTANCE, bigTextY+3+bigTextSize); } } close_TF=Close[0]; } //-------------------------------------------------------- // Параметры разных таймфреймов и другая информация. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Создаем массивы с числами. Начало. //-------------------------------------------------------- void array_() { for (int i=0; i<65; i++) { numberFibo [i]=0; numberPesavento [i]=0; numberGartley [i]=0; numberGilmorQuality [i]=0; numberGilmorGeometric [i]=0; numberGilmorHarmonic [i]=0; numberGilmorArithmetic[i]=0; numberGilmorGoldenMean[i]=0; numberSquare [i]=0; numberCube [i]=0; numberRectangle [i]=0; numberExt [i]=0; } number [0]=0.111; numbertxt [0]=".111"; numberCube [0]=1; number [1]=0.125; numbertxt [1]=".125"; numberMix [1]=1; numberGilmorHarmonic [1]=1; number [2]=0.146; numbertxt [2]=".146"; numberFibo [2]=1; numberGilmorGeometric [2]=1; number [3]=0.167; numbertxt [3]=".167"; numberGilmorArithmetic[3]=1; number [4]=0.177; numbertxt [4]=".177"; numberGilmorHarmonic [4]=1; numberSquare [4]=1; number [5]=0.186; numbertxt [5]=".186"; numberGilmorGeometric [5]=1; number [6]=0.192; numbertxt [6]=".192"; numberCube [6]=1; number [7]=0.2; numbertxt [7]=".2"; numberRectangle [7]=1; number [8]=0.236; numbertxt [8]=".236"; numberFibo [8]=1; numberMix [8]=1; numberGilmorGeometric [8]=1; numberGilmorGoldenMean[8]=1; number [9]=0.25; numbertxt [9]=".25"; numberPesavento [9]=1; numberGilmorQuality [9]=1; numberGilmorHarmonic [9]=1; numberSquare [9]=1; number [10]=0.3; numbertxt [10]=".3"; numberGilmorGeometric [10]=1; numberGilmorGoldenMean[10]=1; number [11]=0.333; numbertxt [11]=".333"; numberGilmorArithmetic[11]=1; numberCube [11]=1; number [12]=0.354; numbertxt [12]=".354"; numberGilmorHarmonic [12]=1; numberSquare [12]=1; number [13]=0.382; numbertxt [13]=".382"; numberFibo [13]=1; numberPesavento [13]=1; numberGartley [13]=1; numberGilmorQuality [13]=1; numberGilmorGeometric [13]=1; number [14]=0.447; numbertxt [14]=".447"; numberGartley [14]=1; numberRectangle [14]=1; number [15]=0.486; numbertxt [15]=".486"; numberGilmorGeometric [15]=1; numberGilmorGoldenMean[15]=1; number [16]=0.5; numbertxt [16]=".5"; numberFibo [16]=1; numberPesavento [16]=1; numberGartley [16]=1; numberGilmorQuality [16]=1; numberGilmorHarmonic [16]=1; numberSquare [16]=1; number [17]=0.526; numbertxt [17]=".526"; numberGilmorGeometric [17]=1; number [18]=0.577; numbertxt [18]=".577"; numberGilmorArithmetic[18]=1; numberCube [18]=1; number [19]=0.618; numbertxt [19]=".618"; numberFibo [19]=1; numberPesavento [19]=1; numberGartley [19]=1; numberGilmorQuality [19]=1; numberGilmorGeometric [19]=1; numberGilmorGoldenMean[19]=1; number [20]=0.667; numbertxt [20]=".667"; numberGilmorQuality [20]=1; numberGilmorArithmetic[20]=1; number [21]=0.707; numbertxt [21]=".707"; numberPesavento [21]=1; numberGartley [21]=1; numberGilmorHarmonic [21]=1; numberSquare [21]=1; number [22]=0.764; numbertxt [22]=".764"; numberFibo [22]=1; number [23]=0.786; numbertxt [23]=".786"; numberPesavento [23]=1; numberGartley [23]=1; numberGilmorQuality [23]=1; numberGilmorGeometric [23]=1; numberGilmorGoldenMean[23]=1; number [24]=0.809; numbertxt [24]=".809"; numberExt [24]=1; number [25]=0.841; numbertxt [25]=".841"; numberPesavento [25]=1; number [26]=0.854; numbertxt [26]=".854"; numberFibo [26]=1; numberMix [26]=1; number [27]=0.874; numbertxt [27]=".874"; numberExt [27]=1; number [28]=0.886; numbertxt [28]=".886"; numberGartley [28]=1; number [29]=1.0; numbertxt [29]="1."; numberFibo [29]=1; numberPesavento [29]=1; numberGartley [29]=1; numberGilmorQuality [29]=1; numberGilmorGeometric [29]=1; number [30]=1.128; numbertxt [30]="1.128"; numberPesavento [30]=1; numberGartley [30]=1; number [31]=1.236; numbertxt [31]="1.236"; numberFibo [31]=1; number [32]=1.272; numbertxt [32]="1.272"; numberPesavento [32]=1; numberGartley [32]=1; numberGilmorQuality [32]=1; numberGilmorGeometric [32]=1; numberGilmorGoldenMean[32]=1; number [33]=1.309; numbertxt [33]="1.309"; numberExt [33]=1; number [34]=1.414; numbertxt [34]="1.414"; numberPesavento [34]=1; numberGartley [34]=1; numberGilmorHarmonic [34]=1; numberSquare [34]=1; number [35]=1.5; numbertxt [35]="1.5"; // numberPesavento [35]=1; numberGilmorArithmetic[35]=1; number [36]=phi; numbertxt [36]="1.618"; numberFibo [36]=1; numberPesavento [36]=1; numberGartley [36]=1; numberGilmorQuality [36]=1; numberGilmorGeometric [36]=1; numberGilmorGoldenMean[36]=1; number [37]=1.732; numbertxt [37]="1.732"; numberMix [37]=1; numberGilmorQuality [37]=1; numberGilmorArithmetic[37]=1; numberCube [37]=1; number [38]=1.75; numbertxt [38]="1.75"; numberGilmorQuality [38]=1; number [39]=1.902; numbertxt [39]="1.902"; numberMix [39]=1; numberGilmorGeometric [39]=1; number [40]=2.0; numbertxt [40]="2."; numberPesavento [40]=1; numberGartley [40]=1; numberGilmorQuality [40]=1; numberGilmorHarmonic [40]=1; numberSquare [40]=1; number [41]=2.058; numbertxt [41]="2.058"; numberGilmorGeometric [41]=1; numberGilmorGoldenMean[41]=1; number [42]=2.236; numbertxt [42]="2.236"; numberGartley [42]=1; numberGilmorQuality [42]=1; numberRectangle [42]=1; number [43]=2.288; numbertxt [43]="2.288"; numberExt [43]=1; number [44]=2.5; numbertxt [44]="2.5"; numberGilmorQuality [44]=1; number [45]=2.618; numbertxt [45]="2.618"; numberPesavento [45]=1; numberGartley [45]=1; numberGilmorQuality [45]=1; numberGilmorGeometric [45]=1; numberGilmorGoldenMean[45]=1; number [46]=2.828; numbertxt [46]="2.828"; numberGilmorHarmonic [46]=1; numberSquare [46]=1; number [47]=3.0; numbertxt [47]="3.0"; numberGilmorQuality [47]=1; numberGilmorArithmetic[47]=1; numberCube [47]=1; number [48]=3.142; numbertxt [48]="3.142"; numberGartley [48]=1; number [49]=3.236; numbertxt [49]="3.236"; numberExt [49]=1; number [50]=3.33; numbertxt [50]="3.33"; numberGilmorQuality [50]=1; numberGilmorGeometric [50]=1; numberGilmorGoldenMean[50]=1; numberExt [50]=1; number [51]=3.464; numbertxt [51]="3.464"; numberExt [51]=1; number [52]=3.618; numbertxt [52]="3.618"; numberGartley [52]=1; number [53]=4.0; numbertxt [53]="4."; numberPesavento [53]=1; numberGilmorHarmonic [53]=1; numberSquare [53]=1; number [54]=4.236; numbertxt [54]="4.236"; numberFibo [54]=1; numberGilmorQuality [54]=1; numberGilmorGeometric [54]=1; numberExt [54]=1; number [55]=4.472; numbertxt [55]="4.472"; numberExt [55]=1; number [56]=5.0; numbertxt [56]="5."; numberRectangle [56]=1; number [57]=5.2; numbertxt [57]="5.2"; numberCube [57]=1; number [58]=5.388; numbertxt [58]="5.388"; numberGilmorGeometric [58]=1; number [59]=5.657; numbertxt [59]="5.657"; numberGilmorHarmonic [59]=1; numberSquare [59]=1; number [60]=6.0; numbertxt [60]="6."; numberGilmorArithmetic[60]=1; number [61]=6.854; numbertxt [61]="6.854"; numberGilmorQuality [61]=1; numberGilmorGeometric [61]=1; number [62]=8.0; numbertxt [62]="8."; numberGilmorHarmonic [62]=1; number [63]=9.0; numbertxt [63]="9."; numberCube [63]=1; /* number []=; numbertxt []=; // ExtFiboType=0 numberFibo []=; // 0 numberPesavento []=; // 1 numberGartley []=; // 2 numberMix []=; // 3 numberGilmorQuality []=; // 4 numberGilmorGeometric []=; // 5 numberGilmorHarmonic []=; // 6 numberGilmorArithmetic[]=; // 7 numberGilmorGoldenMean[]=; // 8 numberSquare []=; // 9 numberCube []=; // 10 numberRectangle []=; // 11 numberExt []=; */ } //-------------------------------------------------------- // Создаем массивы с числами. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Определение значений и цвета чисел для паттернов Песавенто. Начало. //-------------------------------------------------------- void Pesavento_patterns() { if (ExtFiboType==1) { switch (ExtFiboChoice) { case 0 : {search_number(numberPesavento, ExtPesavento) ;break;} case 1 : {search_number(numberGartley, ExtGartley886) ;break;} case 2 : {search_number(numberGartley, ExtGartley886) ;break;} case 3 : {search_number(numberGilmorQuality, ExtPesavento) ;break;} case 4 : {search_number(numberGilmorGeometric, ExtPesavento) ;break;} case 5 : {search_number(numberGilmorHarmonic, ExtPesavento) ;break;} case 6 : {search_number(numberGilmorArithmetic, ExtPesavento) ;break;} case 7 : {search_number(numberGilmorGoldenMean, ExtPesavento) ;break;} case 8 : {search_number(numberSquare, ExtPesavento) ;break;} case 9 : {search_number(numberCube, ExtPesavento) ;break;} case 10 : {search_number(numberRectangle, ExtPesavento) ;break;} case 11 : {search_number(numberExt, ExtPesavento) ;break;} } } else { search_number(numberFibo, ExtPesavento); } } //-------------------------------------------------------- // Определение значений и цвета чисел для паттернов Песавенто. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Поиск числа для паттернов Песавенто. Начало. //-------------------------------------------------------- void search_number(int arr[], color cPattern) { int ki; colorPPattern=ExtNotFibo; if (ExtFiboChoice!=2) { if (ExtDeltaType==2) for (ki=kiPRZ;ki<=63;ki++) { if (arr[ki]>0) { if (MathAbs((number[ki]-kj)/number[ki])<=ExtDelta) {kk=number[ki]; txtkk=numbertxt[ki]; k2=-1; colorPPattern=cPattern; break;} } } if (ExtDeltaType==1) for (ki=kiPRZ;ki<=63;ki++) { if (arr[ki]>0) { if (MathAbs(number[ki]-kj)<=ExtDelta) {kk=number[ki]; txtkk=numbertxt[ki]; k2=-1; colorPPattern=cPattern; break;} } } } else { if (ExtDeltaType==2) for (ki=kiPRZ;ki<=63;ki++) { if (arr[ki]>0) { if (MathAbs((number[ki]-kj)/number[ki])<=ExtDelta) {kk=number[ki]; txtkk=numbertxt[ki]; k2=-1; colorPPattern=cPattern; break;} } else if (numberMix[ki]>0) if (MathAbs((number[ki]-kj)/number[ki])<=ExtDelta) {kk=number[ki]; txtkk=numbertxt[ki]; k2=-1; colorPPattern=ExtPesavento; break;} } if (ExtDeltaType==1) for (ki=kiPRZ;ki<=63;ki++) { if (arr[ki]>0) { if (MathAbs(number[ki]-kj)<=ExtDelta) {kk=number[ki]; txtkk=numbertxt[ki]; k2=-1; colorPPattern=cPattern; break;} } else if (numberMix[ki]>0) if (MathAbs(number[ki]-kj)<=ExtDelta) {kk=number[ki]; txtkk=numbertxt[ki]; k2=-1; colorPPattern=ExtPesavento; break;} } } } //-------------------------------------------------------- // Поиск числа для паттернов Песавенто. Конец. //-------------------------------------------------------- //-------------------------------------------------------- // Отправка сообщения на электронную почту. Начало. //-------------------------------------------------------- void _SendMail(string subject, string some_text) { SendMail(subject, some_text); } //-------------------------------------------------------- // Отправка сообщения на электронную почту. Конец. //-------------------------------------------------------- //+------------------------------------------------------------------+ //| Перенос значений параметров из строки в числовой массив | //| типа double. Начало. | //+------------------------------------------------------------------+ void _stringtodoublearray (string str, double& arr[], string& arr1[], int& x, bool y) { int i=0,j=-1,k=0; j=StringFind(str, ",",0); for (x=0;j>=0;x++) { j=StringFind(str, ",",j+1); } if(x>0) { x++; ArrayResize(arr,x); ArrayResize(arr1,x); if (y) ArrayResize(fitxt100,x); } for (i=0;i=0;x++) { j=StringFind(str, ",",j+1); } if(x>0) {x++;ArrayResize(arr,x);} for (i=0;i