English 中文 Español Deutsch 日本語
preview
Разработка инструментария для анализа движения цен (Часть 2): Скрипт аналитических комментариев

Разработка инструментария для анализа движения цен (Часть 2): Скрипт аналитических комментариев

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

Введение

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

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

Мы рассмотрим следующие подтемы:

  1. Почему именно этот инструмент?
  2. Обзор нового инструмента
  3. Скрипт MQL5
  4. Разработка кода
  5. Тестирование
  6. Заключение


Почему именно этот инструмент?

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

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

Некоторые из ключевых особенностей приведены в таблице ниже.

Преимущества Описание
Определение ключевых уровней Знание максимальных и минимальных цен предыдущего дня может помочь трейдерам определить важные психологические уровни, на которых может усилиться давление со стороны покупателей или продавцов.
Данные по объему Анализ объема помогает трейдерам оценить интерес рынка. Высокий объем на определенном ценовом уровне часто свидетельствует о сильной уверенности трейдеров, что делает его важным ориентиром для будущих сделок.
Подтверждение тренда Цены открытия и закрытия дают представление о настроениях рынка. Более высокое закрытие по сравнению с открытием указывает на бычьи настроения, тогда как противоположное — на медвежьи.
Обозначения на графике Скрипт добавляет на график горизонтальные линии поддержки и сопротивления, предоставляя визуальные подсказки, которые могут улучшить анализ. Такая визуальная поддержка облегчает понимание рыночных уровней и динамики цен.
Комментарии Использование поля комментариев на графике помогает кратко изложить важную аналитику, что может способствовать быстрому принятию решений.
Инструмент обучения Для начинающих трейдеров скрипт может служить образовательным инструментом, помогающим им понять, как читать и интерпретировать исторические данные о ценах, объемах и последствиях для будущих движений цен.
Эффективность и экономия времени Инструмент автоматизирует расчет и извлечение ключевых показателей, экономя время. Это позволяет трейдерам сосредоточиться на выполнении своих торговых планов, а не на сборе данных.


Обзор скрипта

Скрипт MQL5, который мы рассмотрим, поможет вам автоматически собрать важные показатели за предыдущий торговый день. Это упрощает анализ, и вы можете уделять больше времени разработке стратегии и меньше — сбору данных. Как работает скрипт? 

1. Рассчитывает и отображает основные технические уровни путем прямого извлечения данных за предыдущий торговый день в торговой платформе.

Ключевые технические уровни

 Рис 1. Основные уровни

На рисунке 1 отображена основная информация о рынке, включая цены открытия и закрытия предыдущего дня, ключевые уровни сопротивления и поддержки, а также то, как рынок реагирует на эти уровни.

2. Аннотирование графиков для немедленного использования.

Отображение информации

Рис 2. Данные на графике

На рисунке 2 мы видим, как справочная информация представлена прямо на графике MetaTrader 5.

Давайте подробнее рассмотрим скрипт, чтобы понять, как он функционирует.


Скрипт MQL5

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

//+------------------------------------------------------------------+
//|                                                          ACS.mq5 |
//|                        Copyright 2024, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "2024, MetaQuotes Software Corp."
#property link        "https://www.mql5.com/en/users/lynnchris"
#property description "Script that displays previous day metrics on the current chart and predicts market direction."
#property version     "1.0"

#include <Trade\Trade.mqh>

//+------------------------------------------------------------------+
//| Input parameters                                                 |
//+------------------------------------------------------------------+
input color TableTextColor = clrBlue; // Text color for the table
input int   TableXOffset   = 10;      // X offset for the table
input int   TableYOffset   = 50;      // Y offset for the table
input color SupportColor = clrGreen; // Color for the support line
input color ResistanceColor = clrRed; // Color for the resistance line

//+------------------------------------------------------------------+
//| Global variables                                                 |
//+------------------------------------------------------------------+
double prevDayHigh, prevDayLow, prevDayOpen, prevDayClose, prevDayVolume;
double currentDayVolume;
double keySupport, keyResistance; // Initialized but will be calculated

