English 中文 Español Deutsch 日本語 Português
preview
Разработка инструментария для анализа движения цен (Часть 1): Проектор графиков

Разработка инструментария для анализа движения цен (Часть 1): Проектор графиков

MetaTrader 5Примеры |
567 2
Christian Benjamin
Christian Benjamin

Введение

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

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

Нашими подтемами являются:

  1. Обоснование Проектора графиков
  2. Обзор инструмента
  3. Реализация кода
  4. Результаты
  5. Заключение


Обоснование Проектора графиков

Перерисовка графика предыдущего дня на график текущего дня предлагает трейдерам ряд преимуществ. Вот как этот метод помогает им:

Преимущества
Описание
Непосредственный контекст Наложение данных за предыдущий день позволяет трейдерам быстро визуализировать движения цен и ключевые уровни поддержки/сопротивления, помогая им оценить текущие рыночные условия в сравнении с историческими ориентирами.
Улучшенная идентификация ключевых уровней Наложение выделяет критические ценовые уровни, такие как поддержка и сопротивление, более четко, чем ручные линии, помогая трейдерам прогнозировать будущие движения цен, определяя давление покупателей и продавцов в прошлом.
Распознавание трендов Наблюдение за взаимодействием текущей цены с действиями предыдущего дня помогает определить тренды. Торговля выше предыдущего максимума указывает на бычий импульс; торговля ниже минимума может указывать на медвежьи настроения.
Оптимизированный анализ Данный метод устраняет необходимость в просмотре исторических данных, позволяя трейдерам сосредоточиться на анализе в режиме реального времени, экономить время и быстрее принимать решения на быстро меняющихся рынках.
Поведенческие инсайты Показывая, как текущее движение цены согласуется с предыдущим поведением, оверлей помогает трейдерам понять психологию рынка, например, потенциальную силу бычьих движений при отклонении от уровней сопротивления.
Управление рисками Четкое отображение прошлых уровней поддержки и сопротивления помогает трейдерам устанавливать ордера стоп-лосс на обоснованных уровнях, что помогает снизить риск.
Упрощенное торговое планирование Визуализация движения цен за предыдущий день упрощает планирование входа и выхода, позволяя трейдерам структурировать сделки вокруг установленных уровней и повышать эффективность стратегии.
Сосредоточимся на движении цены Сохраняя целостность первоначальных ценовых движений, трейдеры могут сосредоточиться непосредственно на динамике ценового движения без искажений, которые могут внести типичные индикаторы. Такая ясность может привести к более точным входам и выходам

На рисунке ниже мы сравниваем графики за два дня подряд, 19 и 20 сентября 2024 года. Я нарисовал линии, обозначающие уровни поддержки и сопротивления. Сравнение ясно показывает, насколько рынок уважает эти предыдущие уровни. Однако существует ограничение: выявленные уровни поддержки не всегда могут быть наиболее значимыми. Невозможность выделить только основные уровни поддержки и сопротивления может привести к искажению данных, затрудняя способность трейдера принимать обоснованные решения. Без фильтрации менее значимых уровней трейдерам может быть трудно определить подлинные тренды или развороты, что увеличивает риск столкновения с ложными сигналами. Это может привести к ошибочным входам и выходам из системы, что в конечном итоге повлияет на общую эффективность торговли.

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

 

Рис 1. Сравнение движения цены


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

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

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

Script

Рис 2. Начать новый скрипт

Здесь я расскажу вам о том, как можно создать эффект призрака, а также о проецировании предыдущего графика на текущий с помощью MQL5.

1. Свойства:

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

//+------------------------------------------------------------------+
//|                                              Chart Projector.mq5 |
//|                                               Christian Benjamin |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Christian Benjamin"
#property link        "http://www.mql5.com"
#property description "Script to overlay yesterday's price action with ghost effect. Projected onto current day's chart and beyond"
#property indicator_chart_window
#property strict
#property script_show_inputs
#property version "1.0"

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

2. Раздел входных данных:

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

