English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
Une bibliothèque pour créer un graphique via l'API Google Chart

Une bibliothèque pour créer un graphique via l'API Google Chart

MetaTrader 5Exemples | 17 novembre 2021, 15:38
257 0
Евгений
Евгений

Introduction

Le Google Chart permet la création de 11 types de graphiques différents. Les voici:
  1. Graphiques en ligne
  2. Graphiques à barres
  3. Graphiques en nuage
  4. Graphiques en radar
  5. Graphiques en chandeliers
  6. Graphiques de Venn
  7. Code QR
  8. Cartes graphiques
  9. Formules
  10. Graphiques
  11. Diagramme circulaire 

Un ensemble de travail tout à fait suffisant tel que défini dans la description des articles - tout ce que vous devez faire pour obtenir un graphique prêt - est d'envoyer une requête spécialement assemblée au serveur Google. Un exemple simple de la façon de procéder a été implémenté dans l'article Élaboration d'un tableau d'information à l'aide des classes de bibliothèque standard et de l'API Google Chart , mais il ne représente même que d'un dixième de ce que ce service peut fournir. Naturellement, pour assembler correctement une requête, nous devons examiner sa structure et ses mots clés. Par conséquent, dans cet article, nous tenterons de créer une bibliothèque de classes, dont l'utilisation permettra à l'utilisateur de créer rapidement le graphique souhaité, et le placer sur le graphique et mettre à jour dynamiquement les données sur la base desquelles le graphique a été élaboré.

Il faut noter tout de suite qu'il n'y aura pas de calculs massifs du code de la bibliothèque dans cet article, mais à la place, il y aura un certificat joint, créé à l'aide de Doxygen (détails dans l'article Documentation auto-générée pour le code MQL5). Vous y trouverez des descriptions des méthodes publiques des classes de bibliothèque et de la documentation sur les énumérations et les dérogations, qui surviennent lors du processus de création du graphique. 

1. Description des moyens d'obtention et d'affichage des graphiques

Commençons par la fin. Supposons que nous avons formulé la requête correctement. Vous devez maintenant l'envoyer au serveur, enregistrer la réponse dans un fichier et joindre le fichier à un objet graphique sur le graphique afin d'afficher le graphique. Pour travailler avec Internet, nous utilisons les fonctions décrites dans l'article Utilisation de WinInet.dll pour l'échange de données entre terminaux via Internet.

Il y a aussi un petit hic : les composants, qui sont conçus pour afficher des images (balise Image et Graphique) ne fonctionnent qu'avec des images au format BMP, alors que Google Chart ne renvoie que PNG ou GIF. Par conséquent, vous devrez convertir l'image. Celui-ci est identifié par la fonction Convert_PNG(). Le code de la fonction pour obtenir le graphique ressemble à ceci :

