English 中文 Español Deutsch 日本語
preview
Разработка инструментария для анализа движения цен (Часть 15): Введение в теорию четвертей (I) — Скрипт Quarters Drawer

Разработка инструментария для анализа движения цен (Часть 15): Введение в теорию четвертей (I) — Скрипт Quarters Drawer

MetaTrader 5Примеры |
489 0
Christian Benjamin
Christian Benjamin

Содержание



Введение

На любом рынке цены движутся циклично. Независимо от того, растут или падают цены, они постоянно колеблются в определенных диапазонах. Со временем трейдеры разработали множество теорий, объясняющих эти закономерности. В нашей продолжающейся серии мы создаем комплексный инструментарий для анализа ценового движения. Сегодня мы представляем инновационный подход, который мы автоматизировали с помощью MQL5 для упрощения применения и достижения впечатляющих результатов.

В этой статье основное внимание уделено теории четвертей (Quarters Theory). Ее разработал Илиан Йотов (Ilian Yotov), имя которого знакомо тысячам валютных трейдеров и форекс-стратегов по его работе на телеканале Traders Television Network. Илиан основал AllThingsForex.com и TraderTape.com, а также ведет популярное ежедневное шоу All Things Forex. Его теория предполагает, что значительные ценовые движения происходят между двумя большими четвертными пунктами (Large Quarter Points) и продолжаются с шагом в 250 пунктов. Этот метод предлагает четкие маркеры для определения ключевых уровней поддержки и сопротивления, одновременно предоставляя трейдерам практическую информацию.

Эта статья — первая часть нашей теории четвертей. В ней мы сосредоточимся на создании четвертей с использованием нашего скрипта quarters drawer. Автоматизируя построение этих важнейших уровней, мы предлагаем практическую отправную точку для визуализации ключевых зон разворота и продолжения. По мере развития этой теории мы разработаем еще более надежные инструменты для поддержки генерации сигналов и расширенного анализа рынка.


Концепция

Теория четвертей делит крупный ценовой диапазон на более мелкие, более значимые сегменты. В этом контексте MajorStep (большой шаг), например, 0,1000 в валютных парах, таких как EURUSD, определяет разницу между основными целыми числами (например, от 1,2000 до 1,3000). Этот диапазон затем делится на четыре равные части, известные как большие четверти. Каждая большая четверть представляет собой критический уровень, на котором цена может остановиться, развернуться или ускориться, предлагая трейдерам потенциальные области поддержки и сопротивления.

Ключевые компоненты теории четвертей включают в себя:

  • Основные целые числа - основные уровни (например, 1,2000, 1,3000), которые определяют торговый диапазон. Они используются в качестве опорных точек для построения более тонкой структуры теории.
  • Большие линии четвертей - интервал между двумя основными уровнями делится поровну на четыре сегмента. Эти линии указывают на промежуточные уровни, которые часто играют важную роль в поведении цен. Трейдеры используют эти уровни для прогнозирования потенциальных точек разворота или областей консолидации.
  • Малые линии четвертей (опционально) - для большей точности каждый сегмент в 100 пунктов можно разделить на еще меньшие интервалы — небольшие четверти. Хотя эти линии обеспечивают дополнительную детализацию, основное внимание по-прежнему уделяется уровням крупных четвертей.
  • Зоны превышения/понижения - вокруг каждой большой четвертной линии нарисованы небольшие смещения (выше и ниже уровня), обозначающие сигнальные зоны, где цена может на мгновение превысить или не достичь ожидаемого уровня. Эти области помогают выявить потенциальные коррекции или развороты.

Для более подробной информации, пожалуйста, ознакомьтесь с графиками ниже.

Четверти

Рис 1. Четверти

Четверти

Рис 2. Четверти

Визуально отмечая эти ключевые уровни на графике, теория кварталов предоставляет трейдерам структурированный способ оценки динамики цен. Этот подход реализован в скрипте Quarters Drawer, который рисует отдельные линии с использованием различных стилей и цветов для повышения ясности, гарантируя, что каждая группа (основные, большие четвертные и малые четвертные линии) легко различима. Этот визуальный инструмент подкрепляет теорию, четко выделяя важнейшие ценовые сегменты.


Реализация в MQL5