input color GhostColor = clrGray;        // Color for ghost effect (can be transparent)
input int LineStyle = STYLE_DOT;         // Line style for ghost candlesticks
input int LineWidth = 2;                 // Line width for ghost candlesticks
input bool ShowHighLow = true;           // Show high/low lines of yesterday
input int ShiftBars = 0;                 // Number of bars to shift ghost forward/backward
input int ProjectForwardBars = 100;      // Number of bars to project ghost pattern forward

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

входные параметры скрипта

Рис. 3. Входные параметры скрипта

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

3. Функция OnStart:

Функция OnStart() служит точкой входа скрипта. При запуске скрипта эта функция вызывает основную функцию DrawGhostCandles().

void OnStart()
{
    DrawGhostCandles(); // Call the function to draw ghost candles
}

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

4. Функция DrawGhostCandles:

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

void DrawGhostCandles()
{
    ENUM_TIMEFRAMES timeFrame = Period(); // Get the current timeframe
    
    datetime yesterdayStart = iTime(_Symbol, PERIOD_D1, 1); // Start of yesterday
    datetime todayStart = iTime(_Symbol, PERIOD_D1, 0); // Start of today
    datetime todayEnd = todayStart + PeriodSeconds(PERIOD_D1); // Expected end of today (24 hours)

    int startBarYesterday = iBarShift(_Symbol, timeFrame, yesterdayStart); // Yesterday's first bar
    int endBarYesterday = iBarShift(_Symbol, timeFrame, todayStart) - 1; // Yesterday's last bar

    if (startBarYesterday == -1 || endBarYesterday == -1)
    {
        Print("No data for yesterday.");
        return;
    }

    int barsToday = Bars(_Symbol, timeFrame, todayStart, todayEnd); // Total number of bars today

    for (int i = 0; i < barsToday; i++) // Loop through yesterday's bars
    {
        int yesterdayIndex = startBarYesterday - i % (endBarYesterday - startBarYesterday + 1);

        datetime timeYesterday = iTime(_Symbol, timeFrame, yesterdayIndex); 
        double openYesterday = iOpen(_Symbol, timeFrame, yesterdayIndex);
        double highYesterday = iHigh(_Symbol, timeFrame, yesterdayIndex);
        double lowYesterday = iLow(_Symbol, timeFrame, yesterdayIndex);
        double closeYesterday = iClose(_Symbol, timeFrame, yesterdayIndex);

        datetime projectedTime = todayStart + i * PeriodSeconds() + ShiftBars * PeriodSeconds(); 

        if (projectedTime >= todayEnd) break; // Stop projection if today's end is reached

        DrawGhostBar(projectedTime, openYesterday, highYesterday, lowYesterday, closeYesterday); // Draw ghost bar
    }

    if (ShowHighLow)
    {
        double yesterdayHigh = iHigh(_Symbol, PERIOD_D1, 1); // Yesterday's high
        double yesterdayLow = iLow(_Symbol, PERIOD_D1, 1);   // Yesterday's low

        DrawHorizontalLine("YesterdayHigh", yesterdayHigh);  // Draw high
        DrawHorizontalLine("YesterdayLow", yesterdayLow);    // Draw low
    }
}

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

5. Функция DrawGhostBar:

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

void DrawGhostBar(datetime time, double open, double high, double low, double close)
{
    string lineName = "GhostLine" + IntegerToString(time);  // Line name for high-low
    ObjectCreate(0, lineName, OBJ_TREND, 0, time, low, time, high); // Create the line
    ObjectSetInteger(0, lineName, OBJPROP_COLOR, GhostColor); // Set color
    ObjectSetInteger(0, lineName, OBJPROP_STYLE, LineStyle);  // Set style
    ObjectSetInteger(0, lineName, OBJPROP_WIDTH, LineWidth);  // Set width

    string ocName = "GhostOC" + IntegerToString(time);  // Rectangle name for open-close
    ObjectCreate(0, ocName, OBJ_RECTANGLE, 0, time, open, time + PeriodSeconds(), close); // Create rectangle
    ObjectSetInteger(0, ocName, OBJPROP_COLOR, GhostColor); // Set color
    ObjectSetInteger(0, ocName, OBJPROP_STYLE, LineStyle);  // Set style
    ObjectSetInteger(0, ocName, OBJPROP_WIDTH, LineWidth);  // Set width
}

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