bool CDiagram::GetChart()
{
   if(!ObjExist()) {SetUserError(DIAGRAM_ERR_OBJ_NOT_EXIST); return false;}
   string request=CreateRequest();
   //Print(request);
   if(StringLen(request)>2048) {SetUserError(DIAGRAM_ERR_TOO_LARGE_REQUEST); return false;}
   //try to establish a connection
   int rv=InternetAttemptConnect(0);
   if(rv!=0) {SetUserError(DIAGRAM_ERR_INTERNET_CONNECT_FAILED); return false;}
   //initialize the structures
   int hInternetSession=InternetOpenW("Microsoft Internet Explorer", 0, "", "", 0);
   if(hInternetSession<=0) {SetUserError(DIAGRAM_ERR_INTERNET_CONNECT_FAILED); return false;}
   //send request
   int hURL=InternetOpenUrlW(hInternetSession, request, "", 0, 0, 0);
   if(hURL<=0) SetUserError(DIAGRAM_ERR_INTERNET_CONNECT_FAILED);
   //prepare the paths for conversion 
   CString src;
   src.Assign(TerminalInfoString(TERMINAL_PATH));
   src.Append("\MQL5\Files\\"+name+".png");
   src.Replace("\\","\\\\");
   CString dst;
   dst.Assign(TerminalInfoString(TERMINAL_PATH));
   dst.Append("\MQL5\Images\\"+name+".bmp");
   dst.Replace("\\","\\\\");
   DeleteFileW(dst.Str());
   DeleteFileW(src.Str());
   CFileBin chart_file;//file into which the results are recorded
                       //create it
   chart_file.Open(name+".png",FILE_BIN|FILE_WRITE);
   //****************************   
   int dwBytesRead[1];// number of recorded documents
   char readed[1000];//the actual data
                    //read the data, received from the server after the request
   while(InternetReadFile(hURL,readed,1000,dwBytesRead))
     {
      if(dwBytesRead[0]<=0) break;//no data - exit
      chart_file.WriteCharArray(readed,0,dwBytesRead[0]);//record the data into the file
     }
   InternetCloseHandle(hInternetSession);//terminate the connection
   chart_file.Close();//and file
   //convert the file
   if(!Convert_PNG(src.Str(), dst.Str())) SetUserError(DIAGRAM_ERR_IMAGE_CONVERSION_FAILED);
   //attach the file to the graphic object
   switch (obj_type)
   {
      case OBJ_BITMAP: 
      {
         ObjectSetString(chart_ID, name, OBJPROP_BMPFILE, name+".bmp"); 
         return true;
      }
      case OBJ_BITMAP_LABEL:
      {
         ObjectSetString(chart_ID, name, OBJPROP_BMPFILE, 0, name+".bmp"); 
         ObjectSetString(chart_ID, name, OBJPROP_BMPFILE, 1, name+".bmp"); 
         return true;
      }
      default: return false;
   }
   //redraw the chart   
   ChartRedraw();
}
Il convient de noter mon utilisation intensive des classes de la bibliothèque standard lors de la création de la bibliothèque Google Charts, pour laquelle je remercie particulièrement ses développeurs.

2. Aperçu des composants de la bibliothèque Google Charts

La requête au serveur doit commencer comme suit : http://chart.apis.google.com/chart?cht = , vous devez ensuite indiquer le type de graphique, puis tous les autres paramètres. La requête, en plus de l'en-tête, se compose de commandes et de leurs paramètres. Les commandes sont séparées les unes des autres par le symbole "&". Par exemple, la commande & Chtt = Titre définira le mot "Titre" dans l'en-tête du graphique.

Alors on y va. 

2.1 Graphique en ligne

C'est peut-être le graphique le plus fréquemment utilisé, qui dispose du plus grand nombre de propriétés. La création du graphe se fait par la classe CLineXYChart. Exemple:

CLineXYChart chart;
chart.Attach(0, "test diagram");
chart.SetSize(200,200);
double Y[10]={-50, -40, -25, -35, 10, 50, 70, 40, 15, 80};
chart.AddLine(Y, Red, 0, "Test line");
chart.GetChart();

En conséquence, dans le composant nommé "Diagramme de test", vous voyez l'image suivante :

 Figure 1. Un simple exemple de création d'un graphique en courbes

Rappelons qu'un certificat de méthodes de classe se trouve dans le certificat joint, voici quelques exemples de son utilisation.

Compliquez le graphique en ajoutant une autre ligne de l'axe et de la grille :

//create a copy of the class
CLineXYChart chart;
//attach it to the object constructed earlier
chart.Attach(0, "test diagram");
//set the size
chart.SetSize(200,200);
//prepare the data
double Y2[10]={-70, -5, 6, 8, 10, 20, 100, 130, 90, 60};
double Y[10]={-50, -40, -25, -35, 10, 50, 70, 40, 15, 80};
//add lines
chart.AddLine(Y, Red, 0, "Test line");
chart.AddLine(Y2, Blue, 0, "Test line 2");
//axis
chart.SetAxis(DIAGRAM_AXIS_BOTTOM|DIAGRAM_AXIS_LEFT, -1, 0, 0, 10, 0);
//and grid
chart.SetGrid();
//obtain the chart
chart.GetChart();

Maintenant,le graphique prend la même vue que sur l'image ci-dessous. Il convient de noter une caractéristique importante - la méthode GetChart () doit être appelée après les autres méthodes, car c'est la méthode qui reçoit le graphique.

 Figure 2. Un exemple plus complexe de graphique linéaire