//+------------------------------------------------------------------+
//| Main function                                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Get previous day's data
   int prevDayIndex = iBarShift(NULL, PERIOD_D1, iTime(NULL, PERIOD_D1, 1));

   if(prevDayIndex == -1)
     {
      Print("Error retrieving previous day's data.");
      return;
     }

   prevDayHigh    = iHigh(NULL, PERIOD_D1, prevDayIndex);
   prevDayLow     = iLow(NULL, PERIOD_D1, prevDayIndex);
   prevDayOpen    = iOpen(NULL, PERIOD_D1, prevDayIndex);
   prevDayClose   = iClose(NULL, PERIOD_D1, prevDayIndex);
   prevDayVolume  = iVolume(NULL, PERIOD_D1, prevDayIndex);

//--- Get today's volume
   currentDayVolume = iVolume(NULL, PERIOD_D1, 0); // Current day's volume

//--- Calculate key support and resistance
   keySupport = prevDayLow;  // Support level can be set to the previous day's low
   keyResistance = prevDayHigh; // Resistance level can be set to the previous day's high

//--- Manage existing lines (if any)
//ObjectDelete("SupportLine");
//ObjectDelete("ResistanceLine");

//--- Create support line
   if(!ObjectCreate(0, "SupportLine", OBJ_HLINE, 0, 0, keySupport))
     {
      Print("Failed to create SupportLine");
     }
   ObjectSetInteger(0, "SupportLine", OBJPROP_COLOR, SupportColor);
   ObjectSetInteger(0, "SupportLine", OBJPROP_WIDTH, 2); // Set the width of the line

//--- Create resistance line
   if(!ObjectCreate(0, "ResistanceLine", OBJ_HLINE, 0, 0, keyResistance))
     {
      Print("Failed to create ResistanceLine");
     }
   ObjectSetInteger(0, "ResistanceLine", OBJPROP_COLOR, ResistanceColor);
   ObjectSetInteger(0, "ResistanceLine", OBJPROP_WIDTH, 2); // Set the width of the line

//--- Determine the day's nature (Bullish or Bearish)
   string marketNature;
   if(prevDayClose > prevDayOpen)
     {
      marketNature = "Bullish";
     }
   else
      if(prevDayClose < prevDayOpen)
        {
         marketNature = "Bearish";
        }
      else
        {
         marketNature = "Neutral";
        }

//--- Compare volumes and determine market sentiment
   string volumeCommentary;
   if(currentDayVolume > prevDayVolume)
     {
      volumeCommentary = "Current day volume is higher than previous day volume. Bullish sentiment may continue.";
     }
   else
      if(currentDayVolume < prevDayVolume)
        {
         volumeCommentary = "Current day volume is lower than previous day volume. Bearish sentiment may follow.";
        }
      else
        {
         volumeCommentary = "Current day volume is equal to previous day volume. Market sentiment remains uncertain.";
        }

//--- Generate market movement commentary
   string marketCommentary;
   if(marketNature == "Bullish")
     {
      marketCommentary = "The market closed higher yesterday, indicating bullish sentiment. Look for potential continuation patterns.";
     }
   else
      if(marketNature == "Bearish")
        {
         marketCommentary = "The market closed lower yesterday, indicating bearish sentiment. Consider taking positions that align with this trend.";
        }
      else
        {
         marketCommentary = "The market showed neutrality with little change. Watch for potential breakout opportunities.";
        }

//--- Display the information in a table-like format on the chart
   string textOutput = "Previous Day Analytics:\n";
   textOutput += "Open: " + DoubleToString(prevDayOpen, 5) + "\n";
   textOutput += "Close: " + DoubleToString(prevDayClose, 5) + "\n";
   textOutput += "High: " + DoubleToString(prevDayHigh, 5) + "\n";
   textOutput += "Low: " + DoubleToString(prevDayLow, 5) + "\n";
   textOutput += "Volume (Prev Day): " + DoubleToString(prevDayVolume, 0) + "\n";
   textOutput += "Volume (Current Day): " + DoubleToString(currentDayVolume, 0) + "\n";
   textOutput += "Support: " + DoubleToString(keySupport, 5) + "\n";
   textOutput += "Resistance: " + DoubleToString(keyResistance, 5) + "\n";
   textOutput += "\nMarket Nature: " + marketNature + "\n";
   textOutput += volumeCommentary + "\n";
   textOutput += marketCommentary;

// Draw the text output on the chart
   Comment(textOutput);
  }

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+


Разработка кода

Реализуем наш код в MetaEditor. В этом случае мы решили создать скрипт. Ниже мы опишем шаги для достижения этой цели.

1. Свойства

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

#property copyright "2024, MetaQuotes Software Corp"
#property link      "https://www.mql5.com/en/users/lynnchris"
#property version   "1.0"