Первый блок скрипта включает в себя заголовок-комментарий, который содержит важные сведения, такие как название скрипта, версию, информацию об авторских правах и ссылку на профиль автора. После этого объявления свойств встраивают важные метаданные (например, авторские права и версию) и обеспечивают соблюдение строгих настроек компиляции. Эта комбинация устанавливает идентичность скрипта и гарантирует его соответствие строгим стандартам кодирования.

//+------------------------------------------------------------------+
//|                                              Quarters Drawer.mql5|
//|                                Copyright 2025, Christian Benjamin|
//|                           https://www.mql5.com/en/users/lynnchris|
//+------------------------------------------------------------------+
#property copyright "Christian Benjamin"
#property link      "https://www.mql5.com/en/users/lynnchris"
#property version   "1.0"
#property strict

Затем определяются входные параметры, чтобы предоставить пользователям полный контроль над поведением и внешним видом скрипта. Здесь мы задаем интервал между основными уровнями цен с помощью такого параметра, как MajorStep, и задаем логические флаги для переключения отображения больших и малых четвертных линий, а также маркеров превышения/понижения. Например, если DrawLargeQuarters равен true, скрипт будет рисовать большие четвертные линии, но если установить его на false, они не будут отображаться.

То же самое относится к DrawSmallQuarters и DrawOvershootAreas. Если вы не хотите видеть маленькие четвертные линии или зоны превышения, просто переключите их в false. Это позволяет легко настраивать отображение данных без изменения базовой логики. Более того, для каждого типа линии предусмотрены настройки цвета и стиля/толщины линии, что позволяет трейдерам легко настраивать визуальный вывод в соответствии со своими личными предпочтениями и торговыми стратегиями.

//---- Input parameters -------------------------------------------------
input double MajorStep          = 0.1000;   // Difference between major whole numbers.
input bool   DrawLargeQuarters  = true;     // Draw intermediate large quarter lines.
input bool   DrawSmallQuarters  = true;     // Draw small quarter lines.
input bool   DrawOvershootAreas = true;     // Mark overshoot/undershoot areas for large quarter lines.

//---- Color settings ---------------------------------------------------
input color  MajorColor         = 0x2F4F4F; // Dark Slate Gray for major lines.
input color  LargeQuarterColor  = 0x8B0000; // Dark Red for large quarter lines.
input color  SmallQuarterColor  = 0x00008B; // Dark Blue for small quarter lines.
input color  OvershootColor     = clrRed;   // Red for overshoot/undershoot lines.

//---- Group style and thickness settings -------------------------------
input ENUM_LINE_STYLE MajorLineStyle       = STYLE_SOLID;
input int    MajorLineWidth                 = 4;
input ENUM_LINE_STYLE LargeQuarterLineStyle  = STYLE_DOT;
input int    LargeQuarterLineWidth          = 3;
input ENUM_LINE_STYLE OvershootLineStyle     = STYLE_DASH;
input int    OvershootLineWidth             = 1;
input ENUM_LINE_STYLE SmallQuarterLineStyle  = STYLE_SOLID;
input int    SmallQuarterLineWidth          = 1;

Шестнадцатеричные цветовые коды в скрипте представляют определенные цвета путем комбинирования значений красного, зеленого и синего. Например:

  • 0x2F4F4F соответствует цвету Dark Slate Gray () - темный шиферно-серый. Двузначные пары представляют красный, зеленый и синий компоненты соответственно. "2F" (47 в десятичной системе счисления) соответствует красному цвету, а "4F" (79 в десятичной системе счисления) - как зеленому, так и синему, что создает приглушенный, холодный серый тон, идеально подходящий для основных линий на графике.
  • 0x8B0000 – Dark Red (темно-красный). В этом значении "8B" (139 в десятичной системе счисления) — сильный красный компонент, тогда как зеленый и синий компоненты равны "00" (нулю), что дает глубокий, интенсивный красный цвет. Этот цвет используется в скрипте для выделения крупных четвертных линий.
  • 0x00008B – Dark Blue (темно-синий). В этом случае красный и зеленый компоненты равны "00", а синий компонент равен "8B" (139 в десятичной системе счисления), что дает глубокий синий цвет. Цвет применяется к небольшим четвертным линиям, обеспечивая четкий визуальный контраст.

Помимо этих жестко запрограммированных шестнадцатеричных значений, скрипт также использует предопределенную константу clrRed. Вместо того чтобы указывать шестнадцатеричный код вручную, вы можете просто использовать эту встроенную константу, которая обычно представляет красный цвет со значениями (255, 0, 0). Например, скрипт задает цвет превышения следующим образом:

input color OvershootColor = clrRed;

После ввода данных скрипт включает специальную функцию, которая отвечает за отрисовку горизонтальных линий на графике. Эта функция сначала проверяет, существует ли уже строка с указанным именем, и при необходимости удаляет ее, чтобы избежать дублей. Затем она создает новую горизонтальную линию на указанном уровне цены и применяет заданный цвет, стиль и ширину. Гарантируя, что каждая линия проходит по всему графику, эта модульная функция упрощает процесс последовательного отображения нескольких линий по всему скрипту.

//+------------------------------------------------------------------+
//| DrawHorizontalLine: Creates or replaces a horizontal line        |
//+------------------------------------------------------------------+
void DrawHorizontalLine(string name, double price, color lineColor, int width, ENUM_LINE_STYLE style)
{
   // Delete the object if it already exists
   if(ObjectFind(0, name) != -1)
      ObjectDelete(0, name);

   // Create a new horizontal line object
   if(!ObjectCreate(0, name, OBJ_HLINE, 0, 0, price))
   {
      Print("Failed to create line: ", name);
      return;
   }

   // Set properties: color, style, width, and extension to the right
   ObjectSetInteger(0, name, OBJPROP_COLOR, lineColor);
   ObjectSetInteger(0, name, OBJPROP_STYLE, style);
   ObjectSetInteger(0, name, OBJPROP_WIDTH, width);
   ObjectSetInteger(0, name, OBJPROP_RAY_RIGHT, true);
}

Основное исполнение скрипта начинается с функции OnStart, которая извлекает текущий символ и его цену bid. Этот шаг имеет решающее значение, поскольку все последующие расчеты зависят от действительной рыночной цены. Если цена bid недоступна, скрипт завершает работу преждевременно, чтобы предотвратить возникновение ошибок и гарантировать, что дальнейшие операции будут выполняться только с действительными данными.

