Discussion de l'article "Visualisez le ! Bibliothèque graphique MQL5 similaire à 'plot' du langage R"
D'ailleurs, la fonction CircleWu peut être simplifiée et accélérée :
{
if(r<=0)
return;
//--- calculs préliminaires
double r2=r*r;
double quarter=round(r*M_SQRT1_2);
//--- définir le style de la ligne
uint prev_style=m_style;
if(style!=UINT_MAX)
LineStyleSet(style);
uint mask=1<<m_style_idx;
//--- dessiner
for(int dx=0; dx<=quarter; dx++)
{
double dy=sqrt(r2-dx*dx);
double alpha1=dy-floor(dy);
double alpha2=1-alpha1;
if((m_style&mask)==mask)
{
PixelTransform4(x,y,dx,(int)(dy)+1,clr,alpha1);
PixelTransform4(x,y,dx,(int)(dy),clr,alpha2);
PixelTransform4(x,y,(int)dy+1,dx,clr,alpha1);
PixelTransform4(x,y,(int)dy,dx,clr,alpha2);
}
mask<<=1;
if(mask==0x1000000)
mask=1;
}
//--- définit le style de la ligne précédente
if(style!=UINT_MAX)
m_style=prev_style;
}
Bon travail ! Merci. J'avais déjà l'intention de corriger l'algorithme CircleAA
D'ailleurs, la fonction CircleWu peut être simplifiée et accélérée :
Vous pouvez modifier les propriétés du graphique lui-même et de chacune de ses fonctions à tout moment. Par exemple, ajoutons des légendes aux axes du graphique, changeons le nom de la courbe et activons le mode d'approximation spline pour celle-ci :
#include <Graphics\Graphic.mqh>
//+------------------------------------------------------------------+
//| Fonction de démarrage du programme de script|
//+------------------------------------------------------------------+
void OnStart()
{
CGraphic graphic;
graphic.Create(0,"Graphic",0,30,30,780,380);
double x[]={-10,-4,-1,2,3,4,5,6,7,8};
double y[]={-5,4,-10,23,17,18,-9,13,17,4};
CCurve *curve=graphic.CurveAdd(x,y,CURVE_LINES);
curve.Name("Example");
curve.LinesIsSmooth(true);
graphic.XAxis().Name("X - axis");
graphic.XAxis().NameSize(12);
graphic.YAxis().Name("Y - axis");
graphic.YAxis().NameSize(12);
graphic.YAxis().ValuesWidth(15);
graphic.CurvePlotAll();
graphic.Update();
DebugBreak();
}
У меня метод называется LinesSmooth LineIsSmooth нету. Продолжаю изучать дальше :)
Vous pouvez modifier les propriétés du graphique lui-même et de chacune de ses fonctions à tout moment. Par exemple, ajoutons des légendes aux axes du graphique, changeons le nom de la courbe et activons le mode d'approximation spline pour celle-ci :
{
curve.LinesIsSmooth(true);
У меня метод называется LinesSmooth LineIsSmooth нету. Продолжаю изучать дальше :)
Comment puis-je faire en sorte que lorsqu'une courbe est redessinée sur le graphique, l'échelle soit également mise à jour ?
graphicfirst.Redraw(); и Update()
La courbe elle-même est mise à jour, mais l'échelle avec les anciens prix reste et le graphique sort des limites du canevas.

J'ai trouvé, je dois faire CalculateMaxMinValues() :)
Pourriez-vous me dire comment redessiner correctement un graphique déjà créé, par exemple, lorsque l'on modifie des valeurs dans des tableaux ? Redraw() et Update() n'ont aucun effet.
Bonjour, comment avez-vous essayé de redessiner le graphique ?
Si vous avez juste besoin de changer les données d'une courbe particulière, voici un exemple qui fonctionne :
//+------------------------------------------------------------------+
//| Fonction de démarrage du programme de script|
//+------------------------------------------------------------------+
void OnStart()
{
//--- données 1
double x1[]={-10,-4,-1,2,3,4,5,6,7,8};
double y1[]={-5,4,-10,23,17,18,-9,13,17,4};
//--- données 2
double x2[]={-10,-10,10,10};
double y2[]={-10,10,-10,10};
//--- graphique
CGraphic graph;
graph.HistoryNameWidth(80);
graph.Create(0,"Graph",0,30,30,830,430);
//--- Points
CCurve *curve=graph.CurveAdd(x1,y1,CURVE_LINES);
graph.CurvePlot(0);
graph.Update();
Sleep(1000);
curve.Update(x2,y2);
graph.Redraw(true);
graph.Update();
Sleep(1000);
}
Bonjour, comment essayez-vous de redessiner le graphique ?
Si vous avez simplement besoin de changer les données d'une courbe particulière, voici un exemple qui fonctionne :
P.S. Il y a un fil de discussion sur le forum concernant la bibliothèque Graphics, dans lequel cette question a déjà été soulevée.Merci, j'ai déjà compris, j'ai fait exactement la même chose, seulement sur un tableau. Il suffit de recalculer graph.CalculateMaxMinValues() pour le graphique également, puis l'échelle est mise à jour.
Si vous appelez la méthode CGraphic::Redraw(const bool rescale=false) avec le paramètre true, les échelles seront recalculées automatiquement (il n'est pas nécessaire d'appeler CalculateMaxMinValues séparément).
D'accord, j'ai compris. Merci)
Est-il possible de créer deux échelles ou plus sur le graphique - comme sur une règle, où les divisions sont indiquées en centimètres et en pouces, les valeurs n'étant données que si le point a été utilisé pour tracer le graphique ?
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Un nouvel article Visualisez le ! Bibliothèque graphique MQL5 similaire à 'plot' du langage R a été publié :
Lors de l'étude de la logique de trading, la représentation visuelle sous forme de graphiques est d’une grande importance. Un certain nombre de langages de programmation populaires dans la communauté scientifique (tels que R et Python) contiennent une fonction spéciale "plot" utilisée pour la visualisation. Elle permet de dessiner des lignes, des distributions de points et des histogrammes pour visualiser les modèles. En MQL5, vous pouvez faire de même en utilisant la classe CGraphics.
Un autre avantage de la bibliothèque est de travailler avec des pointeurs de fonction CurveFunction. En MQL5, les pointeurs de fonctions n'acceptent que les fonctions globales ou statiques. La syntaxe de la fonction doit correspondre entièrement à celle du pointeur. Dans notre cas, CurveFunction est configuré pour que les fonctions prenant un paramètre de type double reçoivent également le double.
Pour construire une courbe à l'aide d'un pointeur vers une fonction, nous devons aussi définir avec précision les valeurs initiale (début) et finale (fin) de l'argument, ainsi que son incrément (pas). Plus la valeur de l'incrément est faible, plus on dispose de points de fonction pour le construire. Pour créer une série de données, utilisez CurveAdd(). Pour tracer une fonction, appelez CurvePlot() ou CurvePlotAll().
Principaux avantages de la bibliothèque Graphics
Le langage MQL5 permet aux développeurs de créer non seulement des robots de trading et des indicateurs techniques, mais aussi d'effectuer des calculs mathématiques complexes à l'aide des bibliothèques ALGLIB, Fuzzy et Statistics. Les données obtenues sont ensuite facilement visualisées avec la bibliothèque Graphics fournie. La plupart des opérations sont automatisées, et la bibliothèque offre des fonctionnalités étendues :
Auteur : MetaQuotes