Discusión sobre el artículo "Distribuciones Estadísticas en MQL5: tomando lo mejor de R" - página 11
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿Es sólo en el 5? ¿Está previsto para el 4?
Así que todo debería funcionar en MT4. Es un estándar OBJ_BITMAP_LABEL + recurso personalizado.
Por cierto, MT4 compilador es más inteligente que MT5
m_pixels[y*m_width+x]=(r<<16|g<<8|b<<0|255<<24) &0xffffffff;
Y ha aparecido un bug (no funciona en MT5, pero funciona en MT4).
#include <Graphics/Graphic.mqh>
double Func1(double x) { return MathPow(x,2); }
double Func2(double x) { return MathPow(x,3); }
double Func3(double x) { return MathPow(x,4); }
void SaveObjects( const long chart_id = 0, const int SubWindow = -1 )
{
const int Total = ObjectsTotal(chart_id, SubWindow, OBJ_BITMAP_LABEL);
for (int i = 0; i < Total; i++)
{
const string Name = ObjectName(chart_id, i, SubWindow, OBJ_BITMAP_LABEL);
string ResourceName;
if (ObjectGetString(chart_id, Name, OBJPROP_BMPFILE, 0, ResourceName))
ResourceSave(ResourceName, Name + ".bmp"); // MT5 - falso, MT4 - verdadero
}
}
void OnStart()
{
GraphPlot(Func1,Func2,Func3,-2,2,0.05,CURVE_LINES);
SaveObjects();
}
//| Actualizar objeto en pantalla (redibujar)|
//+------------------------------------------------------------------+
void CCanvas::Update(const bool redraw)
{
//--- comprobar
if(m_rcname==NULL)
return;
//--- actualizar recurso y redibujar
if(ResourceCreate(m_rcname,m_pixels,m_width,m_height,0,0,0,m_format) && redraw)
ChartRedraw(this.m_chart_id);
}
Aquí es donde
//| Dibuja la polilínea de Wu|
//+------------------------------------------------------------------+
void CCanvas::PolylineWu(int &x[],int &y[],const uint clr,const uint style=UINT_MAX);
hay divisiones por cero.
Les pido que mejoren CGraphic y CCurve. Son clases débiles. Y es casi imposible heredar de ellas, porque lo que necesitas es privado. Tardé mucho en ponerme a ello, pero tuve que reescribir las clases yo mismo para que funcionaran correctamente.
Quería hacer un gráfico de ticks interactivo - me salió muy crudo (sin reescribir las clases)
void GetPrices( double &Bids[], double &Asks[], const int Count = 100 )
{
MqlTick Ticks[];
const int Amount = CopyTicks(_Symbol, Ticks, COPY_TICKS_INFO, 0, Count);
ArrayResize(Bids, Amount);
ArrayResize(Asks, Amount);
for (int i = 0; i < Amount; i++)
{
Bids[i] = Ticks[i].bid;
Asks[i] = Ticks[i].ask;
}
}
CGraphic* Graphic = new CGraphic;
const string Name = "Graphic" +(string)(GetTickCount() + MathRand());
void OnDeinit( const int Reason )
{
Graphic.Destroy();
delete Graphic;
ChartRedraw();
}
void GraphTicks( const double &Price1[], const double &Price2[] )
{
Graphic.Destroy();
delete Graphic;
Graphic = new CGraphic;
Graphic.Create(0, Name, 0, 0, 0, (int)(ChartGetInteger(0, CHART_WIDTH_IN_PIXELS) * 0.8), (int)ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS));
Graphic.AddCurve(Price1, CURVE_LINES);
Graphic.AddCurve(Price2, CURVE_LINES);
Graphic.PlotAllCurves();
Graphic.Update();
}
void OnTick()
{
double Bids[], Asks[];
GetPrices(Bids, Asks);
GraphTicks(Bids, Asks);
}
Sin DeleteCurve, ChangeCurve, etc.
Les pido que mejoren CGraphic y CCurve. Son clases débiles. Y es casi imposible heredar de ellas, porque lo que necesitas es privado. Tardé mucho en ponerme a ello, pero tuve que reescribir las clases yo mismo para que funcionaran correctamente.
Quería hacer un gráfico de ticks interactivo - me salió muy crudo (sin reescribir las clases)
void GetPrices( double &Bids[], double &Asks[], const int Count = 100 )
{
MqlTick Ticks[];
const int Amount = CopyTicks(_Symbol, Ticks, COPY_TICKS_INFO, 0, Count);
ArrayResize(Bids, Amount);
ArrayResize(Asks, Amount);
for (int i = 0; i < Amount; i++)
{
Bids[i] = Ticks[i].bid;
Asks[i] = Ticks[i].ask;
}
}
CGraphic* Graphic = new CGraphic;
const string Name = "Graphic" +(string)(GetTickCount() + MathRand());
void OnDeinit( const int Reason )
{
Graphic.Destroy();
delete Graphic;
ChartRedraw();
}
void GraphTicks( const double &Price1[], const double &Price2[] )
{
Graphic.Destroy();
delete Graphic;
Graphic = new CGraphic;
Graphic.Create(0, Name, 0, 0, 0, (int)(ChartGetInteger(0, CHART_WIDTH_IN_PIXELS) * 0.8), (int)ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS));
Graphic.AddCurve(Price1, CURVE_LINES);
Graphic.AddCurve(Price2, CURVE_LINES);
Graphic.PlotAllCurves();
Graphic.Update();
}
void OnTick()
{
double Bids[], Asks[];
GetPrices(Bids, Asks);
GraphTicks(Bids, Asks);
}
Sin DeleteCurve, ChangeCurve, etc.
¿Es sólo en el cinco? ¿Hay planes para un cuatro?
Sólo el cinco.
El cuatro está hecho.
¿Es posible hacer una visualización de una pila con un número determinado de bandas, combinada con una cinta de operaciones? Como he mostrado un ejemplo de visualización en otro software.
Es posible dibujar interactivamente cualquier cosa desde hace muchos años. Sólo que nadie (públicamente seguro) lo utiliza.
El código no es corto, sino largo y muy torcido (así como el resultado - parpadeos). La librería necesita ser seriamente mejorada.
Sí, la biblioteca aún está en fase de pruebas.
Vamos a ponerla en orden, permitir la herencia, añadir métodos y deshacernos de los bloqueos debidos a una indexación incorrecta.