Et ce n'est pas tout. Ajoutez les marqueurs, le titre, la légende et le remplissage :

//create a class copy
CLineXYChart chart;
//attach it to the object created earlier
chart.Attach(0, "test diagram");
//set the size
chart.SetSize(500,300);
//prepare the data
double Y2[10]={-70, -5, 6, 8, 10, 20, 100, 130, 90, 60};
double Y[10]={-50, -40, -25, -35, 10, 50, 70, 40, 15, 80};
//add lines
int first_line=chart.AddLine(Y, Red, 0, "Test line");
int second_line=chart.AddLine(Y2, Blue, 0, "Test line 2");
//axis
chart.SetAxis(DIAGRAM_AXIS_BOTTOM|DIAGRAM_AXIS_LEFT, -1, 0, 0, 10, 0);
//grid
chart.SetGrid();
//legend
chart.ShowLegend();
//title
chart.SetTitle("My Chart", Green, 15);
//filling
chart.SetFill(Linen);
//markers
chart.SetLineMarker(first_line, DIAGRAM_LINE_MARKERS_DIAMOND, BlueViolet, 10);
chart.SetLineMarker(second_line, DIAGRAM_LINE_MARKERS_CROSS, YellowGreen, 15);
//obtain the chart
chart.GetChart();

Pour la configuration des propriétés typiques d’une ligne particulière, nous utilisons des identifiants (first_line et second_line), qui sont ensuite transmis aux méthodes appropriées. 

Figure 3. Un exemple encore plus b complexe de graphique en courbes

Mais même ce n'est pas la fin. Il est possible d'ajouter des balises à la ligne, de remplir la zone sous la ligne et entre les lignes, de mettre les lignes à l'échelle et d'ajouter une ligne au petit axe :

//create a class copy
CLineXYChart chart;
//attach it to the object created earlier
chart.Attach(0, "test diagram");
//set the size
chart.SetSize(700,400);
//prepare the data
double Y3[10]={1000, 1200, 1800, 1700, 1300, 900, 700, 750, 800, 600};
double X3[10]={2, 4, 5, 6, 10, 15, 17, 20, 21, 23};
double Y2[10]={-70, -5, 6, 8, 10, 20, 100, 130, 90, 60};
double Y[10]={-50, -40, -25, -35, 10, 50, 70, 40, 15, 80};
//add lines
int first_line=chart.AddLine(Y, Red, 0, "Test line");
int second_line=chart.AddLine(Y2, Blue, 0, "Test line 2");
int third_line=chart.AddLine(Y3, X3, Green, 0, "Test line 3");
//major axis
chart.SetAxis(DIAGRAM_AXIS_BOTTOM|DIAGRAM_AXIS_LEFT, -1, 0, 0, 10, 0);
//minor axis 
chart.SetAxis(DIAGRAM_AXIS_RIGHT|DIAGRAM_AXIS_TOP, third_line, 0, Red, 15, 2);
//grid
chart.SetGrid();
//legend
chart.ShowLegend(DIAGRAM_LEGEND_POSITION_BOTTOM_HORIZONTAL);
//title
chart.SetTitle("My Chart", Green, 15);
//filling in the chart
chart.SetFill(Linen, Silver);
//markers
chart.SetLineMarker(first_line, DIAGRAM_LINE_MARKERS_DIAMOND, BlueViolet, 10);
chart.SetLineMarker(second_line, DIAGRAM_LINE_MARKERS_CROSS, YellowGreen, 15);
//set the filling between the two lines
chart.SetLineFilling(first_line, Lime , second_line);
//add tags
chart.AddLabel(first_line, DIAGRAM_LABEL_TYPE_FLAG, 5, "Flag", Red, 15); 
chart.AddLabel(second_line, DIAGRAM_LABELS_TYPE_ANNOTATION, 3, "annotation", Blue, 25);
//slightly compress the lines (by 20%)
chart.SetLineScaling(second_line, false, 20);
//attach the third line to the minor axis
chart.SetLineScaling(third_line, true, 20);
//obtain the chart
chart.GetChart();

 Figure 4. Toutes les fonctionnalités du graphique en courbes

