Aun así, necesitaré la variable "st" no sólo en Alert, sino también para los cálculos, y al compilar sale el aviso "posible pérdida de datos por conversión de tipo".
Supongo que esto se debe a que resulta ser un número de 10 dígitos, mientras que el valor máximo en int es 2 147 483 647, actualmente tengo 1 380 758 400. ¿Quizás tenga sentido usar el tiempo, y probablemente el Asesor Experto consuma muchos recursos en esta parte?
Quiero dibujar en el lienzo. Para tener una imagen en el lienzo redibujada en OnInit, OnTimer, OnTick y en onChartEvent. Declaro el lienzo CCanvas en variables globales y llamo a canvas.methods donde quiera. Pero el compilador se queja de la variable estática no resuelta 'CCanvas::m_default_colors' (¿qué tiene que ver eso con los colores?)
el código es así
#include <Canvas.mqh>
Lienzo CCanvas;
int OnInit() { //CCanvas canvas; si lo declaro aquí, se dibuja pero luego ¿cómo lo redibujo en OnTick?
Quiero dibujar en el lienzo en Expert Advisor. Quiero que la imagen del lienzo se redibuje en OnInit, OnTimer, OnTick y en onChartEvent. Declaro el lienzo CCanvas en variables globales y llamo a canvas.methods donde quiera. Pero el compilador se queja de una declaración global no resuelta
...
¿Cómo se negocia con el compilador? ¿Hay algún ejemplo con lienzo en EA?
Pues no eres un principiante. Publique el código correctamente.
¡Bueno, no eres un principiante! Publique el código correctamente.
El código está aquí. Pero es mucho peor para profundizar. Y tampoco funciona. Error unresolved static variable 'CCanvas::m_default_colors' ProbeGraph.mq5 21 9
Y un montón de garantías sobre el solapamiento de las variables de altura y anchura. Por lo que entiendo, el compilador no quiere llamar al constructor de la clase CCanvas en las variables globales, sino que quiere llamar al constructor en OnInit. Y luego cómo referirse a una instancia de la clase fuera de OnInit, no entiendo.
Además, antes, el cuerpo de la función Draw estaba dentro de onInit, pero el propio Draw no lo estaba. Todo funcionó, pero dentro de OnInit. Aquí ya he empezado a torcer, intentando pasar una referencia a una instancia de la clase a la función Draw, porque las variables globales no funcionan.
En general, el código está siendo escrito, el problema con la creación de una instancia global de la clase CCanvas.
//+------------------------------------------------------------------+//| ProbeGraph.mq5 |//| Copyright 2013, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2013, MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"1.00"#include <Canvas\Canvas.mqh>
int heigth=500;
int width=500;
int Xcentr=round(width/2);
int Ycentr=round(width/2);
int Rmin=25;
int Rmax=round(heigth/2-1);
#define ArrayS 100000double arrayopen[ArrayS];
CCanvas canvas;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//CCanvas canvas;
canvas.CreateBitmapLabel("ProbeGraph",0,0,width,heigth,COLOR_FORMAT_ARGB_RAW);
//Draw(canvas);//--- create timerEventSetTimer(60);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- destroy timerEventKillTimer();
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---//canvas.Update();
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---
}
//+------------------------------------------------------------------+//| ChartEvent function |//+------------------------------------------------------------------+voidOnChartEvent(constint id,
constlong &lparam,
constdouble &dparam,
conststring &sparam)
{
//---
}
//+------------------------------------------------------------------+int ChartVisibleBars(constlong chart_ID=0)
{
//--- подготовим переменную для получения значения свойстваlong result=-1;
//--- сбросим значение ошибкиResetLastError();
//--- получим значение свойстваif(!ChartGetInteger(chart_ID,CHART_VISIBLE_BARS,0,result))
{
//--- выведем сообщение об ошибке в журнал "Эксперты"Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- вернем значение свойства графикаreturn((int)result);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void Draw(CCanvas *canvas)
{
ArrayInitialize(arrayopen,0);
double r;
double A, Amin=0, Amax=2*3.1415;
int x,y, xprev=0, yprev=0;
//canvas.Erase(ColorToARGB(clrRed, 115));
canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115));
canvas.Circle(Xcentr,Ycentr,Rmax,ColorToARGB(clrBlue, 115));
int Nbars=CopyOpen(Symbol(),Period(),TimeCurrent(),ChartVisibleBars(0),arrayopen); Print("Nbars=",Nbars);
double KursMin=1000000,KursMax=0;
for(int i=0; i<Nbars; i++)
{
if(KursMin>arrayopen[i]) KursMin=arrayopen[i];
if(KursMax<arrayopen[i]) KursMax=arrayopen[i];
};
Print("KursMin=",KursMin); Print("KurMax=",KursMax);
for(int i=0; i<Nbars; i++)
{
if((KursMax-KursMin)>0) r=Rmin+(Rmax-Rmin)*(arrayopen[i]-KursMin)/(KursMax-KursMin);
if(Nbars>0) A=Amin+(Amax-Amin)*i/(Nbars);
x=round(Xcentr-r*MathSin(A));
y=round(Ycentr+r*MathCos(A));
canvas.PixelSetAA(x,y,ColorToARGB(clrGreen,155));
if(xprev>0 && yprev>0) canvas.Line(xprev,yprev,x,y,ColorToARGB(clrBlue,155));
xprev=x; yprev=y;
};
canvas.Update();
}
//+------------------------------------------------------------------+
Virty: Copiado el código sugerido en su totalidad. El error es el mismo que la variable estática no resuelta 'CCanvas::m_default_colors' prob1.mq5 21 9
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Aun así, necesitaré la variable "st" no sólo en Alert, sino también para los cálculos, y al compilar sale el aviso "posible pérdida de datos por conversión de tipo".
Supongo que esto se debe a que resulta ser un número de 10 dígitos, mientras que el valor máximo en int es 2 147 483 647, actualmente tengo 1 380 758 400. ¿Quizás tenga sentido usar el tiempo, y probablemente el Asesor Experto consuma muchos recursos en esta parte?
¿No entiendes el principio de la conversión de tipos? Es así de sencillo:
Quiero dibujar en el lienzo. Para tener una imagen en el lienzo redibujada en OnInit, OnTimer, OnTick y en onChartEvent. Declaro el lienzo CCanvas en variables globales y llamo a canvas.methods donde quiera. Pero el compilador se queja de la variable estática no resuelta 'CCanvas::m_default_colors' (¿qué tiene que ver eso con los colores?)
el código es así
#include <Canvas.mqh>
Lienzo CCanvas;
int OnInit()
{
//CCanvas canvas; si lo declaro aquí, se dibuja pero luego ¿cómo lo redibujo en OnTick?
canvas.CreateBitmapLabel("ProbeGraph", 0, 0, width ,heigth, COLOR_FORMAT_ARGB_RAW);
canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115)); canvas.Update();
}
void OnTick()
¿Cómo puedo negociar con el compilador? ¿Hay algún ejemplo con lona en experto?{
canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115)); canvas.Update();
}
Quiero dibujar en el lienzo en Expert Advisor. Quiero que la imagen del lienzo se redibuje en OnInit, OnTimer, OnTick y en onChartEvent. Declaro el lienzo CCanvas en variables globales y llamo a canvas.methods donde quiera. Pero el compilador se queja de una declaración global no resuelta
...
¿Cómo se negocia con el compilador? ¿Hay algún ejemplo con lienzo en EA?Pues no eres un principiante. Publique el código correctamente.
¡Bueno, no eres un principiante! Publique el código correctamente.
El código está aquí. Pero es mucho peor para profundizar. Y tampoco funciona. Error unresolved static variable 'CCanvas::m_default_colors' ProbeGraph.mq5 21 9
Y un montón de garantías sobre el solapamiento de las variables de altura y anchura. Por lo que entiendo, el compilador no quiere llamar al constructor de la clase CCanvas en las variables globales, sino que quiere llamar al constructor en OnInit. Y luego cómo referirse a una instancia de la clase fuera de OnInit, no entiendo.
Además, antes, el cuerpo de la función Draw estaba dentro de onInit, pero el propio Draw no lo estaba. Todo funcionó, pero dentro de OnInit. Aquí ya he empezado a torcer, intentando pasar una referencia a una instancia de la clase a la función Draw, porque las variables globales no funcionan.
En general, el código está siendo escrito, el problema con la creación de una instancia global de la clase CCanvas.
Hay algo que no entiendo: si el compilador jura, ¿por qué no se corrigen los errores? А?
Hay algo que no entiendo: si el compilador jura, ¿por qué no se corrigen los errores? А?
Copiado el código sugerido completamente. El error es el mismo que la variable estática no resuelta 'CCanvas::m_default_colors' prob1.mq5 21 9
No tengo ningún error. La construcción es la más reciente.
Copiado el código sugerido en su totalidad. El error es el mismo que la variable estática no resuelta 'CCanvas::m_default_colors' prob1.mq5 21 9