GrapichsByLeo/Histogram/Barra/Defines.mqh
2025-10-16 21:01:51 -05:00

150 lines
No EOL
12 KiB
MQL5

//+------------------------------------------------------------------+
//| Defines.mqh |
//| Copyright 2025, Niquel Mendoza. |
//| https://www.mql5.com/es/users/nique_372/news |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, Niquel Mendoza."
#property link "https://www.mql5.com/es/users/nique_372/news"
#property strict
#ifndef HISTOGRAM_BARRA_DEFINES_BY_LEO_MQH
#define HISTOGRAM_BARRA_DEFINES_BY_LEO_MQH
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#include "..\\..\\General\\Canvas.mqh"
#include <Utils\\Funciones Array.mqh>
#include "..\\..\\..\\MQLArticles\\Utils\\FA\\Sort.mqh"
//+------------------------------------------------------------------+
//| Tipo de histograma |
//+------------------------------------------------------------------+
enum ENUM_HISTOGAM_TYPE
{
HISTOGRAM_HORIZONTAL = 0,
HISTOGRAM_VERTICAL = 1
};
//+------------------------------------------------------------------+
//| Calculo de la posicion del texto |
//+------------------------------------------------------------------+
typedef void(*HistogramFuncionCalculateText)(int x1, int y1, int x2, int y2, int& xtext, int& ytext);
//+------------------------------------------------------------------+
//| Conversion de valor a pixel |
//+------------------------------------------------------------------+
typedef int(*HistogramFuncionCalculatePixel)(const double value, double value_corte, double factor_pos, double factor_neg);
namespace HistogramFunctions
{
//+------------------------------------------------------------------+
__forceinline int ValueToPixelComplete(const double value, double value_corte, double factor_pos, double factor_neg)
{
return int((value - value_corte) * factor_pos); // se usa el positivo OJO
}
//+------------------------------------------------------------------+
__forceinline int ValueToPixelCorte(const double value, double value_corte, double factor_pos, double factor_neg)
{
// Si es mayor a factor_pos retornanra un valor posiitivo de lo contrairo negativo
return int((value - value_corte) * (value >= value_corte ? factor_pos : factor_neg));
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
typedef bool(*CHistogramConjuntoFuncSort)(MqlParam &params[], double value1, double value2);
namespace HistogramFuncionCompare
{
__forceinline bool HistValueIsMayor(MqlParam &params[], double value1, double value2)
{
return value1 > value2;
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
typedef void(*HistFunctionDrawRect)(CCanvasCustom* canvas, int x1, int y1, int x2, int y2, uint clr);
namespace HistConjuntoDrawRectFunctions
{
__forceinline void HistDrawRectFill(CCanvasCustom* canvas, int x1, int y1, int x2, int y2, uint clr)
{
canvas.FillRectangle(x1, y1, x2, y2, clr);
}
__forceinline void HistDrawRectNoFill(CCanvasCustom* canvas, int x1, int y1, int x2, int y2, uint clr)
{
canvas.Rectangle(x1, y1, x2, y2, clr);
}
}
enum ENUM_HIST_DRAW_RECT_STYLE
{
HIST_DRAW_RECT_NO_FILL = 0,
HIST_DRAW_RECT_FILL = 1
};
//+------------------------------------------------------------------+
//| Macros |
//+------------------------------------------------------------------+
// Calculo del ancho unico (tamaño de barra unico total) - (total_iicl se le resta los espacois) / numero d ebarras
#define HISTOGRAM_CONJ_RECALCULE m_barras_ancho_unico = (m_barras_ancho_total - (m_barras_size - 1)) / m_barras_size;
// Caclulo de valor a pixel
#define HISTOGRAM_CONJ_VALUE_TO_PIXEL(value) m_function_calc_pixel(value, m_fcort, m_fpos, m_fneg)
//--- Activar el autoresize del fontsize para los conjuntos
#define HISTOGRAM_CONJ_ACTIVAR_AUTO_RESIZE
//+------------------------------------------------------------------+
//| Estrcutra base para una barra de histograma |
//+------------------------------------------------------------------+
struct HistogramBar
{
double value;
int x1;
int y1;
int x2;
int y2;
uint clr;
//---
HistogramBar()
: x1(0), x2(0), y1(0), y2(0), value(0.00), clr(clrBlack)
{
}
HistogramBar(int _x1, int _y1, int _x2, int _y2, double v, uint c)
: x1(_x1), x2(_x2), y1(_y1), y2(_y2), value(v), clr(c)
{
}
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//--- Titulo
/*
struct HistogramTituloLabel
{
string value;
string font;
int x;
int y;
uint clr;
int font_size;
ENUM_HISTOGRAM_TITULO_POSICION position;
uint alingement;
int height;
};*/
//+------------------------------------------------------------------+
#endif