void OnStart()
{
   // Get current symbol price
   string symbol = _Symbol;
   double currentPrice = SymbolInfoDouble(symbol, SYMBOL_BID);
   if(currentPrice == 0)
      return;

После получения текущей цены скрипт рассчитывает основные уровни цен, которые будут служить основными ориентирами. Он определяет нижний уровень путем округления текущей цены до ближайшего интервала, определенного MajorStep, а затем вычисляет верхний уровень, добавляя тот же шаг. Эти расчетные уровни создают структурированную основу, устанавливая четкие границы для остальной части визуальной сетки.

   // Calculate the major range based on the current price and MajorStep
   double lowerMajor = MathFloor(currentPrice / MajorStep) * MajorStep;
   double upperMajor = lowerMajor + MajorStep;

Используя эти основные ценовые уровни, скрипт затем рисует две выраженные горизонтальные линии на нижней и верхней границах. Эти основные линии обозначены определенными цветами, толщиной и паттернами, что позволяет легко идентифицировать их на графике. Они выступают в качестве основы визуальной структуры графика, помогая трейдерам быстро определять важные области поддержки и сопротивления.

   // Draw Major Whole Number lines at lower and upper boundaries
   DrawHorizontalLine("MajorLower", lowerMajor, MajorColor, MajorLineWidth, MajorLineStyle);
   DrawHorizontalLine("MajorUpper", upperMajor, MajorColor, MajorLineWidth, MajorLineStyle);

Если включена опция рисования больших четвертных линий, скрипт делит основной интервал на четыре равные части. Он рассчитывает промежуточные уровни между основными границами и рисует горизонтальные линии в этих точках. Кроме того, если также активированы маркеры превышения/понижения, дополнительные линии рисуются непосредственно над и под каждой большой четвертной линией. Эти дополнительные маркеры служат для выделения областей, в которых цена может временно выйти за пределы ожидаемого диапазона, предоставляя трейдерам ценную информацию о возможных разворотах цены.

   // Draw Large Quarter lines and overshoot/undershoot lines if enabled
   if(DrawLargeQuarters)
   {
      double LQIncrement = MajorStep / 4.0;
      for(int i = 1; i < 4; i++)
      {
         double level = lowerMajor + i * LQIncrement;
         string objName = "LargeQuarter_" + IntegerToString(i);
         DrawHorizontalLine(objName, level, LargeQuarterColor, LargeQuarterLineWidth, LargeQuarterLineStyle);

         if(DrawOvershootAreas)
         {
            double smallQuarter = MajorStep / 40.0;
            DrawHorizontalLine("Overshoot_" + IntegerToString(i) + "_up", level + smallQuarter, OvershootColor, OvershootLineWidth, OvershootLineStyle);
            DrawHorizontalLine("Undershoot_" + IntegerToString(i) + "_down", level - smallQuarter, OvershootColor, OvershootLineWidth, OvershootLineStyle);
         }
      }
   }

Для еще более точной детализации скрипт может также рисовать небольшие четвертные линии, если эта опция включена. Он делит основной интервал на десять сегментов, а затем делит каждый сегмент на более мелкие подсегменты. Это создает более детализированную сетку, которая улавливает едва заметные движения цен, предоставляя трейдерам детальное представление, которое может быть особенно полезным для определения точных точек входа и выхода.

   // Draw Small Quarter lines if enabled
   if(DrawSmallQuarters)
   {
      double segStep = MajorStep / 10.0;
      double smallQuarter = segStep / 4.0;
      for(int seg = 0; seg < 10; seg++)
      {
         double segStart = lowerMajor + seg * segStep;
         for(int j = 1; j < 4; j++)
         {
            double level = segStart + j * smallQuarter;
            string objName = "SmallQuarter_" + IntegerToString(seg) + "_" + IntegerToString(j);
            DrawHorizontalLine(objName, level, SmallQuarterColor, SmallQuarterLineWidth, SmallQuarterLineStyle);
         }
      }
   }

Также скрипт добавляет к графику постоянную метку, или логотип. В этой метке отображаются название скрипта, его версия и информация об авторе, что одновременно является и подтверждением авторства, и быстрой справкой для пользователей. Перед размещением метки скрипт проверяет наличие существующих экземпляров, чтобы избежать дубликатов, затем размещает метку в правом верхнем углу с тщательно подобранными размерами шрифта и цветовыми настройками для четкой видимости.

   // Create a persistent label (logo) in the top-right corner
   if(ObjectFind(0, "ScriptLogo") != -1)
      ObjectDelete(0, "ScriptLogo");
   if(ObjectCreate(0, "ScriptLogo", OBJ_LABEL, 0, 0, 0))
   {
      string logoText = "Script: DrawQuarters_DarkBold\nv1.04\nby Christian Benjamin";
      ObjectSetString(0, "ScriptLogo", OBJPROP_TEXT, logoText);
      ObjectSetInteger(0, "ScriptLogo", OBJPROP_COLOR, clrYellow);
      ObjectSetInteger(0, "ScriptLogo", OBJPROP_FONTSIZE, 14);
      ObjectSetInteger(0, "ScriptLogo", OBJPROP_CORNER, CORNER_RIGHT_UPPER);
      ObjectSetInteger(0, "ScriptLogo", OBJPROP_XDISTANCE, 80);
      ObjectSetInteger(0, "ScriptLogo", OBJPROP_YDISTANCE, 10);
   }

Наконец, скрипт обновляет график с помощью команды перерисовки, гарантируя, что все нарисованные объекты (линии и метки) будут немедленно видны. Этот последний шаг имеет решающее значение, поскольку он обновляет отображение с учетом последних рыночных данных и пользовательских настроек, предоставляя полный и актуальный визуальный инструмент для технического анализа.

   // Redraw the chart to display all objects
   ChartRedraw();
}


Код MQL5

//+------------------------------------------------------------------+
//|                                              Quarters Drawer.mql5|
//|                                Copyright 2025, Christian Benjamin|
//|                           https://www.mql5.com/en/users/lynnchris|
//+------------------------------------------------------------------+
#property copyright "Christian Benjamin"
#property link      "https://www.mql5.com/en/users/lynnchris"
#property version   "1.0"
#property strict

//---- Input parameters -------------------------------------------------
input double MajorStep          = 0.1000;   // Difference between major whole numbers.
input bool   DrawLargeQuarters  = true;     // Draw intermediate large quarter lines.
input bool   DrawSmallQuarters  = true;    // Draw small quarter lines.
input bool   DrawOvershootAreas = true;     // Mark overshoot/undershoot areas for large quarter lines.

//---- Color settings ---------------------------------------------------
input color  MajorColor         = 0x2F4F4F; // Dark Slate Gray for major lines.
input color  LargeQuarterColor  = 0x8B0000; // Dark Red for large quarter lines.
input color  SmallQuarterColor  = 0x00008B; // Dark Blue for small quarter lines.
input color  OvershootColor     = clrRed;   // Red for overshoot/undershoot lines.

//---- Group style and thickness settings -------------------------------
input ENUM_LINE_STYLE MajorLineStyle       = STYLE_SOLID;
input int    MajorLineWidth                 = 4;
input ENUM_LINE_STYLE LargeQuarterLineStyle  = STYLE_DOT;
input int    LargeQuarterLineWidth          = 3;
input ENUM_LINE_STYLE OvershootLineStyle     = STYLE_DASH;
input int    OvershootLineWidth             = 1;
// For small quarter lines, we now use a continuous (solid) style.
input ENUM_LINE_STYLE SmallQuarterLineStyle  = STYLE_SOLID;
input int    SmallQuarterLineWidth          = 1;

//+------------------------------------------------------------------+
//| DrawHorizontalLine: Creates or replaces a horizontal line        |
//+------------------------------------------------------------------+
void DrawHorizontalLine(string name, double price, color lineColor, int width, ENUM_LINE_STYLE style)
  {
   if(ObjectFind(0, name) != -1)
      ObjectDelete(0, name);

   if(!ObjectCreate(0, name, OBJ_HLINE, 0, 0, price))
     {
      Print("Failed to create line: ", name);
      return;
     }

   ObjectSetInteger(0, name, OBJPROP_COLOR, lineColor);
   ObjectSetInteger(0, name, OBJPROP_STYLE, style);
   ObjectSetInteger(0, name, OBJPROP_WIDTH, width);
   ObjectSetInteger(0, name, OBJPROP_RAY_RIGHT, true);
  }

//+------------------------------------------------------------------+
//| Script entry point                                               |
//+------------------------------------------------------------------+
void OnStart()
  {
// Get current symbol price
   string symbol = _Symbol;
   double currentPrice = SymbolInfoDouble(symbol, SYMBOL_BID);
   if(currentPrice == 0)
      return;

// Calculate the major range
   double lowerMajor = MathFloor(currentPrice / MajorStep) * MajorStep;
   double upperMajor = lowerMajor + MajorStep;

// Draw Major Whole Number lines
   DrawHorizontalLine("MajorLower", lowerMajor, MajorColor, MajorLineWidth, MajorLineStyle);
   DrawHorizontalLine("MajorUpper", upperMajor, MajorColor, MajorLineWidth, MajorLineStyle);

// Draw Large Quarter lines and their overshoot/undershoot lines
   if(DrawLargeQuarters)
     {
      double LQIncrement = MajorStep / 4.0;
      for(int i = 1; i < 4; i++)
        {
         double level = lowerMajor + i * LQIncrement;
         string objName = "LargeQuarter_" + IntegerToString(i);
         DrawHorizontalLine(objName, level, LargeQuarterColor, LargeQuarterLineWidth, LargeQuarterLineStyle);

         if(DrawOvershootAreas)
           {
            double smallQuarter = MajorStep / 40.0;
            DrawHorizontalLine("Overshoot_" + IntegerToString(i) + "_up", level + smallQuarter, OvershootColor, OvershootLineWidth, OvershootLineStyle);
            DrawHorizontalLine("Undershoot_" + IntegerToString(i) + "_down", level - smallQuarter, OvershootColor, OvershootLineWidth, OvershootLineStyle);
           }
        }
     }

// Draw Small Quarter lines if enabled (continuous lines, without overshoot/undershoot)
   if(DrawSmallQuarters)
     {
      double segStep = MajorStep / 10.0;
      double smallQuarter = segStep / 4.0;
      for(int seg = 0; seg < 10; seg++)
        {
         double segStart = lowerMajor + seg * segStep;
         for(int j = 1; j < 4; j++)
           {
            double level = segStart + j * smallQuarter;
            string objName = "SmallQuarter_" + IntegerToString(seg) + "_" + IntegerToString(j);
            DrawHorizontalLine(objName, level, SmallQuarterColor, SmallQuarterLineWidth, SmallQuarterLineStyle);
           }
        }
     }

// Create a persistent label (logo) in the top-right corner
   if(ObjectFind(0, "ScriptLogo") != -1)
      ObjectDelete(0, "ScriptLogo");
   if(ObjectCreate(0, "ScriptLogo", OBJ_LABEL, 0, 0, 0))
     {
      string logoText = "Script: DrawQuarters_DarkBold\nv1.04\nby Christian Benjamin";
      ObjectSetString(0, "ScriptLogo", OBJPROP_TEXT, logoText);
      ObjectSetInteger(0, "ScriptLogo", OBJPROP_COLOR, clrYellow);
      ObjectSetInteger(0, "ScriptLogo", OBJPROP_FONTSIZE, 14);
      ObjectSetInteger(0, "ScriptLogo", OBJPROP_CORNER, CORNER_RIGHT_UPPER);
      ObjectSetInteger(0, "ScriptLogo", OBJPROP_XDISTANCE, 80);
      ObjectSetInteger(0, "ScriptLogo", OBJPROP_YDISTANCE, 10);
     }

   ChartRedraw();
  }
