Подскажите, кто если знает, как в mql5 нарисовать круг с заливкой внутри?
Igor Nagorniuk:
Подскажите, кто если знает, как в mql5 нарисовать круг с заливкой внутри?
Подскажите, кто если знает, как в mql5 нарисовать круг с заливкой внутри?
Документация точно знает.
В этом примере нужно присвоить значение true аргументу fill при вызове функции EllipseCreate.
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_ELLIPSE
- www.mql5.com
Эллипс. Примечание Для эллипса можно установить режим заливки при помощи свойства OBJPROP_FILL . Пример Следующий скрипт создает и перемещает на...
Igor Nagorniuk:
Подскажите, кто если знает, как в mql5 нарисовать круг с заливкой внутри?
Подскажите, кто если знает, как в mql5 нарисовать круг с заливкой внутри?
Ещё в MQL5 для создания круга с заливкой на графике используется класс CCanvas из стандартной библиотеки.
Основные моменты создания круга с заливкой в MQL5:
- Подключение библиотеки: Используется #include <Canvas\Canvas.mqh> для работы с графическими объектами.
- Создание Canvas: Метод CreateBitmapLabel() создает область для рисования на графике.
- Рисование круга:
- FillCircle() - создает заливку круга
- Circle() - рисует контур круга
- Управление цветом: Функция ColorToARGB() преобразует цвет MQL5 в формат ARGB с поддержкой прозрачности.
- Координаты: Указываются в пикселях относительно созданного canvas
- Вот пример исходного кода:
//+------------------------------------------------------------------+ //| CircleExample.mq5 | //| Copyright 2025, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2025, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property indicator_chart_window #include <Canvas\Canvas.mqh> // Входные параметры input int circle_x = 100; // X координата центра круга input int circle_y = 100; // Y координата центра круга input int circle_radius = 50; // Радиус круга input color fill_color = clrBlue; // Цвет заливки input color border_color = clrRed; // Цвет границы input int border_width = 2; // Толщина границы // Глобальные переменные CCanvas canvas; string canvas_name = "CircleCanvas"; //+------------------------------------------------------------------+ //| Функция инициализации индикатора | //+------------------------------------------------------------------+ int OnInit() { // Создаем объект canvas на графике if(!canvas.CreateBitmapLabel(canvas_name, 0, 0, 300, 300, COLOR_FORMAT_ARGB_NORMALIZE)) { Print("Ошибка создания canvas"); return INIT_FAILED; } // Очищаем canvas белым цветом canvas.Erase(ColorToARGB(clrWhite, 255)); // Рисуем круг с заливкой DrawFilledCircle(); // Обновляем отображение canvas.Update(); return INIT_SUCCEEDED; } //+------------------------------------------------------------------+ //| Функция рисования круга с заливкой | //+------------------------------------------------------------------+ void DrawFilledCircle() { // Заливаем круг цветом canvas.FillCircle(circle_x, circle_y, circle_radius, ColorToARGB(fill_color, 255)); // Рисуем границу круга if(border_width > 0) { for(int i = 0; i < border_width; i++) { canvas.Circle(circle_x, circle_y, circle_radius - i, ColorToARGB(border_color, 255)); } } } //+------------------------------------------------------------------+ //| Функция деинициализации | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { // Удаляем объект canvas canvas.Destroy(); ObjectDelete(0, canvas_name); } //+------------------------------------------------------------------+ //| Функция обработки каждого тика | //+------------------------------------------------------------------+ 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[]) { // В данном примере обновление происходит только при инициализации return rates_total; } //+------------------------------------------------------------------+ //| Альтернативная функция для создания нескольких кругов | //+------------------------------------------------------------------+ void DrawMultipleCircles() { // Очищаем canvas canvas.Erase(ColorToARGB(clrWhite, 255)); // Рисуем несколько кругов разных размеров и цветов canvas.FillCircle(80, 80, 30, ColorToARGB(clrRed, 180)); canvas.FillCircle(150, 80, 25, ColorToARGB(clrGreen, 180)); canvas.FillCircle(220, 80, 35, ColorToARGB(clrBlue, 180)); // Рисуем круг с градиентной заливкой (имитация) for(int r = 40; r > 0; r--) { uint alpha = (uint)(255 * r / 40); canvas.Circle(150, 200, r, ColorToARGB(clrYellow, alpha)); } // Обновляем отображение canvas.Update(); } //+------------------------------------------------------------------+ //| Функция для создания круга в определенной области графика | //+------------------------------------------------------------------+ void DrawCircleOnChart(double price_level, datetime time_point, int radius_pixels) { // Преобразуем координаты цены и времени в пиксели int x, y; if(ChartTimePriceToXY(0, 0, time_point, price_level, x, y)) { // Создаем новый canvas для этого круга CCanvas chart_canvas; string obj_name = "CircleAt_" + TimeToString(time_point); if(chart_canvas.CreateBitmapLabel(obj_name, x - radius_pixels, y - radius_pixels, radius_pixels * 2, radius_pixels * 2, COLOR_FORMAT_ARGB_NORMALIZE)) { // Делаем фон прозрачным chart_canvas.Erase(ColorToARGB(clrNONE, 0)); // Рисуем круг chart_canvas.FillCircle(radius_pixels, radius_pixels, radius_pixels, ColorToARGB(clrGold, 150)); // Обновляем chart_canvas.Update(); } } }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь