preview
Методы Уильяма Ганна (часть II): Создаем индикатор квадрата Ганна

Методы Уильяма Ганна (часть II): Создаем индикатор квадрата Ганна

MetaTrader 5Примеры | 20 августа 2024, 08:28
125 0
Yevgeniy Koshtenko
Yevgeniy Koshtenko

Введение

Уильям Делберт Ганн, легендарный трейдер и технический аналитик начала XX века, оставил после себя богатое наследие инструментов и методов анализа рынка. Среди его многочисленных разработок особое место занимает Квадрат 9 — загадочный и многогранный инструмент, сочетающий в себе элементы геометрии, нумерологии и астрологии.

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

В этой статье мы погрузимся в мир Квадрата 9 Ганна и попытаемся перенести его концепцию в цифровую эпоху, создав индикатор для платформы MetaTrader 5 с использованием языка программирования MQL5. Наша цель — разработать инструмент, который позволит трейдерам визуализировать и применять принципы Квадрата 9 в своей торговле, сочетая традиционную мудрость Ганна с современными технологиями.

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

Давайте отправимся в это увлекательное путешествие по следам Уильяма Ганна и создадим мост между его гениальными идеями и современным миром алгоритмической торговли.


Теоретическая основа Квадрата 9 Ганна


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

Построение Квадрата 9 начинается с центральной ячейки, которой присваивается число 1. Затем числа располагаются по спирали против часовой стрелки, заполняя квадрат до 81 (9x9). Каждое девятое число в этой последовательности образует "кардинальный крест" — ключевые точки, которые Ганн считал особенно важными для анализа рынка.

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

Ганн также связывал Квадрат 9 с астрологическими концепциями, утверждая, что углы между числами в квадрате соответствуют определенным планетарным аспектам. Это добавляет временное измерение к анализу, позволяя прогнозировать не только ценовые уровни, но и потенциальные даты значимых рыночных событий.

Важно отметить, что интерпретация Квадрата 9 часто субъективна и требует опыта. Трейдеры используют этот инструмент по-разному: некоторые фокусируются на ценовых уровнях, другие — на временных циклах, третьи комбинируют оба подхода.

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

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


Математический аппарат Квадрата 9 Ганна

Квадрат 9 Ганна, несмотря на свои эзотерические корни, имеет четкую математическую структуру. Понимание этой структуры критически важно для создания точного и эффективного индикатора. Рассмотрим основные математические принципы, лежащие в основе Квадрата 9:

  • Построение квадрата — квадрат 9 представляет собой спиралевидную последовательность чисел от 1 до 81, расположенную в матрице 9x9. Математически это можно представить как функцию от координат (x, y) в квадрате.
  • Спиральная последовательность — числа располагаются по спирали против часовой стрелки. Это можно описать параметрическими уравнениями спирали в дискретной форме.
  • Угловые отношения — Ганн придавал особое значение угловым отношениям между числами. Эти отношения можно выразить через тригонометрические функции, учитывая положение чисел в квадрате.
  • Ценовые проекции — для преобразования чисел квадрата в ценовые уровни используются различные математические трансформации, часто включающие логарифмические или квадратные корни.
  • Временные циклы — временной аспект Квадрата 9 можно выразить через модульную арифметику, где каждый полный оборот спирали соответствует определенному циклу.
  • Кардинальный крест — числа, образующие кардинальный крест (каждое девятое число), можно выразить как арифметическую прогрессию с шагом 9.
  • Гармонические отношения — гармонические отношения между числами в квадрате можно описать через простые числовые отношения или углы в градусах.
  • Квадратный корень из цены — Ганн часто использовал квадратный корень из цены для своих расчетов, что добавляет еще один уровень математических преобразований.
  • Модульная арифметика — многие расчеты в Квадрате 9 основаны на принципах модульной арифметики, особенно с модулем 9.

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

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


Подготовка к созданию индикатора

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

Важно спланировать, как мы будем хранить данные. Понадобится массив для чисел Квадрата 9, а также списки для хранения рассчитанных цен и дат.

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

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

Эта подготовка заложит прочную основу для создания эффективного и удобного индикатора Квадрата 9 Ганна.

