Single Arrow MTF
- Индикаторы
-
Ahmed Hamed Hamed Eadwan
RUSSIAN TRANSLATION — РУССКИЙ
================================
TITLE:
MQL5 Разработчик и Трейдер | Основатель R protocols
ABOUT:
Здравствуйте, я Ахмед — трейдер и разработчик MQL5 из
Объединенных Арабских Эмиратов, основатель R protocols. - Версия: 1.0
- Активации: 5
Один файл. Одна стрелка. Одно решение.
SingleArrow MTF — профессиональный самодостаточный индикатор сигналов дивергенции для MetaTrader 5. Он объединяет собственный движок ZigZag линейного времени, фильтр дивергенции Williams %R с разделением волн, дополнительный слой защиты пивотов, панель согласования нескольких таймфреймов и автоматические поддержка/сопротивление — всё скомпилировано в один файл без внешних индикаторов, библиотек и DLL.
Для кого
- Дискреционные трейдеры, которым нужны чистые дивергенционные стрелки по правилам вместо сырых осцилляторов.
- Разработчики EA, которым нужен машиночитаемый, прозрачный по перерисовке источник сигналов (буферы + канал GlobalVariable).
- Бектестеры и стратеги, которым нужен подтверждённый, стабильный к истории поток сигналов (режим Confirm).
Архитектура в одной картине
- Слой структуры: внутренний движок ZigZag извлекает пивоты из цены.
- Слой анализа: фильтр дивергенции Williams %R проверяет каждую пару пивотов с разделением волн.
- Слой представления: стрелки, панель MTF, уровни S/R, оповещения и счётчики прозрачности.
1) Внутренний движок ZigZag (почему не платформенный?)
- Линейное время O(n): вся загруженная история обрабатывается за один проход; каждый новый тик стоит O(1) работы, поэтому индикатор остаётся лёгким на быстрых тиках и глубокой истории.
- Классическая тройка, современное ядро: Deviation / Depth / Backstep сохраняют привычный смысл, а внутренний учёт пивотов (ограниченное подавление Backstep, безопасная вставка пивота в начало) реализован с нуля и укреплён против краевых случаев.
- Без iCustom и недостающих буферов: движок встроен, поэтому конвейер сигнала никогда не зависит от наличия другого индикатора на графике или в папке терминала. Скомпилированный EX5 работает везде, включая аренды Market.
- Детерминированность: одинаковые параметры дают одинаковые пивоты на любом графике, символе и сборке терминала.
2) Дивергенция Williams %R с разделением волн
Само по себе пересечение осциллятором уровня здесь не сигнал. Индикатор сравнивает ценовые волны (движения от пивота к пивоту) с волнами осциллятора на том же отрезке:
- Медвежья дивергенция: цена даёт более высокий максимум, а волна Williams %R — более низкий максимум → стрелка продажи на подтверждённом максимуме.
- Бычья дивергенция: цена даёт более низкий минимум, а волна Williams %R — более высокий минимум → стрелка покупки на подтверждённом минимуме.
- Разделение волн: колебания внутри волны исключены из сравнения, поэтому шумовой всплеск в середине волны не может подделать или скрыть дивергенцию — и две последовательные однонаправленные точки никогда не сравниваются: классический источник ложных сигналов в дешёвых связках ZigZag/дивергенция.
- Стрелку даёт только пивот, прошедший структурные правила ZigZag и тест дивергенции WPR. Каждая стрелка — полное решение, а не сырая подсказка.
3) Режимы сигналов: Confirm и Live (прочтите внимательно)
Confirm (по умолчанию, InpConfirmBars > 0) — стабильный к истории поток. Индикатор ждёт N баров (InpConfirmBars) перед печатью стрелки: кандидат-дивергенция остаётся в ожидании, пока вызвавший её пивот не подтвердится последующим ценовым движением. После фиксации стрелка заморожена: никогда не движется, не исчезает и не меняет направление*. InpConfirmBars = 0 переключает в режим Live.
Live — максимально раннее чтение. Стрелка показана внутри формирующегося бара. По замыслу она может смещаться или исчезать, пока бар не завершён; встроенные счётчики прозрачности сообщают о каждом таком событии (раздел 7).
*Матрица гарантии отсутствия перерисовки (режим Confirm):
- Deviation/Depth/Backstep = Manual → гарантировано без условий.
- ATR-адаптивные Depth/Backstep + включённая фиксация пивотов → гарантировано.
- ATR-адаптивные Depth/Backstep + выключенная фиксация → индикатор сам включает фиксацию и сообщает об этом — именно для сохранения гарантии.
Это условие честно указано в метаданных продукта и обеспечивается валидацией входов при старте.
4) Фиксация пивотов
Подтверждённые пивоты заморожены во внутреннем реестре; последующие пересчёты, всплески волатильности и правки параметров не могут их сместить. Это механизм, делающий возможной гарантию адаптивного режима; рекомендуется всегда при работе в Live.
5) ATR-адаптивные параметры ZigZag
Волатильность меняется между сессиями и символами. Вместо ручной перенастройки Deviation/Depth/Backstep адаптивный режим масштабирует их по текущему ATR в настраиваемых границах (например, DepthMax ограничивает адаптивный Depth). Структура остаётся осмысленной на золоте, криптовалютах, индексах и FX без ручной опеки каждого символа.
6) Мульти-таймфреймовая панель
Тот же движок работает в фоне на до 23 дополнительных таймфреймах (по умолчанию M5/M15/H1/H4/D1, полностью настраивается через InpMTFTimeframes, окно анализа — InpMTFLookback). Панель на графике показывает живой/подтверждённый сигнал, состояние дивергенции и статус пивота по каждому таймфрейму — чтобы вы торговали только при согласии вашего таймфрейма с общей картиной: например, брать бычьи стрелки M15, когда H1/H4 показывают бычий контекст.
7) Инструменты прозрачности (для разработчиков EA)
- SA_RepaintBars (буфер 5): бегущий счётчик событий перерисовки в Live — по замыслу 0 в Confirm.
- SA_PostCommitBars (буфер 6): бегущий счётчик постратификационных корректировок — он аудирует сам режим Confirm.
- Это живые монотонные счётчики, а не исторические ряды: осмысленно только текущее значение (последние 2–3 бара). Читайте бар 0 или зеркальные Global Variables SA_REP_ / SA_POST_ + символ + таймфрейм; никогда не сканируйте историю.
- SA_PivotState (буфер 3) дополнительно сообщает, подтверждён ли пивот на этом баре (1) или ещё формируется (0).
8) Автоматические поддержка/сопротивление
Индикатор кластеризует пивоты (с таймфрейма графика или со всех наблюдаемых таймфреймов через InpSRUseAllTF) в ранжированные уровни поддержки/сопротивления с метками числа касаний; отрисовка — горизонтальные линии, лучи или затенённые зоны (InpSRMode 0/1/2). Уровни дают мгновенный контекст: бычья стрелка у ранжированной поддержки информативнее стрелки «в пустоте».
9) Оповещения
Необязательные оповещения срабатывают на новых подтверждённых сигналах через платформенные alert/push/mail. Тексты оповещений — только английские, в соответствии с правилами Market.
10) Полный справочник настроек (по группам)
- Движок сигнала: InpConfirmBars (0 = Live, N = Confirm), InpLiveMargin, InpLockPivots + InpLockAfterBars, InpShowDiag.
- ZigZag: InpDepth / InpBackstep / InpDeviation; Manual против ATR-адаптива по каждому параметру через InpDevMode / InpDepthMode / InpBackstepMode, плюс InpATRPeriod, InpATRMult, InpDepthATRMult, InpDepthMin/InpDepthMax, InpBackstepATRMult, InpBackstepMin/InpBackstepMax.
- Дивергенция: InpWPRPeriod, InpUseDivergence, InpLookback — валидируется против внутреннего минимума движка; недопустимые значения отклоняются при старте с понятным английским сообщением.
- Панель MTF: InpMTFEnabled, InpMTFTimeframes (например, "M5,M15,H1,H4,D1", до 23), InpMTFLookback, InpDashEnabled, InpDashCorner, InpDashX/Y, InpDashFontSize.
- S/R: InpSREnabled, InpSRLevelsCount, InpSRTolPts, InpSRMinTouches, InpSRSupportClr/InpSRResistClr, InpSRShowLabel, InpSRMode (0=HLine, 1=Ray, 2=Zone), InpSRUseAllTF.
11) Установка и первый запуск
- Установите из вкладки Market в терминале (аренды и пожизненные лицензии ведёт MetaTrader 5).
- Прикрепите к любому графику и таймфрейму.
- Начните с умолчаний в Confirm, посмотрите панель, затем настройте тройку ZigZag или включите ATR-адаптив.
12) Практические сценарии
- Интрадей: стрелки M15, отфильтрованные согласием панели H1; входы в Confirm на откатах к спроецированным S/R.
- Свинг: пивоты H4 как контекст, стрелки H1 как триггеры.
- EA: читайте буферы сигналов на баре 1 для зафиксированных стрелок; активность Live отслеживайте счётчиками прозрачности на баре 0.
13) Производительность и требования
- MetaTrader 5, любой символ, любой таймфрейм. Без DLL, внешних файлов и лишних индикаторов.
- Линейное ядро с инкрементальной обработкой тиков — рассчитано на быстрый поток тиков без подвисаний графика.
- Чистая деинициализация: объекты графика удаляются при откреплении/смене таймфрейма.
14) Чем этот продукт не является
Он не открывает сделки, не управляет деньгами и не гарантирует прибыль. Дивергенция — вероятностное, контекстное чтение. В Live перерисовка предусмотрена и всегда отражается счётчиками.
15) История изменений
- v1.03: единая валидация Lookback с внутренним минимумом движка (убраны тихие случаи без сигналов); укреплена вставка пивота в начало; укреплено перестроение S/R.
- v1.01: первый публичный релиз в Market.
16) FAQ
- Перерисовывает ли? В Confirm при условиях гарантии (раздел 3) — нет. В Live изменения предусмотрены и прозрачно считаются.
- Работает ли на любом символе? Да; ATR-адаптив построен именно для осмысленной структуры на разных символах.
- Может ли мой EA использовать его? Да — буферы сигналов, канал GlobalVariable и счётчики перерисовки делают его дружелюбным к EA.
- Почему одна стрелка вместо множества подсказок? Каждая стрелка прошла проверку структуры и дивергенции; меньше, но качественнее — по замыслу.
- Нужен ли платформенный ZigZag на графике? Нет. Движок встроен.
17) Интеграция iCustom и связка с EA (буферы, код, Global Variables)
SingleArrow MTF публикует 7 буферов, читаемых любым EA через iCustom() + CopyBuffer() — MetaTrader загружает индикатор автоматически при первом вызове iCustom; ручное прикрепление не нужно.
// BUFFER MAP (index -> content) // 0 SA_Buy BUY arrow price (0.0 = none) // 1 SA_Sell SELL arrow price (0.0 = none) // 2 SA_Signal +1 buy / -1 sell / 0 none // 3 SA_PivotState 1 = confirmed pivot, 0 = still forming // 4 SA_WPR Williams %R value // 5 SA_RepaintBars live-repaint counter (0 by design in Confirm) // 6 SA_PostCommitBars post-commit counter (audits Confirm mode) int h = iCustom(_Symbol, PERIOD_CURRENT, "SingleArrow_MTF", 34, // InpDepth 8, // InpBackstep 13, // InpDeviation 14, // InpWPRPeriod 5000, // InpLookback false, // InpUseDivergence 1); // InpConfirmBars (0 = Live, 1+ = Confirm) double sig[]; ArraySetAsSeries(sig, true); CopyBuffer(h, 2, 0, 3, sig); // buffer 2 = SA_Signal if(sig[1] == 1) { /* confirmed buy on last closed bar */ } if(sig[1] == -1) { /* confirmed sell on last closed bar */ } // Repaint counters via Global Variables (no CopyBuffer needed): double rep = GlobalVariableGet("SA_REP_" + _Symbol + "_" + IntegerToString((int)PERIOD_CURRENT)); double post = GlobalVariableGet("SA_POST_" + _Symbol + "_" + IntegerToString((int)PERIOD_CURRENT));
// FULL iCustom SIGNATURE (positional order - every declared input) iCustom(symbol, timeframe, "SingleArrow_MTF", 34, // InpDepth int default 34 8, // InpBackstep int default 8 13, // InpDeviation int default 13 14, // InpWPRPeriod int default 14 5000, // InpLookback int default 5000 false, // InpUseDivergence bool default false 1, // InpConfirmBars int default 1 (0 = Live) 12, // InpLiveMargin int default 12 true, // InpShowDiag bool default true 0, // InpDevMode enum 0=Manual 1=ATR-Adaptive 14, // InpATRPeriod int default 14 0.15, // InpATRMult double default 0.15 0, // InpDepthMode enum 0=Manual 1=ATR-Adaptive 1.0, // InpDepthATRMult double default 1.0 15, // InpDepthMin int default 15 80, // InpDepthMax int default 80 0, // InpBackstepMode enum 0=Manual 1=ATR-Adaptive 1.0, // InpBackstepATRMult double default 1.0 3, // InpBackstepMin int default 3 30, // InpBackstepMax int default 30 false, // InpLockPivots bool default false 3, // InpLockAfterBars int default 3 true, // InpMTFEnabled bool default true "M5,M15,H1,H4,D1", // InpMTFTimeframes string 1200, // InpMTFLookback int default 1200 true, // InpSREnabled bool default true 5, // InpSRLevelsCount int default 5 15, // InpSRTolPts int default 15 2, // InpSRMinTouches int default 2 clrDodgerBlue, // InpSRSupportClr clrOrangeRed, // InpSRResistClr true, // InpSRShowLabel bool default true 0, // InpSRMode int 0=HLine 1=Ray 2=Zone false, // InpSRUseAllTF bool default false true, // InpDashEnabled bool default true CORNER_LEFT_UPPER, // InpDashCorner 10, // InpDashX int default 10 30, // InpDashY int default 30 7); // InpDashFontSize int default 7
- Жизненный цикл хендла: создавайте хендл один раз в OnInit и освобождайте IndicatorRelease() в OnDeinit; никаких iCustom на тик.
- Зафиксированный поток на баре 1: читайте SA_Signal / SA_Buy / SA_Sell на последнем закрытом баре — стабильный, согласованный с бэктестом поток; SA_PivotState отделяет подтверждённые пивоты (1) от формирующегося кончика (0).
- Счётчики — живые монотонные значения: буферы 5/6 (и Global Variables SA_REP_/SA_POST_) осмысленны только на последних 2–3 барах — читайте бар 0, никогда не сканируйте историю.
- Совет по производительности для EA: передайте InpDashEnabled=false и InpSREnabled=false, чтобы пропустить всю отрисовку объектов и оставить хендл чисто вычислительным.
- Две копии на одном символе+таймфрейме делят один канал Global Variables; это затрагивает только удобное чтение, никогда — расчёт сигналов.
