Разработка инструментария для анализа движения цен (Часть 1): Проектор графиков
Введение
В настоящей статье, озаглавленной «Проектор графиков", мы сосредоточимся на разработке инструмента, предназначенного для упрощения анализа рынка, особенно для трейдеров, работающих в сфере ценовых движений. Проектор графиков накладывает график предыдущего дня на текущий в режиме призрачного отображения.
Во-первых, мы дадим обоснование для Проектор графиков, объяснив важность проецирования графика предыдущего дня на текущий график. Далее мы представим обзор инструмента, за которым последует обсуждение реализации кода. Наконец, в заключение мы кратко изложим наши выводы.
Нашими подтемами являются:
- Обоснование Проектора графиков
- Обзор инструмента
- Реализация кода
- Результаты
- Заключение
Обоснование Проектора графиков
Перерисовка графика предыдущего дня на график текущего дня предлагает трейдерам ряд преимуществ. Вот как этот метод помогает им:
| Преимущества | Описание |
|---|---|
| Непосредственный контекст | Наложение данных за предыдущий день позволяет трейдерам быстро визуализировать движения цен и ключевые уровни поддержки/сопротивления, помогая им оценить текущие рыночные условия в сравнении с историческими ориентирами. |
| Улучшенная идентификация ключевых уровней | Наложение выделяет критические ценовые уровни, такие как поддержка и сопротивление, более четко, чем ручные линии, помогая трейдерам прогнозировать будущие движения цен, определяя давление покупателей и продавцов в прошлом. |
| Распознавание трендов | Наблюдение за взаимодействием текущей цены с действиями предыдущего дня помогает определить тренды. Торговля выше предыдущего максимума указывает на бычий импульс; торговля ниже минимума может указывать на медвежьи настроения. |
| Оптимизированный анализ | Данный метод устраняет необходимость в просмотре исторических данных, позволяя трейдерам сосредоточиться на анализе в режиме реального времени, экономить время и быстрее принимать решения на быстро меняющихся рынках. |
| Поведенческие инсайты | Показывая, как текущее движение цены согласуется с предыдущим поведением, оверлей помогает трейдерам понять психологию рынка, например, потенциальную силу бычьих движений при отклонении от уровней сопротивления. |
| Управление рисками | Четкое отображение прошлых уровней поддержки и сопротивления помогает трейдерам устанавливать ордера стоп-лосс на обоснованных уровнях, что помогает снизить риск. |
| Упрощенное торговое планирование | Визуализация движения цен за предыдущий день упрощает планирование входа и выхода, позволяя трейдерам структурировать сделки вокруг установленных уровней и повышать эффективность стратегии. |
| Сосредоточимся на движении цены | Сохраняя целостность первоначальных ценовых движений, трейдеры могут сосредоточиться непосредственно на динамике ценового движения без искажений, которые могут внести типичные индикаторы. Такая ясность может привести к более точным входам и выходам |
На рисунке ниже мы сравниваем графики за два дня подряд, 19 и 20 сентября 2024 года. Я нарисовал линии, обозначающие уровни поддержки и сопротивления. Сравнение ясно показывает, насколько рынок уважает эти предыдущие уровни. Однако существует ограничение: выявленные уровни поддержки не всегда могут быть наиболее значимыми. Невозможность выделить только основные уровни поддержки и сопротивления может привести к искажению данных, затрудняя способность трейдера принимать обоснованные решения. Без фильтрации менее значимых уровней трейдерам может быть трудно определить подлинные тренды или развороты, что увеличивает риск столкновения с ложными сигналами. Это может привести к ошибочным входам и выходам из системы, что в конечном итоге повлияет на общую эффективность торговли.
Именно теперь и вступает в игру наш инструмент cast. Он может идентифицировать и отображать наиболее сильные максимумы и минимумы, что значительно повышает точность нашего анализа. Кроме того, этот инструмент позволяет нам накладывать график предыдущего дня непосредственно на текущий график, упрощая анализ и интерпретацию ценовых движений.

Рис 1. Сравнение движения цены
Разработка кода
При разработке кода с использованием MetaEditor процесс начинается с запуска MetaEditor. Как только приложение будет открыто, вы перейдете к опции "Создать» (New), чтобы начать создание нового файла. После выбора "Создать" появится окно, в котором можно выбрать тип файла или проекта, который вы хотите создать. В этом случае в качестве категории для вашего проекта вам следует выбрать «Скрипт" (Script), поскольку именно такой тип программы вы планируете разработать.
На рис. 2 ниже показано окно, в котором можно выбрать опцию для создания скрипта. В этом окне представлены необходимые параметры для определения типа проекта, над которым вы собираетесь работать. Выбирая опцию "Скрипт", вы указываете, что хотите создать пользовательскую автоматизированную программу в MetaTrader. Этот шаг имеет решающее значение, поскольку закладывает основу для вашей среды разработки, гарантируя, что MetaEditor сгенерирует соответствующий шаблон для написания вашего MQL5-скрипта. Четкое и удобное расположение этого окна упрощает процесс начала работы над вашим проектом по кодированию.

Рис 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 ниже.

Рис 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
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Отправка запросов в Connexus (Часть 6): Создание HTTP-запроса и ответа
Отбор признаков и снижение размерности с помощью анализа главных компонент (PCA)
Разработка системы репликации (Часть 74): Новый Chart Trade (I)
Нейросети в трейдинге: Фреймворк кросс-доменного прогнозирования временных рядов (TimeFound)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Поздравляю вас с одним из самых больших событий в вашей жизни. Отличный индикатор, однако мы можем достичь этого, создав SMA периода 1, сдвинутую на количество периодов таймфрейма в день. для 1H tF сдвиг на 24, для m15 сдвиг на 1440/15=96. С нетерпением жду вашего знакомства с изучением графиков.
Поздравляю вас с одним из самых больших событий в вашей жизни. Отличный индикатор, однако мы можем достичь этого, создав SMA периода 1, сдвинутую на количество периодов таймфрейма в день. для 1H tF, сдвиг на 24, для m15, сдвиг на 1440/15=96. С нетерпением жду вашего знакомства с хаер-исследованиями.
Большое спасибо