Si vous souhaitez mettre à jour dynamiquement les données du graphique, vous pouvez utiliser la méthode SetLineData (), ou supprimer complètement la ligne avec les anciennes données, en utilisant DeleteLine (), et en créer une nouvelle. Cependant, la première méthode est préférable.

2.2 Graphique à barres

En d'autres termes, il s'agit d'un graphique à barres. La classe CBarChart est responsable de sa création. Cela diffère du CLineXYChart en raison de l'absence de marqueurs, du besoin d’indiquer un ensemble de données pour l'axe X et de la présence de certaines fonctionnalités, uniques aux graphiques de ce type. Dans tous les autres aspects, tout est le même que dans le CLineXYChart.

Exemple:

CBarChart chart;
chart.Attach(0, "test diagram");
//set the size
chart.SetSize(700,400);
//prepare the data
double Y3[10]={100, 120, 18, 17, 13, 9, 70, 75, 80, 60};
double Y2[10]={70, 5, 6, 8, 10, 20, 100, 130, 90, 60};
double Y[10]={50, 40, 25, 35, 10, 50, 70, 40, 15, 80};
//add lines
int first_line=chart.AddLine(Y, Red, 0, "Test bar 1");
int second_line=chart.AddLine(Y2, Blue, 0, "Test bar 2");
int third_line=chart.AddLine(Y3, Green, 0, "Test bar 3");
//major axis
chart.SetAxis(DIAGRAM_AXIS_BOTTOM|DIAGRAM_AXIS_LEFT, -1, 0, 0, 10, 0);
//grid
chart.SetGrid();
//legend
chart.ShowLegend();
//title
chart.SetTitle("My Chart", Green, 15);
//chart filling
chart.SetFill(Linen, Silver);
//obtain the chart
chart.GetChart(); 

 

Figure 5. Un exemple de graphique à barres

Veuillez noter que nous avons trois ensembles de données et que les barres se trouvent les unes au-dessus des autres dans un ordre optimal pour l'affichage. Cependant, il existe une autre façon de regrouper les colonnes. Il est défini à l'aide de la méthode SetGrouped() :

 / / Set the grouping  chart.SetGrouped (true);

 Figure 6. Exemple d'un graphique à barres avec une manière différente de grouper les colonnes

Comme vous pouvez le constater, les colonnes ne sont désormais plus situées les unes au-dessus des autres, mais plutôt par ordre de création.

2.3 Graphique circulaire

La classe CPieChart crée un graphique circulaire Vous pouvez créer un graphique bi-dimensionnel ainsi qu’un tri-dimensionnel.

CPieChart chart;
chart.Attach(0, "test diagram");
//set the size
chart.SetSize(300,200);
//add sections
chart.AddPieSlice(10, 0, Red, 0, "Test slice 1");
chart.AddPieSlice(20, 0, Green, 0, "Test slice 2");
chart.AddPieSlice(30, 0, Blue, 0, "Test slice 3");
//legends
chart.ShowLegend();
//title
chart.SetTitle("My Chart", Green, 15);
//display mode - 2D
chart.SetPieType(true);
//obtain the chart
chart.GetChart();  

Figure 7. Exemples 2D et 3D de graphiques circulaires

Figure 7. Exemples 2D et 3D de graphiques circulaires

Le type d'affichage (2D ou 3D) est établi en appelant la méthode SetPieType(). Une autre fonctionnalité utile est la possibilité de définir plusieurs anneaux, cependant dans ce cas, seul le mode 2D sera disponible. Pour définir le deuxième anneau, spécifiez le paramètre dimensionnel de la méthode AddPieSlice () comme différent de zéro :

//add the second ring
chart.AddPieSlice(50, 1, YellowGreen, 0, "Test ring 1");
chart.AddPieSlice(20, 1, Magenta, 0, "Test ring 2");
chart.AddPieSlice(70, 1, Maroon, 0, "Test ring 3");

 Figure 8. Graphique circulaire concentrique

Notez que le tableau ci-dessus contient également des balises de secteur distantes. Ils sont définis par la méthode SetPieLabels() et peuvent remplacer une légende. Cependant, il n’y a pas d’ inconvénient - la taille des balises ne s'adapte pas automatiquement à la taille du graphique, ce qui peut entraîner leur débordement au-delà de ses limites. Dans ce cas, vous devez augmenter la largeur du graphique. Le réglage des grilles, des axes, des marqueurs et des échelles n'est pas assuré par ce type de graphique. Le secteur peut être supprimé par la méthode DeleteLine().

2.4 Graphique en radar

La classe CRadarChart crée des graphiques radar. Elle n'a aucune différence avec la classe CLineXYChart. Toutes ses méthodes sont disponibles dans CRadarChart :

CRadarChart chart;
chart.Attach(0, "test diagram");
//set the size
chart.SetSize(300,300);
//add lines
double Y3[10]={100, 120, 18, 17, 13, 9, 70, 75, 80, 60};
double Y2[10]={70, 5, 6, 8, 10, 20, 100, 130, 90, 60};
double Y[10]={50, 40, 25, 35, 10, 50, 70, 40, 15, 80};
int first_line=chart.AddLine(Y, Red, 0, "Test line");
int second_line=chart.AddLine(Y2, Blue, 0, "Test line 2");
int third_line=chart.AddLine(Y3, Green, 0, "Test line 3");
//set the filling between the two lines
chart.SetLineFilling(first_line, Lime , second_line);
//markers
chart.SetLineMarker(first_line, DIAGRAM_LINE_MARKERS_CIRCLE, BlueViolet, 10);
chart.SetLineMarker(second_line, DIAGRAM_LINE_MARKERS_DIAMOND, YellowGreen, 15);
//title
chart.SetTitle("My Chart", Green, 15);
//grid
chart.SetGrid();
//legend
chart.ShowLegend(DIAGRAM_LEGEND_POSITION_BOTTOM_HORIZONTAL);
//obtain the chart
chart.GetChart();

Figure 9. Graphiques en radar

2.5 Graphique en chandeliers

La classe CCandleChart crée le graphique en chandeliers. Les chandeliers sont ajoutés par la méthode AddCandles() :

CCandleChart chart;
chart.Attach(0, "test diagram");
//set the size
chart.SetSize(300,300);
//add 10 candlesticks to the current chart
double Open[10], Close[10], High[10], Low[10];
CopyOpen(Symbol(), PERIOD_CURRENT, 0, 10, Open);
CopyClose(Symbol(), PERIOD_CURRENT, 0, 10, Close);
CopyHigh(Symbol(), PERIOD_CURRENT, 0, 10, High);
CopyLow(Symbol(), PERIOD_CURRENT, 0, 10, Low);
chart.AddCandles(Open, Close, High, Low);
//title
chart.SetTitle(Symbol(), Green, 15);
//grid
chart.SetGrid();
//major axis
chart.SetAxis(DIAGRAM_AXIS_LEFT, -1, 0, 0, 10, 4);
//obtain the chart
chart.GetChart();

 Figure 10. Graphique en chandeliers

Les marqueurs, les légendes et les étiquettes ne sont pas disponibles pour ce type de graphiques. 

2.6 Formules

La classe CFormulaChart vous permet de créer une formule. La formule est passée sous forme de ligne dans le langageTeX à la méthode SetFormulaString() :

CFormulaChart chart;
chart.Attach(0, "test diagram");
//set the size
chart.SetSize(300,75);
//add the formula
chart.SetFormulaString("x=-b\pm\sqrt{b^2-4ac}\over(2a)");
//its color
chart.SetFormulaColor(Blue);
//title
chart.GetChart();

Figure 11. Formules

Le remplissage peut également être défini à l'aide de la méthode SetFill(). Aucune fonctionnalité supplémentaire n'est prise en charge.

2.7 Graphiques

La classe CGraphChart crée le graphique. Les méthodes AddNode () et AddEdge () ajoutent des nœuds et des arêtes au graphique :

CGraphChart chart;
chart.Attach(0, "test diagram");
//set the size
chart.SetSize(300,220);
//add nodes and edges
int A=chart.AddNode("A");
int B=chart.AddNode("B");
int C=chart.AddNode("C");
int D=chart.AddNode("D");
chart.AddEdge(A,B);
chart.AddEdge(B,C);
chart.AddEdge(C,D);
chart.AddEdge(A,C);
//set the engine
chart.SetEngine(DIAGRAM_GRAPH_ENGINE_NEATO);
//and arrows
chart.SetGraphType(false);
//title
chart.GetChart();

  

Figure 11. Graphes

La méthode SetEngine() définit un type spécifique de moteur graphique, utilisé dans la création du graphe. Vous pouvez expérimenter cela par vous-même. Les méthodes DeleteNode () et DeleteEdge () suppriment les nœuds et les arêtes du graphique. 

2.8 Graphiques de Venn

La classe CVennChart crée un graphique de Venn.

La méthode SetCircleSizes() détermine la taille des ensembles, SetCircleColors(), leur couleur, SetVennLegend() leurs signatures, et SetIntersections() les dimensions des intersections :

CVennChart chart;
chart.Attach(0, "test diagram");
//set the size
chart.SetSize(300,220);
//add sets(set their sizes)
chart.SetCircleSizes(100, 90, 80);
//color
chart.SetCircleColors(Yellow, Lime, Maroon);
//signatures
chart.SetVennLegend("EURUSD", "USDJPY", "EURJPY");
//dimensions of intersections
chart.SetIntersections(30,30,30,10);
//legend
chart.ShowLegend();
//title
chart.SetTitle("Venn", Green, 15);
//title
chart.GetChart();

Figure 11. Graphiques de Venn

Code QR 

La classe CQRCode permet de créer un QR-code :

CQRCode chart;
chart.Attach(0, "test diagram");
//set the size
chart.SetSize(300,220);
//add data
chart.SetData("test data");
//set the level of error correction during coding
chart.SetErrCorrection(DIAGRAM_QRCODE_ERROR_CORRECTION_LOW);
//and the coding
chart.SetEncoding(DIAGRAM_QRCODE_ENCODING_UTF_8);
//title
chart.GetChart();

 Figure 11. Code- QR  

La méthode SetData() définit les données sur la base desquelles le code sera créé. Les méthodes SetErrCorrection() et SetEncoding() vont définir la correction des erreurs lors du codage et le codage.

2.10 Cartes graphiques

La classe CMapChart va créer une carte du monde ou d'un continent, avec la possibilité de sélectionner les pays nécessaires :

CMapChart chart;
chart.Attach(0, "test diagram");
//set the size
chart.SetSize(440,220);
//set the region
chart.SetZoomArea(DIAGRAM_MAP_AREA_AFRICA);
//and the country
chart.SetCountries("DZEGMGAOBWNGCFKECGCVSNDJTZGHMZZM");
//color
chart.SetColors(White, Red, Blue);
//color of the ocean - blue (2nd parameter)
chart.SetFill(Gray, Blue);
//title
chart.GetChart();

Figure 11. Carte d’Afrique

Les codes des pays nécessaires sont transmis à la méthode SetCountries() au format ISO 3166-1-alpha-2 format. SetZoomArea() définit le continent de la carte et SetColors() la couleur des pays.

2.11 Graphiques à nuage

La classe CScatterChart crée des graphiques en nuage. La seule différence avec CLineXYChart est la façon dont les données sont indiquées.

Ici, afin d’indiquer les données, nous utilisons la méthode AddLineScatter(), dans laquelle les coordonnées des points et leurs dimensions sont transmises :