Структура кода индикатора Квадрата 9 Ганна

При разработке индикатора Квадрата 9 Ганна для MetaTrader 5 важно создать четкую и логичную структуру кода. Это облегчит понимание, отладку и дальнейшее усовершенствование индикатора. Рассмотрим основные компоненты, которые должны быть включены в наш код.

Во-первых, необходимо объявить и инициализировать переменные. Определим глобальные переменные для хранения настроек индикатора и создадим массивы для хранения данных Квадрата 9 и рассчитанных значений.

  • Функция OnInit() будет использоваться для инициализации параметров индикатора и создания необходимых графических объектов.
  • Функция OnDeinit() будет очищать все созданные графические объекты при удалении индикатора.
  • Функция OnCalculate() является основной функцией индикатора, вызываемой при каждом тике. Здесь будут выполняться основные расчеты и обновляться отображение.

Реализация ключевых компонентов индикатора

Просмотрим "болванку" кода квадрата 9:

//+------------------------------------------------------------------+
//|                                                      GannSquare9 |
//|                                          Copyright 2024, Shtenco |
//|                          https://www.mql5.com/ru/users/koshtenko |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, Evgeniy Koshtenko"
#property link      "https://www.mql5.com/ru/users/koshtenko"
#property version   "1.00"
#property description "Gann Square of 9 Price and Time Levels Indicator"
#property indicator_chart_window

// Input parameters
input double StartNumber = 1;  // Starting number for the Gann Square
input color PriceLevelColor = clrDodgerBlue;  // Color of the price levels
input color TimeLevelColor = clrRed;  // Color of the time levels
input int LevelsToShow = 50;  // Number of levels to display
input datetime EndDate = D'2024.08.14 00:00';  // End date for calculations
input double PriceStepDivisor = 10.0;  // Divisor for price step (higher value = more levels)

// Global variables
double price_levels[];
datetime time_levels[];
double price_scale;
int time_scale;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
// Validate inputs
   if(StartNumber <= 0 || LevelsToShow <= 0 || EndDate <= 0 || PriceStepDivisor <= 0)
     {
      Print("Invalid input parameters");
      return INIT_PARAMETERS_INCORRECT;
     }

// Calculate scales
   CalculateScales();

// Calculate and draw levels
   CalculateLevels();
   DrawLevels();

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
// No calculations needed for this indicator
   return(rates_total);
  }

//+------------------------------------------------------------------+
//| Calculate price and time scales                                  |
//+------------------------------------------------------------------+
void CalculateScales()
  {
   double current_price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
   price_scale = current_price / (StartNumber * StartNumber);

   datetime current_time = TimeCurrent();
   time_scale = (int)MathMax(1, (EndDate - current_time) / (86400 * StartNumber * StartNumber));  // in days
  }

//+------------------------------------------------------------------+
//| Calculate price and time levels                                  |
//+------------------------------------------------------------------+
void CalculateLevels()
  {
   ArrayResize(price_levels, LevelsToShow);
   ArrayResize(time_levels, LevelsToShow);

   for(int i = 0; i < LevelsToShow; i++)
     {
      double price_square = MathPow(StartNumber + i / PriceStepDivisor, 2);
      int time_square = (StartNumber + i) * (StartNumber + i);

      price_levels[i] = price_scale * price_square;
      time_levels[i] = EndDate - time_scale * time_square * 86400;  // Convert days to seconds
     }
  }