//+------------------------------------------------------------------+



Результаты

Прежде чем изучать результаты, рассмотрим, как создать и скомпилировать скрипт. Откройте MetaEditor и выберите "Создать", а затем "Скрипт". Введите имя скрипта и начните писать код. Скомпилируйте скрипт. При появлении ошибок исправьте их, пока компиляция не завершится успешно. После компиляции протестируйте свой скрипт на графике. Поскольку это не советник, вы можете запустить его на реальном графике как в демонстрационном, так и в реальном режиме, не опасаясь за баланс вашего счета.

В этом разделе я привел несколько графиков для наглядного понимания. Я проведу вас по каждому графику шаг за шагом. На первом графике показан тест пары AUDUSD. В этом тесте я включил DrawLargeQuarters вместе с областями превышения и понижения. DrawSmallQuarters равен false.

//---- Input parameters -------------------------------------------------
input double MajorStep          = 0.1000;   // Difference between major whole numbers.
input bool   DrawLargeQuarters  = true;     // Draw intermediate large quarter lines.
input bool   DrawSmallQuarters  = false;    // Draw small quarter lines.
input bool   DrawOvershootAreas = true;     // Mark overshoot/undershoot areas for large quarter lines.

Давайте рассмотрим рисунок 2 ниже. Здесь показано, как я добавил скрипт и какие результаты получил. Мы видим, как цена взаимодействует с четвертями, их превышения и понижения.

Quartile Drawer

Рис 2. Четверти AUDUSD

Ниже представлен скриншот, сделанный на той же паре. Я выделил на графике влияние четвертей. Результаты очевидны: рынок находит поддержку и сопротивление на наших крупных четвертных уровнях. Я установил линии превышения и параметры меньшего квартиля на false для четкой визуализации больших четвертей.

//---- Input parameters -------------------------------------------------
input double MajorStep          = 0.1000;   // Difference between major whole numbers.
input bool   DrawLargeQuarters  = true;     // Draw intermediate large quarter lines.
input bool   DrawSmallQuarters  = false;    // Draw small quarter lines.
input bool   DrawOvershootAreas = false;     // Mark overshoot/undershoot areas for large quarter lines.

Большие четверти

Рис. 3. Большие четверти

Я увеличил масштаб еще больше, чтобы вы могли четко увидеть, как цена взаимодействует с большой четвертной линией, включая ее превышения и понижения.

Квартильные превышения и понижения

Рис 4. Превышения и понижения

Наконец, давайте рассмотрим эффективность скрипта на EURUSD. Ключевые уровни, за которыми охотится каждый валютный трейдер, четко обозначены четвертными уровнями.

EURUSD

Рис. 5. Четверти EURUSD

Больше информации можно найти в книге The_Quarters_Theory_-_Ilian_Yotov



Заключение

Я уверен, что вы все видите работу этого скрипта. Он рисует четверти и производит расчеты, которые вручную заняли бы много времени. Примечательным аспектом является то, как линии квартилей служат уровнями поддержки и разворота. Большие квартили, основные нижний и верхний уровни, выступают в качестве значимого сопротивления и поддержки, в то время как меньшие квартили служат в качестве второстепенных уровней. Этот первоначальный подход является хорошей отправной точкой для автоматизированного анализа. Мы с нетерпением ждем разработки новых инструментов по мере более глубокого погружения в эту теорию. Если у вас есть какие-либо предложения или рекомендации, пожалуйста, поделитесь ими.