//create a class copy
CScatterChart chart;
//attach it to the object created earlier
chart.Attach(0, "test diagram");
//set the size
chart.SetSize(300,300);
//prepare the data
double Y2[10]={70, 5, 6, 8, 10, 20, 100, 130, 90, 60};
double X2[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
double Z2[10]={90, 80, 75, 90, 10, 700, 80, 90, 90, 88};
double Y[10]={50, 40, 25, 35, 10, 50, 70, 40, 105, 80};
double X[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
double Z[10]={60, 90, 90, 80, 70, 90, 73, 80, 77, 100};
//add the scatters
int first_line=chart.AddLineScatter(Y, X, Z, Red, 0, "scatters 1");
int second_line=chart.AddLineScatter(Y2, X2, Z2, Blue, 0, "scatters 2");
//major axis
chart.SetAxis(DIAGRAM_AXIS_BOTTOM|DIAGRAM_AXIS_LEFT, -1, 0, 0, 10, 0);
//grid
chart.SetGrid();
//legend
chart.ShowLegend(DIAGRAM_LEGEND_POSITION_BOTTOM_HORIZONTAL);
//title
chart.SetTitle("My Chart", Green, 15);
//filling the chart
chart.SetFill(Linen, Silver);
//obtain the chart
chart.GetChart();

 

 Figure 11. Graphiques en nuage

Conclusion

J'espère, cher lecteur, que cette bibliothèque vous facilitera la vie dure du trader. Je voudrais ajouter que l'utilisation de la POO simplifie considérablement la création de projets à grande échelle, les rend plus flexibles et conviviaux.

Bonne chance.

Pièces jointes


Nom de fichier
Description
1
 google_charts.mqh  Bibliothèque, placée dans MQL5 \\ Inclure
2
 google_charts_test.mq5  Script de test, placé dans MQL5 \\ Script
3
 google_charts_help.zip  Archiver avec la documentation générée par Doxygen dans les classes de la bibliothèque
4  Libraries.zip  Archiver avec les bibliothèques et leurs codes sources, décompresser dans MQL5\\Libraries (bibliothèques écrites en C++ Builder)

Traduit du russe par MetaQuotes Ltd.
Article original : https://www.mql5.com/ru/articles/114

Fichiers joints |
google_charts.mqh (122.64 KB)
libraries.zip (184.93 KB)
Une solution sans DLL pour communiquer entre les terminaux MetaTrader 5 à l'aide de Canaux Nommés Une solution sans DLL pour communiquer entre les terminaux MetaTrader 5 à l'aide de Canaux Nommés
L'article décrit comment implémenter la communication inter-processus entre les terminaux clients MetaTrader 5 à l'aide de Canaux Nommés. Pour l'utilisation des Canaux Nommés, la classe CNamedPipes est élaborée. Pour tester son utilisation et mesurer le débit de la connexion, l'indicateur de coche, les scripts serveur et client sont présentés. L'utilisation de Canaux Nommés est suffisante pour les offres en temps réel.
L'utilisation de ORDER_MAGIC pour trader avec différents Expert Advisors sur un seul instrument L'utilisation de ORDER_MAGIC pour trader avec différents Expert Advisors sur un seul instrument
Cet article examine les questions du codage de l’information, en utilisant l’identification magique, ainsi que la division, l’assemblage et la synchronisation du trading automatique des différents Expert Advisors. Cet article sera intéressant pour les débutants, ainsi que pour les traders les plus expérimentés, car il traite la question des positions virtuelles, ce qui peut être utile dans l’implémentation des systèmes complexes de synchronisation d’Expert Advisors et de diverses stratégies.
Rédaction d'un Expert Advisor à l'aide de l'approche de programmation  orientée-objet MQL5 Rédaction d'un Expert Advisor à l'aide de l'approche de programmation orientée-objet MQL5
Cet article est axé sur l'approche orientée-objet pour faire ce que nous avons fait dans l'article « Guide étape par étape pour écrire un Expert Advisor en MQL5 pour les débutants » : créer un Expert Advisor simple. La plupart des gens pensent que c'est difficile, mais je tiens à vous rassurer qu'au moment où vous aurez fini de lire cet article, vous serez en mesure d'écrire votre propre Expert Advisor qui est orienté-objet.
Les Principes du Calcul Économique des Indicateurs Les Principes du Calcul Économique des Indicateurs
Les appels aux utilisateurs et les indicateurs techniques occupent très peu de place dans le code de programme des systèmes de trading automatisés. Souvent, il s’agit simplement de quelques lignes de code. Mais il arrive souvent ces quelques lignes de code utilisant plus de temps, qui doivent être consacrées au test de l’Expert Advisor. Par conséquent, tout ce qui est lié aux calculs de données dans un indicateur doit être considéré de manière beaucoup plus approfondie qu’il n’y paraît à première vue. Cet article en parlera précisément