forked from nique_372/GrapichsByLeo
150 lines
No EOL
12 KiB
MQL5
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 ¶ms[], double value1, double value2);
|
|
namespace HistogramFuncionCompare
|
|
{
|
|
__forceinline bool HistValueIsMayor(MqlParam ¶ms[], 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 |