ДатаНазвание инструмента ОписаниеВерсия Обновления Примечания
01/10/24Chart ProjectorСкрипт для наложения эффекта призрака на движение цены за предыдущий день.1.0Первоначальная версияИнструмент номер 1
18/11/24Analytical CommentПредоставляет информацию за предыдущий день в табличном формате, а также прогнозирует будущее направление рынка.1.0Первоначальная версияИнструмент номер 2
27/11/24Analytics MasterРегулярное обновление рыночных показателей каждые два часа 1.01Вторая версияИнструмент номер 3
02/12/24Analytics Forecaster Регулярное обновление рыночных показателей каждые два часа с интеграцией с Telegram1.1Третья версияИнструмент номер 4
09/12/24Volatility NavigatorСоветник анализирует рыночные условия с помощью полос Боллинджера, RSI и ATR.1.0Первоначальная версияИнструмент номер 5
19/12/24Mean Reversion Signal Reaper Анализирует рынок и генерирует сигналы, используя стратегию возврата к среднему 1.0 Первоначальная версия Инструмент номер 6 
9/01/25 Signal Pulse Анализирует несколько таймфреймов1.0 Первоначальная версия Инструмент номер 7 
17/01/25 Metrics Board Панель с кнопками для анализа 1.0 Первоначальная версияИнструмент номер 8 
21/01/25External FlowАналитика с помощью внешних библиотек1.0 Первоначальная версияИнструмент номер 9 
27/01/25VWAPВзвешенная по объему средняя цена  1.3 Первоначальная версия Инструмент номер 10 
02/02/25 Heikin Ashi Сглаживание тренда и идентификация сигналов разворота 1.0 Первоначальная версия Инструмент номер 11
04/02/25 FibVWAP Генерация сигнала с помощью анализа Python 1.0 Первоначальная версия Инструмент номер 12
14/02/25 RSI DIVERGENCE Дивергенция цены и RSI 1.0 Первоначальная версия Инструмент номер 13 
17/02/25 Parabolic Stop and Reverse (PSAR) Автоматизация стратегии PSAR1.0Первоначальная версия Инструмент номер 14
20/02/25 Скрипт Quarters Drawer Нанесение уровней четвертей на график 1.0 Первоначальная версия Инструмент номер 15 

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/17250

Прикрепленные файлы |
Разложение по динамическим модам в применении к одномерным временным рядам в языке MQL5 Разложение по динамическим модам в применении к одномерным временным рядам в языке MQL5
Разложение по динамическим модам (Dynamic mode decomposition, DMD) — метод, который обычно применяют к наборам многомерных данных. В этой статье мы демонстрируем применение DMD на одномерных временных рядах, выявляя его способность характеризовать ряды, а также делать прогнозы. При этом рассмотрим встроенную в MQL5 реализацию разложения по динамическим модам, уделяя особое внимание новому матричному методу DynamicModeDecomposition().
Обучаем нейросети на осцилляторах без подглядывания в будущее Обучаем нейросети на осцилляторах без подглядывания в будущее
В статье описывается подход к разметке сделок с помощью осцилляторов для моделей машинного обучения. Это позволяет избавиться от look ahead bias. Показано, что такая разметка не приводит к переобучению моделей, а стратегии продолжают работать продолжительное время.
Python + API LLM + MetaTrader 5: реальный опыт построения автономного торгового бота Python + API LLM + MetaTrader 5: реальный опыт построения автономного торгового бота
Статья описывает создание MVP-прототипа автономного торгового бота для MetaTrader 5, использующего большие языковые модели (LLM) через API OpenRouter для анализа рынка и принятия торговых решений. Скрипт на Python получает исторические данные OHLCV, отправляет их в LLM для технического анализа на основе уровней поддержки/сопротивления и паттернов Price Action, после чего автоматически размещает ордера с заданными стоп-лоссом и тейк-профитом.
Нейросети в трейдинге: Спайковая архитектура пространственно-временного анализа рынка (Окончание) Нейросети в трейдинге: Спайковая архитектура пространственно-временного анализа рынка (Окончание)
Фреймворк SDformerFlow превращает сложные события финансовых рядов в структурированные представления, позволяя модели видеть одновременно локальные колебания и глобальные тенденции. Многоуровневая U-структура обеспечивает согласованность прямого и обратного проходов, синхронизацию градиентов и устойчивость вычислений. В итоге SDformerFlow проявляет себя как мощный и гибкий инструмент для построения современных торговых систем.