//+------------------------------------------------------------------+
//| Draw levels on the chart                                         |
//+------------------------------------------------------------------+
void DrawLevels()
  {
   for(int i = 0; i < LevelsToShow; i++)
     {
      // Draw price level
      string price_name = "GannPriceLevel_" + IntegerToString(i);
      ObjectCreate(0, price_name, OBJ_HLINE, 0, 0, price_levels[i]);
      ObjectSetInteger(0, price_name, OBJPROP_COLOR, PriceLevelColor);
      ObjectSetInteger(0, price_name, OBJPROP_STYLE, STYLE_SOLID);
      ObjectSetInteger(0, price_name, OBJPROP_WIDTH, 1);
      ObjectSetString(0, price_name, OBJPROP_TOOLTIP, "Gann Price Level " + DoubleToString(price_levels[i], _Digits));

      // Draw time level
      string time_name = "GannTimeLevel_" + IntegerToString(i);
      ObjectCreate(0, time_name, OBJ_VLINE, 0, time_levels[i], 0);
      ObjectSetInteger(0, time_name, OBJPROP_COLOR, TimeLevelColor);
      ObjectSetInteger(0, time_name, OBJPROP_STYLE, STYLE_DOT);
      ObjectSetInteger(0, time_name, OBJPROP_WIDTH, 1);
      ObjectSetString(0, time_name, OBJPROP_TOOLTIP, "Gann Time Level " + TimeToString(time_levels[i], TIME_DATE|TIME_MINUTES));
     }
  }

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0, "GannPriceLevel_");
   ObjectsDeleteAll(0, "GannTimeLevel_");
  }
//+------------------------------------------------------------------+

Этот индикатор представляет собой современную интерпретацию концепции Квадрата 9 Уильяма Ганна, адаптированную для платформы MetaTrader 5. Он визуализирует ценовые и временные уровни, основанные на принципах Ганна, предоставляя трейдерам уникальный инструмент для анализа рынка и принятия торговых решений.

Входные параметры индикатора:

  • StartNumber — начальное число для построения Квадрата 9,
  • PriceLevelColor и TimeLevelColor — цвета отображения ценовых и временных уровней соответственно,
  • LevelsToShow — количество отображаемых уровней,
  • EndDate — конечная дата для расчетов и тестирования на исторических данных,
  • PriceStepDivisor — частота ценовых уровней.

Для хранения и обработки данных используются глобальные переменные. Массивы price_levels[] и time_levels[] хранят рассчитанные ценовые и временные уровни соответственно. Переменные price_scale и time_scale используются для масштабирования ценовых и временных значений.

Функция CalculateScales() автоматически определяет масштабы для цены и времени на основе текущей цены инструмента и заданной конечной даты. CalculateLevels() выполняет расчеты ценовых и временных уровней. Ценовые уровни рассчитываются с использованием квадратичной функции и дополнительного делителя для увеличения частоты уровней, в то время как временные уровни основаны на квадрате числа, что соответствует теории Ганна. DrawLevels() отвечает за визуализацию данных, создавая на графике горизонтальные линии для ценовых уровней и вертикальные линии для временных уровней. 

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

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

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


Визуализация уровней Квадрата 9 на графике

Ценовые уровни отображаются в виде горизонтальных линий на графике. Каждая линия представляет собой потенциальный уровень поддержки или сопротивления, рассчитанный на основе принципов Квадрата 9 Ганна. Цвет этих линий определяется пользовательским параметром PriceLevelColor, что позволяет трейдерам настроить отображение под свои предпочтения и стиль графика. Горизонтальные линии распределяются по вертикальной оси графика, при этом их плотность контролируется параметром PriceStepDivisor. Это дает возможность трейдерам регулировать количество отображаемых ценовых уровней, находя баланс между детализацией и читаемостью графика.


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


Квадрирование времени и временные циклы

Квадрирование времени и временные циклы являются ключевыми концепциями в теории Уильяма Ганна, которые нашли отражение в Квадрате 9. Эти идеи основаны на предположении, что рыночные движения подчиняются определенным временным паттернам, которые можно предсказать и использовать для принятия торговых решений.

time_scale = (int)MathMax(1, (EndDate - current_time) / (86400 * StartNumber * StartNumber));  // in days

Концепция квадрирования времени предполагает, что значимые рыночные события часто происходят через интервалы, которые являются квадратами целых чисел. Например, важные повороты рынка могут происходить через 4, 9, 16, 25, 36, 49, 64, 81 дней или более длительные периоды, основанные на этих числах. В контексте Квадрата 9 эти числа соответствуют ключевым точкам спирали.

