Pourtant, je vais avoir besoin de la variable "st" non seulement dans Alert, mais aussi pour les calculs, et lors de la compilation, l'avertissement "perte de données possible due à la conversion de type" apparaît.
Je suppose que c'est parce qu'il s'agit d'un nombre à 10 chiffres, alors que la valeur maximale en int est 2 147 483 647, j'ai actuellement 1 380 758 400. Il est peut-être judicieux d'utiliser le long terme, et le conseiller expert consommera probablement beaucoup de ressources dans cette partie ?
Je veux dessiner sur la toile. Pour faire redessiner une image sur le canevas dans OnInit, OnTimer, OnTick et dans onChartEvent. Je déclare CCanvas canvas dans des variables globales et j'appelle canvas.methods partout où je veux. Mais le compilateur se plaint d'une variable statique non résolue "CCanvas::m_default_colors" (qu'est-ce que cela a à voir avec les couleurs ?).
le code est comme ceci
#include <Canvas\Canvas.mqh>
CCanvas canvas ;
int OnInit() { //CCanvas canvas ; si je le déclare ici, il se dessine mais alors comment le redessiner dans OnTick ?
Je veux dessiner sur la toile dans Expert Advisor. Je veux que l'image sur le canevas soit redessinée dans OnInit, OnTimer, OnTick et dans onChartEvent. Je déclare CCanvas canvas dans des variables globales et j'appelle canvas.methods partout où je veux. Mais le compilateur se plaint de la déclaration globale non résolue
...
Comment négocier avec le compilateur ? Existe-t-il un exemple de canevas dans l'EA ?
Eh bien, vous n'êtes pas un débutant ! Publiez le code correctement !
Eh bien, vous n'êtes pas un débutant ! Publiez le code correctement !
Le code est juste là. Mais c'est bien pire à creuser. Et ça ne marche pas non plus. Erreur de variable statique non résolue 'CCanvas::m_default_colors' ProbeGraph.mq5 21 9
Et un tas de mandats concernant le chevauchement des variables de hauteur et de largeur. D'après ce que je comprends, le compilateur ne veut pas appeler le constructeur de la classe CCanvas dans les variables globales, mais veut appeler le constructeur à OnInit. Et puis comment faire référence à une instance de la classe en dehors de OnInit, je ne comprends pas.
De plus, avant, le corps de la fonction Draw était dans onInit, mais le Draw lui-même ne l'était pas. Tout a fonctionné, mais dans OnInit. J'ai déjà commencé à me tortiller ici, en essayant de passer une référence à une instance de la classe dans la fonction Draw, car les variables globales ne fonctionnent pas.
En général, le code est en cours d'écriture, le problème étant de créer une instance globale de la classe 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();
}
//+------------------------------------------------------------------+
J'ai copié le code proposé dans son intégralité. L'erreur est la même que pour la variable statique non résolue 'CCanvas::m_default_colors' prob1.mq5 21 9
Virty: J'ai copié entièrement le code suggéré. L'erreur est la même que pour la variable statique non résolue 'CCanvas::m_default_colors' prob1.mq5 21 9
Je n'ai pas d'erreurs. La construction est la plus récente.
Virty: J'ai copié le code proposé dans son intégralité. L'erreur est la même que pour la variable statique non résolue 'CCanvas::m_default_colors' prob1.mq5 21 9
L'erreur se trouve donc dans votre fichier prob1.mq5 .
Pourtant, je vais avoir besoin de la variable "st" non seulement dans Alert, mais aussi pour les calculs, et lors de la compilation, l'avertissement "perte de données possible due à la conversion de type" apparaît.
Je suppose que c'est parce qu'il s'agit d'un nombre à 10 chiffres, alors que la valeur maximale en int est 2 147 483 647, j'ai actuellement 1 380 758 400. Il est peut-être judicieux d'utiliser le long terme, et le conseiller expert consommera probablement beaucoup de ressources dans cette partie ?
Ne comprenez-vous pas le principe de la conversion de type? C'est aussi simple que cela :
Je veux dessiner sur la toile. Pour faire redessiner une image sur le canevas dans OnInit, OnTimer, OnTick et dans onChartEvent. Je déclare CCanvas canvas dans des variables globales et j'appelle canvas.methods partout où je veux. Mais le compilateur se plaint d'une variable statique non résolue "CCanvas::m_default_colors" (qu'est-ce que cela a à voir avec les couleurs ?).
le code est comme ceci
#include <Canvas\Canvas.mqh>
CCanvas canvas ;
int OnInit()
{
//CCanvas canvas ; si je le déclare ici, il se dessine mais alors comment le redessiner dans OnTick ?
canvas.CreateBitmapLabel("ProbeGraph", 0, 0, width ,heigth, COLOR_FORMAT_ARGB_RAW) ;
canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115)) ; canvas.Update() ;
}
void OnTick()
Comment négocier avec le compilateur ? Existe-t-il un exemple avec la toile en expert ?{
canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115)) ; canvas.Update() ;
}
Je veux dessiner sur la toile dans Expert Advisor. Je veux que l'image sur le canevas soit redessinée dans OnInit, OnTimer, OnTick et dans onChartEvent. Je déclare CCanvas canvas dans des variables globales et j'appelle canvas.methods partout où je veux. Mais le compilateur se plaint de la déclaration globale non résolue
...
Comment négocier avec le compilateur ? Existe-t-il un exemple de canevas dans l'EA ?Eh bien, vous n'êtes pas un débutant ! Publiez le code correctement !
Eh bien, vous n'êtes pas un débutant ! Publiez le code correctement !
Le code est juste là. Mais c'est bien pire à creuser. Et ça ne marche pas non plus. Erreur de variable statique non résolue 'CCanvas::m_default_colors' ProbeGraph.mq5 21 9
Et un tas de mandats concernant le chevauchement des variables de hauteur et de largeur. D'après ce que je comprends, le compilateur ne veut pas appeler le constructeur de la classe CCanvas dans les variables globales, mais veut appeler le constructeur à OnInit. Et puis comment faire référence à une instance de la classe en dehors de OnInit, je ne comprends pas.
De plus, avant, le corps de la fonction Draw était dans onInit, mais le Draw lui-même ne l'était pas. Tout a fonctionné, mais dans OnInit. J'ai déjà commencé à me tortiller ici, en essayant de passer une référence à une instance de la classe dans la fonction Draw, car les variables globales ne fonctionnent pas.
En général, le code est en cours d'écriture, le problème étant de créer une instance globale de la classe CCanvas.
Une chose que je n'arrive pas à comprendre : si le compilateur jure, pourquoi les erreurs ne sont-elles pas corrigées ? А ?
Une chose que je n'arrive pas à comprendre : si le compilateur jure, pourquoi les erreurs ne sont-elles pas corrigées ? А ?
J'ai copié entièrement le code suggéré. L'erreur est la même que pour la variable statique non résolue 'CCanvas::m_default_colors' prob1.mq5 21 9
Je n'ai pas d'erreurs. La construction est la plus récente.
J'ai copié le code proposé dans son intégralité. L'erreur est la même que pour la variable statique non résolue 'CCanvas::m_default_colors' prob1.mq5 21 9