Caractéristiques du langage mql5, subtilités et techniques - page 104
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Combien d'instruments sont passés en revue sur le marché ?
61.
Dans la build 1907, les bugs ont miraculeusement disparu. Je ne sais même pas s'il faut revenir en arrière pour les trouver, ou si quelque chose dans cet endroit vient d'être corrigé...
Question sur la construction des indicateurs
#property indicator_chart_window
#property indicator_buffers 12
#property indicator_plots 6
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_type2 DRAW_COLOR_LINE
#property indicator_type3 DRAW_COLOR_LINE
#property indicator_type4 DRAW_COLOR_LINE
#property indicator_type5 DRAW_COLOR_LINE
#property indicator_type6 DRAW_COLOR_LINE
SetIndexBuffer(0,upper_line,INDICATOR_DATA);
SetIndexBuffer(1,upper_line_color,INDICATOR_COLOR_INDEX);
PlotIndexSetString(0,PLOT_LABEL,"Upper Line");
PlotIndexSetInteger(0,PLOT_LINE_STYLE,UpperStyle);
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,UpperWidth);
PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,UpperTrendUp);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,UpperTrendDw);
// ==========
SetIndexBuffer(2,awera_line,INDICATOR_DATA);
SetIndexBuffer(3,awera_line_color,INDICATOR_COLOR_INDEX);
PlotIndexSetString(1,PLOT_LABEL,"Average Line");
PlotIndexSetInteger(1,PLOT_LINE_STYLE,AverageStyle);
PlotIndexSetInteger(1,PLOT_LINE_WIDTH,AverageWidth);
PlotIndexSetInteger(1,PLOT_COLOR_INDEXES,2);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,AverageTrendUp);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,AverageTrendDw);
// ==========
SetIndexBuffer(4,lower_line,INDICATOR_DATA);
SetIndexBuffer(5,lower_line_color,INDICATOR_COLOR_INDEX);
PlotIndexSetString(2,PLOT_LABEL,"Lower Line");
PlotIndexSetInteger(2,PLOT_LINE_STYLE,LowerStyle);
PlotIndexSetInteger(2,PLOT_LINE_WIDTH,LowerWidth);
PlotIndexSetInteger(2,PLOT_COLOR_INDEXES,2);
PlotIndexSetInteger(2,PLOT_LINE_COLOR,0,LowerTrendUp);
PlotIndexSetInteger(2,PLOT_LINE_COLOR,1,LowerTrendDw);
Combien de tampons de couleur peuvent être utilisés ?
Comment les tampons sont-ils liés les uns aux autres ?
#property indicator_buffers 12 // Déclare un total de 12 tampons
#property indicator_plots 6 // constructions graphiques
Est-ce que je comprends bien qu'en spécifiant indicator_type 1 à 6, l'indicateur comprendra que des lignes de couleur doivent être tracées pour 6 graphiques ?
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_type2 DRAW_COLOR_LINE
#property indicator_type3 DRAW_COLOR_LINE
#property indicator_type4 DRAW_COLOR_LINE
#property indicator_type5 DRAW_COLOR_LINE
#property indicator_type6 DRAW_COLOR_LINE
// =====
SetIndexBuffer(0,upper_line,INDICATOR_DATA) ; // Premier tampon pour les données
SetIndexBuffer(1,upper_line_color,INDICATOR_COLOR_INDEX) ; // Deuxième tampon pour les données de couleur
PlotIndexSetString(0,PLOT_LABEL, "Upper Line") ; // Changement des propriétés du premier tampon
PlotIndexSetInteger(0,PLOT_LINE_STYLE,UpperStyle);// changer les propriétés du premier tampon
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,UpperWidth);//change les propriétés du premier tampon
PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);// changer les propriétés du premier tampon
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,UpperTrendUp);// changer les propriétés du premier tampon
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,UpperTrendDw);// changer les propriétés du premier tampon
SetIndexBuffer(2,awera_line,INDICATOR_DATA) ; // Troisième tampon
SetIndexBuffer(3,awera_line_color,INDICATOR_COLOR_INDEX) ; // Quatrième tampon de couleurs
PlotIndexSetString(1,PLOT_LABEL, "Average Line") ; // Modifier les propriétés du tampon pour SetIndexBuffer(2,awera_line,INDICATOR_DATA) ;
PlotIndexSetInteger(1,PLOT_LINE_STYLE,AverageStyle) ; // Change les propriétés du tampon pour SetIndexBuffer(2,awera_line,INDICATOR_DATA) ;
PlotIndexSetInteger(1,PLOT_LINE_WIDTH,AverageWidth) ; // Change les propriétés du tampon pour SetIndexBuffer(2,awera_line,INDICATOR_DATA) ;
PlotIndexSetInteger(1,PLOT_COLOR_INDEXES,2) ; // Change les propriétés du tampon pour SetIndexBuffer(2,awera_line,INDICATOR_DATA) ;
PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,AverageTrendUp) ; // Change les propriétés du tampon pour SetIndexBuffer(2,awera_line,INDICATOR_DATA) ;
PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,AverageTrendDw) ; // Change les propriétés du tampon pour SetIndexBuffer(2,awera_line,INDICATOR_DATA) ;
Question sur la construction des indicateurs
#property indicator_chart_window
#property indicator_buffers 12
#property indicator_plots 6
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_type2 DRAW_COLOR_LINE
#property indicator_type3 DRAW_COLOR_LINE
#property indicator_type4 DRAW_COLOR_LINE
#property indicator_type5 DRAW_COLOR_LINE
#property indicator_type6 DRAW_COLOR_LINE
SetIndexBuffer(0,upper_line,INDICATOR_DATA);
SetIndexBuffer(1,upper_line_color,INDICATOR_COLOR_INDEX);
PlotIndexSetString(0,PLOT_LABEL,"Upper Line");
PlotIndexSetInteger(0,PLOT_LINE_STYLE,UpperStyle);
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,UpperWidth);
PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,UpperTrendUp);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,UpperTrendDw);
// ==========
SetIndexBuffer(2,awera_line,INDICATOR_DATA);
SetIndexBuffer(3,awera_line_color,INDICATOR_COLOR_INDEX);
PlotIndexSetString(1,PLOT_LABEL,"Average Line");
PlotIndexSetInteger(1,PLOT_LINE_STYLE,AverageStyle);
PlotIndexSetInteger(1,PLOT_LINE_WIDTH,AverageWidth);
PlotIndexSetInteger(1,PLOT_COLOR_INDEXES,2);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,AverageTrendUp);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,AverageTrendDw);
// ==========
SetIndexBuffer(4,lower_line,INDICATOR_DATA);
SetIndexBuffer(5,lower_line_color,INDICATOR_COLOR_INDEX);
PlotIndexSetString(2,PLOT_LABEL,"Lower Line");
PlotIndexSetInteger(2,PLOT_LINE_STYLE,LowerStyle);
PlotIndexSetInteger(2,PLOT_LINE_WIDTH,LowerWidth);
PlotIndexSetInteger(2,PLOT_COLOR_INDEXES,2);
PlotIndexSetInteger(2,PLOT_LINE_COLOR,0,LowerTrendUp);
PlotIndexSetInteger(2,PLOT_LINE_COLOR,1,LowerTrendDw);
Combien de tampons de couleur peuvent être utilisés ?
Comment les tampons sont-ils liés les uns aux autres ?
#property indicator_buffers 12 // Déclare un total de 12 tampons
#property indicator_plots 6 // constructions graphiques
Est-ce que je comprends bien qu'en spécifiant indicator_type 1 à 6, l'indicateur comprendra que des lignes de couleur doivent être tracées pour 6 graphiques ?
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_type2 DRAW_COLOR_LINE
#property indicator_type3 DRAW_COLOR_LINE
#property indicator_type4 DRAW_COLOR_LINE
#property indicator_type5 DRAW_COLOR_LINE
#property indicator_type6 DRAW_COLOR_LINE
// =====
SetIndexBuffer(0,upper_line,INDICATOR_DATA) ; // Premier tampon pour les données
SetIndexBuffer(1,upper_line_color,INDICATOR_COLOR_INDEX) ; // Deuxième tampon pour les données de couleur
PlotIndexSetString(0,PLOT_LABEL, "Upper Line") ; // Changement des propriétés du premier tampon
PlotIndexSetInteger(0,PLOT_LINE_STYLE,UpperStyle);// changer les propriétés du premier tampon
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,UpperWidth);//change les propriétés du premier tampon
PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);// changer les propriétés du premier tampon
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,UpperTrendUp);// changer les propriétés du premier tampon
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,UpperTrendDw);// changer les propriétés du premier tampon
SetIndexBuffer(2,awera_line,INDICATOR_DATA) ; // Troisième tampon
SetIndexBuffer(3,awera_line_color,INDICATOR_COLOR_INDEX) ; // Quatrième tampon de couleurs
PlotIndexSetString(1,PLOT_LABEL, "Average Line") ; // Modifier les propriétés du tampon pour SetIndexBuffer(2,awera_line,INDICATOR_DATA) ;
PlotIndexSetInteger(1,PLOT_LINE_STYLE,AverageStyle) ; // Change les propriétés du tampon pour SetIndexBuffer(2,awera_line,INDICATOR_DATA) ;
PlotIndexSetInteger(1,PLOT_LINE_WIDTH,AverageWidth) ; // Change les propriétés du tampon pour SetIndexBuffer(2,awera_line,INDICATOR_DATA) ;
PlotIndexSetInteger(1,PLOT_COLOR_INDEXES,2) ; // Change les propriétés du tampon pour SetIndexBuffer(2,awera_line,INDICATOR_DATA) ;
PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,AverageTrendUp) ; // Change les propriétés du tampon pour SetIndexBuffer(2,awera_line,INDICATOR_DATA) ;
PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,AverageTrendDw) ; // Change les propriétés du tampon pour SetIndexBuffer(2,awera_line,INDICATOR_DATA) ;
Vous feriez mieux de créer une branche séparée pour votre question. Cette branche concerne les fonctionnalités, il ne devrait pas y avoir de discussions ici.
Pour mieux comprendre le principe du dessin, mettez en œuvre la fonctionnalité de manière incrémentielle. Vous avez construit une ligne - vérifiez sa fonctionnalité, ajoutez la suivante.
Chaque série graphique (dans ce cas, une ligne de couleur) ne peut avoir qu'un seul tampon de couleur. Chaque tampon peut contenir plusieurs couleurs.
Dans la version 1907, les bogues ont miraculeusement disparu. Je ne sais même pas s'il faut revenir en arrière pour les trouver, ou si quelque chose à cet endroit vient d'être corrigé...
Les erreurs ont disparu, mais pas les problèmes avec la file d'attente des événements. Après quelques heures, le terminal commence à charger le CPU jusqu'à 95%. Et quelque chose me dit que les tiques sont sautées.
@Slava, est-ce que quelque chose a changé dans ChartEvent dans les builds 19xx ? Le problème est-il reproduit dans vos builds ?
Les erreurs ont disparu, mais pas les problèmes de la file d'attente des événements. Après quelques heures de fonctionnement, le terminal commence à charger le CPU à 95%. Et quelque chose me dit que les tiques sont manquantes.
@Slava, est-ce que quelque chose a changé dans ChartEvent dans les builds 19xx ? Votre problème est-il reproduit ?
Voici à quoi ressemble la surveillance des ressources après 15 heures de travail du terminal (la fréquence minimale d'envoi des événements de l'espion est de 500 ms) :
Bien que la charge du CPU soit proche de 0 pendant plusieurs heures après le démarrage.
Voici à quoi ressemble la surveillance des ressources après 15 heures de fonctionnement du terminal (la vitesse minimale d'envoi des événements du spyware est de 500ms) :
Bien que la charge du CPU soit proche de 0 pendant quelques heures après le démarrage.
Bild 1908 - pas de changement.
La possibilité de remplacer les opérateurs de la structure du type de base permet une certaine flexibilité dans certaines situations.
À titre d'exemple, voici l'une des techniques de tri personnalisé d'un tableau de structures
Résultat
C'est probablement un ancien vélo.
La possibilité de remplacer les opérateurs des structures de type basique permet une certaine flexibilité dans certaines situations.
il y a quelques points. en mql, < opérateur doit nécessairement être une méthode de classe/structure.
Cela signifie qu'elle ne peut pas être définie pour les structures intégrées, ni pour les structures immuables.
Cela peut être amélioré un peu en ajoutant une fonction de comparaison de modèles, qui appellera par défaut l'opérateur <.
UPD : J'écris l'opérateur < partout parce qu'il est généralement surchargé plutôt que >, ce n'est pas strict, mais c'est généralement accepté.il y a quelques points. en mql, l'opérateur < doit être une méthode de la classe/structure.
Cela signifie qu'elle ne peut pas être définie pour les structures intégrées, ni pour les structures immuables.
Résultat
Cette méthode peut être améliorée en ajoutant une fonction de comparaison de modèles qui, par défaut, fait appel à l'opérateur <.
Si vous utilisez typedef, vous devez alors définir une fonction de tri non seulement pour les structures, mais aussi pour les types numériques standard. Ou peut-être que je ne comprends pas ce dont vous parlez.