Diskussion zum Artikel "Visualisierung! Eine grafische MQL5 Bibliothek ähnlich 'plot' der Sprache R"
Übrigens kann die CircleWu-Funktion vereinfacht und beschleunigt werden:
{
if(r<=0)
return;
//--- vorläufige Berechnungen
double r2=r*r;
double quarter=round(r*M_SQRT1_2);
//--- den Linienstil festlegen
uint prev_style=m_style;
if(style!=UINT_MAX)
LineStyleSet(style);
uint mask=1<<m_style_idx;
//--- zeichnen
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;
}
//--- den vorherigen Zeilenstil einstellen
if(style!=UINT_MAX)
m_style=prev_style;
}
Gute Arbeit geleistet! Danke! Ich war schon dabei, den CircleAA-Algorithmus zu korrigieren
Übrigens, die CircleWu-Funktion kann vereinfacht und beschleunigt werden:
Sie können die Eigenschaften des Diagramms selbst und jeder seiner Funktionen jederzeit ändern. Fügen Sie beispielsweise Beschriftungen zu den Achsen des Diagramms hinzu, ändern Sie den Namen der Kurve und aktivieren Sie den Spline-Approximationsmodus:
#include <Graphics\Graphic.mqh>
//+------------------------------------------------------------------+
//| Skript-Programmstartfunktion|
//+------------------------------------------------------------------+
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 нету. Продолжаю изучать дальше :)
Sie können die Eigenschaften des Diagramms selbst und jeder seiner Funktionen jederzeit ändern. Fügen Sie beispielsweise Beschriftungen zu den Achsen des Diagramms hinzu, ändern Sie den Namen der Kurve und aktivieren Sie den Spline-Approximationsmodus für sie:
{
curve.LinesIsSmooth(true);
У меня метод называется LinesSmooth LineIsSmooth нету. Продолжаю изучать дальше :)
Wie kann ich erreichen, dass beim Neuzeichnen einer Kurve im Diagramm auch die Skala aktualisiert wird?
graphicfirst.Redraw(); и Update()
Die Kurve selbst wird aktualisiert, aber die Skala mit den alten Preisen bleibt bestehen und das Diagramm bewegt sich außerhalb der Grenzen der Leinwand
Ich habe es gefunden, ich muss CalculateMaxMinValues() ausführen :)
Können Sie mir sagen, wie ich ein bereits erstelltes Diagramm korrekt neu zeichnen kann, z. B. wenn ich Werte in Arrays ändere? Redraw() und Update() haben keine Wirkung.
Guten Tag, wie genau haben Sie versucht, das Diagramm neu zu zeichnen?
Wenn Sie nur die Daten für eine bestimmte Kurve ändern müssen, finden Sie hier ein funktionierendes Beispiel:
//+------------------------------------------------------------------+
//| Skript-Programmstartfunktion|
//+------------------------------------------------------------------+
void OnStart()
{
//--- Daten 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};
//--- Daten 2
double x2[]={-10,-10,10,10};
double y2[]={-10,10,-10,10};
//--- Grafik
CGraphic graph;
graph.HistoryNameWidth(80);
graph.Create(0,"Graph",0,30,30,830,430);
//--- Punkte
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);
}
Guten Tag, wie genau haben Sie versucht, das Diagramm neu zu zeichnen?
Wenn Sie nur die Daten für eine bestimmte Kurve ändern wollen, finden Sie hier ein funktionierendes Beispiel:
P.S. Es gibt einen Thread im Forum über die Grafikbibliothek, in dem diese Frage bereits gestellt wurde.Danke, ich habe es schon herausgefunden, ich habe genau das Gleiche gemacht, nur auf einem Array. Sie müssen nur graph.CalculateMaxMinValues() für den Graphen neu berechnen, dann wird die Skala aktualisiert
Wenn man die Methode CGraphic::Redraw(const bool rescale=false) mit dem Parameter true aufruft, werden die Skalen automatisch neu berechnet (kein separater Aufruf von CalculateMaxMinValues notwendig).
Richtig, ich hab's. Danke )
Ist es möglich, zwei oder mehr Skalen auf dem Diagramm zu erstellen - ähnlich wie bei einem Lineal, bei dem die Teilungen in Zentimetern und Zoll angegeben werden, wobei die Werte nur dann angegeben werden, wenn der Punkt zur Erstellung des Diagramms verwendet wurde?

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Visualisierung! Eine grafische MQL5 Bibliothek ähnlich 'plot' der Sprache R :
Beim Studium der Handelslogik hat die visuelle Darstellung durch Grafiken eine großer Bedeutung. Eine Reihe von Programmiersprachen, die in der wissenschaftlichen Gemeinschaft weit verbreitet sind (wie R und Python), verfügen über eine spezielle "plot"-Funktion für die Visualisierung von Daten. Sie ermöglicht das Zeichnen von Linien, Gruppen von Punkten und Histogramme, um Muster darzustellen. In MQL5 können wir das Gleiche mit der Klasse CGraphics erreichen.
Es könnte der Fehler Division durch Null bei dieser Funktion entstehen. Es gibt zwei Wege dieses Problem abzufangen:
[Experts] FpNoZeroCheckOnDivision=1
Autor: MetaQuotes Software Corp.