6. Функция DrawHorizontalLine:

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

void DrawHorizontalLine(string name, double price)
{
    if (!ObjectCreate(0, name, OBJ_HLINE, 0, TimeCurrent(), price))
    {
        Print("Failed to create horizontal line."); // Error handling
    }
    ObjectSetInteger(0, name, OBJPROP_COLOR, GhostColor); // Set color
    ObjectSetInteger(0, name, OBJPROP_STYLE, LineStyle);  // Set style
    ObjectSetInteger(0, name, OBJPROP_WIDTH, LineWidth);  // Set width
}

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


Результаты

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

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

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

Chart Projector Results

Рис 4. Результат проекции графиков

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

Результат проекции графиков

Рис. 5. Результат проекции графиков

На рисунке 5 показаны результаты нашего проектора графиков, показывающие, как текущая динамика рынка соотносится с максимумами и минимумами предыдущего дня.


Заключение

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

Я призываю всех использовать это исключительно в образовательных целях. Просим не экспериментировать с реальными деньгами!

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

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

Прикрепленные файлы |
Последние комментарии | Перейти к обсуждению на форуме трейдеров (2)
Pat Patel
Pat Patel | 12 нояб. 2024 в 04:10

Поздравляю вас с одним из самых больших событий в вашей жизни. Отличный индикатор, однако мы можем достичь этого, создав SMA периода 1, сдвинутую на количество периодов таймфрейма в день. для 1H tF сдвиг на 24, для m15 сдвиг на 1440/15=96. С нетерпением жду вашего знакомства с изучением графиков.

Christian Benjamin
Christian Benjamin | 20 нояб. 2024 в 12:43
Pat Patel #:

Поздравляю вас с одним из самых больших событий в вашей жизни. Отличный индикатор, однако мы можем достичь этого, создав SMA периода 1, сдвинутую на количество периодов таймфрейма в день. для 1H tF, сдвиг на 24, для m15, сдвиг на 1440/15=96. С нетерпением жду вашего знакомства с хаер-исследованиями.

Большое спасибо

Отправка запросов в Connexus (Часть 6): Создание HTTP-запроса и ответа Отправка запросов в Connexus (Часть 6): Создание HTTP-запроса и ответа
В этой шестой статье из серии о библиотеке Connexus мы сосредоточимся на полном HTTP-запросе, рассмотрев каждый компонент, из которого состоит запрос. Мы создадим класс, представляющий запрос в целом, который поможет нам объединить ранее созданные классы.
Отбор признаков и снижение размерности с помощью анализа главных компонент (PCA) Отбор признаков и снижение размерности с помощью анализа главных компонент (PCA)
В статье рассматривается реализация модифицированного алгоритма анализа компонентов прямого отбора, вдохновленного исследованиями, представленными в книге Луки Пуггини (Luca Puggini) и Шона Маклуна (Sean McLoone) “Анализ компонентов прямого отбора: алгоритмы и приложения”.
Разработка системы репликации (Часть 74): Новый Chart Trade (I) Разработка системы репликации (Часть 74): Новый Chart Trade (I)
В этой статье мы изменим последний код, показанный в данной серии о Chart Trade. Эти изменения необходимы, чтобы адаптировать код к текущей модели системы репликации/моделирования. Представленные здесь материалы предназначены только для обучения. Ни в коем случае не рассматривайте его как окончательное приложение, целью которого не является изучение представленных концепций.
Нейросети в трейдинге: Фреймворк кросс-доменного прогнозирования временных рядов (TimeFound) Нейросети в трейдинге: Фреймворк кросс-доменного прогнозирования временных рядов (TimeFound)
В этой статье мы шаг за шагом собираем ядро интеллектуальной модели TimeFound, адаптированной под реальные задачи прогнозирования временных рядов. Если вас интересует практическая реализация нейросетевых патчинг-алгоритмов в MQL5 — вы точно по адресу.