2. Добавление необходимых библиотек

Эта строка включает библиотеку Trade.mqh.

Trade - термин, вероятно, относится к различным функциям, классам или объектам, предназначенным для управления торговыми операциями. Эти элементы упрощают выполнение сделок, проверку статусов сделок и обработку связанных задач в ваших торговых алгоритмах.

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

#include <Trade\Trade.mqh>

3. Входные параметры: 

Входной параметр — это переменная, определенная в программе MQL5, которую пользователи могут настраивать в тестере стратегий или входных настройках советника, не изменяя базовый код.

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

input color TableTextColor = clrBlue; // Text color for the table
input int   TableXOffset   = 10;      // X offset for the table
input int   TableYOffset   = 50;      // Y offset for the table
input color SupportColor = clrGreen; // Color for the support line
input color ResistanceColor = clrRed; // Color for the resistance line

Далее рассмотрим глобальные переменные. Эти глобальные переменные хранят информацию о ценовом поведении предыдущего дня и объеме текущего дня. Переменные keySupport и keyResistance инициализируются далее в коде.

double prevDayHigh, prevDayLow, prevDayOpen, prevDayClose, prevDayVolume;
double currentDayVolume;
double keySupport, keyResistance; // Initialized but will be calculated

4. Основной функционал:

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

void OnStart()

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

int prevDayIndex = iBarShift(NULL, PERIOD_D1, iTime(NULL, PERIOD_D1, 1));

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

if (prevDayIndex == -1)
{
   Print("Error retrieving previous day's data.");
   return;
}

Далее извлекаются данные за предыдущий день:

prevDayHigh    = iHigh(NULL, PERIOD_D1, prevDayIndex);
prevDayLow     = iLow(NULL, PERIOD_D1, prevDayIndex);
prevDayOpen    = iOpen(NULL, PERIOD_D1, prevDayIndex);
prevDayClose   = iClose(NULL, PERIOD_D1, prevDayIndex);
prevDayVolume  = iVolume(NULL, PERIOD_D1, prevDayIndex);

Получение обхема текущего дня

Позволяет получить объем за текущий день.

currentDayVolume = iVolume(NULL, PERIOD_D1, 0); // Current day's volume

Расчет уровней поддержки и сопротивления

Уровень поддержки устанавливается на уровне минимума предыдущего дня, а уровень сопротивления — на уровне максимума предыдущего дня.

keySupport = prevDayLow;  // Support level can be set to the previous day's low
keyResistance = prevDayHigh; // Resistance level can be set to the previous day's high

Создание линий поддержки и сопротивления

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

if (!ObjectCreate(0, "SupportLine", OBJ_HLINE, 0, 0, keySupport))
{
   Print("Failed to create SupportLine");
}

 Определение природы рынка

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

if (prevDayClose > prevDayOpen)
{
   marketNature = "Bullish";
}
else if (prevDayClose < prevDayOpen)
{
   marketNature = "Bearish";
}
else
{
   marketNature = "Neutral";
}

Комментарий

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

Ниже приведен комментарий по текущим и предыдущим дням:

if (currentDayVolume > prevDayVolume)
{
   volumeCommentary = "Current day volume is higher...";
}
else if (currentDayVolume < prevDayVolume)
{
   volumeCommentary = "Current day volume is lower...";
}
else
{
   volumeCommentary = "Current day volume is equal...";
}

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

if (marketNature == "Bullish")
{
   marketCommentary = "The market closed higher yesterday...";
}
else if (marketNature == "Bearish")
{
   marketCommentary = "The market closed lower yesterday...";
}
else
{
   marketCommentary = "The market showed neutrality...";
}

Отображение данных

Наконец, создается текстовое сообщение со всеми собранными данными и отображается на графике:

string textOutput = "Previous Day Analytics:\n";
textOutput += "Open: " + DoubleToString(prevDayOpen, 5) + "\n";
...
textOutput += marketCommentary;

// Draw the text output on the chart
Comment(textOutput);


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

Ниже приведены шаги для успешной реализации скрипта.

1: Откройте MetaTrader 5 и перейдите в MetaEditor.

2: В MetaEditor создайте новый скрипт, выбрав "Создать" > "Скрипт".

3: Скопируйте и вставьте предоставленный скрипт в редактор.

4: Скомпилируйте скрипт с помощью кнопки «Компилировать». Убедитесь в отсутствии ошибок.