Формула является ключевым элементом в расчете временной шкалы для индикатора Квадрата 9 Ганна. Давайте разберем ее компоненты и значение:

  1. EndDate − current_time: это разница между заданной конечной датой и текущим временем. Результат выражается в секундах.
  2. 86400: это количество секунд в одном дне (24 часа * 60 минут * 60 секунд).
  3. StartNumber * StartNumber: это квадрат начального числа, который используется для масштабирования временной шкалы.
  4. (EndDate − current_time) / (86400 * StartNumber * StartNumber): эта часть формулы преобразует разницу во времени из секунд в дни, а затем делит ее на квадрат начального числа. Это создает нелинейную шкалу времени, соответствующую принципам Квадрата 9 Ганна.
  5. MathMax(1, ...): эта функция гарантирует, что результат будет не менее 1. Это предотвращает деление на ноль или получение отрицательных значений.
  6. (int): Приведение результата к целочисленному типу, так как временная шкала должна быть выражена в целых днях.

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

Чем больше StartNumber, тем более сжатой будет временная шкала. Это позволяет трейдерам настраивать индикатор для различных временных горизонтов торговли.

Использование квадрата StartNumber (StartNumber * StartNumber) в знаменателе создает нелинейное распределение временных уровней, что соответствует принципам Квадрата 9 Ганна, где важность чисел увеличивается квадратично.


Ускорение временных циклов вместе с ускорением рыночных циклов

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

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

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

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

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


Тестирование индикатора

Рассмотрим результаты индикатора на исторических данных. В качестве актива мы избрали евро-доллар, в качестве стартовой точки для расчета уровней — точку 1.00. Итак, по очереди:

Еще один участок истории:

И еще один:

2008 год:

2010, вновь видим реакцию на уровни:

2011:

2012:

2020 год:

Современность: сейчас цена евро-доллара как раз находится на уровне Квадрата 9 Ганна.

Что касается временных циклов по квадрированию времени, то каких-либо статистически значимых реакций цены на них я не заметил.

Возможные улучшения

Интересным вариантом видится добавление алертов при касании ценой уровня Квадрата 9. Также, возможно добавление авто - пересчета уровней квадрата при обновлении цен. 

Также было бы интересно также реализовать коробку Ганна, и сетку Ганна в виде индикаторов, и совместить все разработки в одну комплекссную систему.

Перспективы создания советника по квадрату 9

Реально также создать советник на отбой от уровней квадрата. Я вижу это именно как полуавтоматический советник, возможно с привязкой к объектам на графике. Такой советник мог бы облегчить работу трейдера, выполняя его директивы по торговле от того или иного уровня.

Заключение

В заключение можно сказать, что разработка индикатора Квадрата 9 Ганна для платформы MetaTrader 5 представляет собой интересный и амбициозный проект, объединяющий классические идеи технического анализа с современными технологиями торговли. Этот индикатор предоставляет трейдерам уникальный инструмент для анализа рынка, сочетающий в себе элементы ценового и временного анализа.

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

Важно отметить, что несмотря на свою математическую основу, интерпретация сигналов Квадрата 9 Ганна остается в значительной степени субъективной. 

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

Прикрепленные файлы |
Gann_Square9.mq5 (5.29 KB)
Особенности написания Пользовательских Индикаторов Особенности написания Пользовательских Индикаторов
Написание пользовательских индикаторов в торговой системе MetaTrader 4
Алгоритм искусственных водорослей — Artificial Algae Algorithm (AAA) Алгоритм искусственных водорослей — Artificial Algae Algorithm (AAA)
В данной статье рассматривается алгоритм искусственных водорослей (AAA), разработанный на основе биологических процессов, характерных для микроводорослей. Алгоритм включает спиральное движение, эволюционный процесс и адаптацию, что позволяет ему решать задачи оптимизации. Статья предлагает глубокий анализ принципов работы AAA и его потенциала в математическом моделировании, подчеркивая связь между природой и алгоритмическими решениями.
Особенности написания экспертов Особенности написания экспертов
Написание и тестирование экспертов в торговой системе MetaTrader 4.
Метод группового учета аргументов: реализация многослойного итерационного алгоритма на MQL5 Метод группового учета аргументов: реализация многослойного итерационного алгоритма на MQL5
В этой статье мы описываем реализацию Многослойного итерационного алгоритма как метода группового учета аргументов на языке MQL5.