5: Вернитесь в MetaTrader, найдите скрипт на панели Navigator в разделе "Скрипты" и перетащите его на нужный график. После перетаскивания скрипта на график я получил следующий результат:

  Результат теста 1

Рис. 3. Результат первого теста инструмента

6: Задайте любые пользовательские входные параметры (при желании) в появившемся диалоговом окне. Ниже представлено GIF-изображение, демонстрирующее, как я изменил некоторые параметры в MetaTrader 5.

  Изменение параметров

Рис 4. Установка параметров

После запуска скрипта были получены следующие результаты. Ниже представлены три GIF-изображения разных пар, на которых я тестировал скрипт. На первом GIF-изображении показана валютная пара USDSEK, которая дала следующие результаты.

  Результат работы инструмента

Рис. 5. Результат второго теста инструмента

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

Во-вторых, мы также проанализировали индекс Crash 900.

  Результат теста

Рис. 6. Результат третьего теста инструмента

На рис. 6 индекса Crash 900 информация также была представлена наглядно, показывая медвежьи настроения, которые развивались быстро и однонаправленно.

Lastly, we analyzed the USDCNH pair, as detailed below.

  Результат

Рис. 7. Результат четвертого теста инструмента

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

Кроме того, в ходе тестирования инструмента на рисунке 3 (индекс Boom 300) были получены некоторые примечательные результаты. Он наглядно иллюстрирует начальные и конечные цены предыдущего дня, предоставляя ценную информацию для анализа рынка и его поведения. Данные также указывают на медвежий тренд.


Заключение

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

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

Дата Название инструмента   Особенности Версия  Обновления  Примечания
01/10/24 Chart Projector Скрипт для наложения эффекта призрака на движение цены за предыдущий день.  1.0 Первоначальная версия Первый инструмент в Lynnchris Tools Chest
18/11/24 Analytical Comment Предоставляет информацию за предыдущий день в табличном формате, а также прогнозирует будущее направление рынка.  1.0 Первоначальная версия Второй инструмент в Lynnchris Tools Chest

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

Прикрепленные файлы |
Создание торговой панели администратора на MQL5 (Часть VI): Панель управления торговлей (II) Создание торговой панели администратора на MQL5 (Часть VI): Панель управления торговлей (II)
В этой статье мы улучшим панель управления торговлей нашей многофункциональной панели администратора. Мы представим мощную вспомогательную функцию, которая упрощает код, улучшая его читаемость, удобство обслуживания и эффективность. Мы также продемонстрируем, как легко интегрировать дополнительные кнопки и улучшить интерфейс для решения более широкого спектра торговых задач. Независимо от того, управляете ли вы позициями, корректируете ордера или упрощаете взаимодействие с пользователем, это руководство поможет вам разработать надежную и удобную панель управления торговлей.
Разработка советника для анализа новостных событий о пробоях на основе календаря на MQL5 Разработка советника для анализа новостных событий о пробоях на основе календаря на MQL5
Волатильность, как правило, достигает пика во время важных новостных событий, создавая значительные возможности для пробоя. В настоящей статье мы расскажем о процессе реализации основанной на календаре стратегии прорыва. Мы рассмотрим все, начиная с создания класса для интерпретации и хранения календарных данных, разработки реалистичных бэк-тестов на основе этих данных и, наконец, реализации кода исполнения для реальной торговли.
Алгоритм биржевого рынка — Exchange Market Algorithm (EMA) Алгоритм биржевого рынка — Exchange Market Algorithm (EMA)
Статья посвящена подробному анализу алгоритма Exchange Market Algorithm (EMA), который вдохновлен поведением трейдеров на фондовом рынке. Алгоритм моделирует процесс торговли акциями, где участники рынка с разным уровнем успеха применяют различные стратегии для максимизации прибыли.
Нейросети в трейдинге: Вероятностное прогнозирование временных рядов (K2VAE) Нейросети в трейдинге: Вероятностное прогнозирование временных рядов (K2VAE)
Предлагаем ознакомиться с оригинальной реализацией фреймворка K²VAE — гибкой модели, способной линейно аппроксимировать сложную динамику в латентном пространстве. В статье показано, как реализовать ключевые компоненты на языке MQL5, включая параметризованные матрицы и их управление вне стандартных нейросетевых слоёв. Материал будет полезен тем, кто ищет практический подход к созданию интерпретируемых моделей временных рядов.