Erreurs, bugs, questions - page 2976

 

Soit je suis un idiot, soit les skis ne bougent pas ? mt4 build 1320

double LotStep = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
double Lot=0.7;
PrintFormat("LotStep %f, lot %f, %f, %f %f",LotStep,Lot,Lot/LotStep,MathFloor(Lot/LotStep),(int)double(Lot/LotStep));
//Print
//2021.03.07 23:42:46.507	2021.02.25 07:36:40  EA_CCIcross_v1.0 AUDJPY,M5: LotStep 0.010000, lot 0.070000, 7.000000, 6.000000 6.000000

p/s/ Je comprends que 7 est 6.9999 mais pourquoi alors 0.7 divisé par 0.1 L'impression donne 7.000 et non 6.9999, ce qui est trompeur.
 
Mihail Matkovskij:

Je n'ai pas cherché à savoir en détail pourquoi Kanvas est lent, mais je pense que c'est pour la même raison... Les pixels du tableau ne peuvent pas être modifiés de manière sélective et recevoir une commande de redécoupage. Vous apportez d'abord des modifications au tableau, puis vous devez ResourceCreate. Ce dernier copie les pixels un par un, puis, de la même manière, les affiche un par un, avant de mettre à jour le graphique (ChartRedraw). Combien d'opérations inutiles... Cela permettra en tout cas de tuer la charge du processeur lorsqu'il est occupé à traiter des données utiles. Alors que les étiquettes prennent au moins moins de pixels (et donc une sortie plus rapide). Et puis, leur mécanisme de sortie est entièrement dans le graphique (pas besoin de passer un tableau). Bien que je ne sois pasentièrement sûr de leur algorithme, je pense qu'ils sont plus rapides. J'avais l'habitude de faire un panneau de sortie de texte basé sur un canevas. En testant visuellement le conseiller expert avec un tel panneau dans le testeur, je n'ai pas été très impressionné par le résultat. En plus de la charge propre à l'EA, le redécoupage du panneau était plutôt gênant. Le panneau est constamment mis à jour(ResourceCreate -ChartRedraw) à chaque tick. En même temps, je n'ai jamais remarqué de tels ralentissements avec les étiquettes.

C'est seulement votre imagination.
Bien sûr, rien n'est gratuit, mais kanvas est le moyen le plus rapide d'afficher du texte dans MT5, car kanvas est une base et les commentaires et les étiquettes sont secondaires à kanvas.
Utilisez les non-imprimantes si vous êtes si gourmands en ressources CPU...
 
Mihail Matkovskij :

Je n'ai pas cherché à savoir en détail pourquoi Kanvas est lent, mais je pense que c'est pour la même raison... Les pixels du tableau ne peuvent pas être modifiés de manière sélective et recevoir une commande de redécoupage. Vous apportez d'abord des modifications au tableau, puis vous devez ResourceCreate. Ce dernier copie les pixels un par un, puis, de la même manière, les affiche un par un, avant de mettre à jour le graphique (ChartRedraw). Combien d'opérations inutiles... Cela permettra en tout cas de tuer la charge du processeur lorsqu'il est occupé à traiter des données utiles. Alors que les étiquettes prennent au moins moins de pixels (et donc une sortie plus rapide). Et puis, leur mécanisme de sortie est complètement intégré au graphique (pas besoin de passer un tableau ). Bien que je ne sois pas entièrement sûr de leur algorithme, je pense qu'ils sont plus rapides. J'avais l'habitude de faire un panneau de sortie de texte basé sur un canevas. En testant visuellement l'EA avec un tel panneau dans le testeur, je n'ai pas été très impressionné par le résultat. En plus de la charge propre à l'EA, le redécoupage du panneau était plutôt gênant. Il y a une mise à jour constante ( ResourceCreate - ChartRedraw ) à chaque tick. Je n'ai pas remarqué de tels ralentissements avec les étiquettes.

S'il vous plaît, ne parlez pas de ce que vous ne connaissez pas. @Nikolai Semko a tout à fait raison, et Canvas fonctionne rapidement et sans aucun problème ou défaut.
 

@Ilyas

Bug du compilateur ? Construire 2817.

   const ushort AN_USHORT_CONSTANT = 1;
//---
   ushort avariable = 1;

   switch(avariable)
     {
      case AN_USHORT_CONSTANT :
         Print("Compiler bug ?");
         break;
     }


 
Nikolai Semko:
Il ne semble que pour vous.
Évidemment, rien n'est gratuit, mais kanvas est le moyen le plus rapide d'afficher du texte dans MT5, puisque kanvas est la base et que les commentaires et les étiquettes sont secondaires à kanvas.
Utilisez l'amorce si vous êtes si gourmand pour vos ressources CPU...

Comment savez-vous que les étiquettes sont basées sur canva, si canva lui-même est un add-on de OBJ_BITMAP_LABEL et que l'étiquette est OBJ_LABEL ?

Pendant que je discutais ici sur le forum, j'ai déjà esquissé le panneau de sortie sur les étiquettes, avec un nombre donné de lignes et de colonnes. Et pour la toile, j'ai d'autres tâches, dans mes autres applications. Et cela fonctionne très bien là aussi.

Alain Verleyen:
Ne parlez pas de ce que vous ne connaissez pas. @Nikolai Semko a tout à fait raison, et Canvas fonctionne rapidement et sans aucun problème ou défaut.

Donc vous savez probablement tout ? Alors, partagez vos connaissances ou des liens où vous pouvez lire sur les graphiques dans MetaTrader afin que je sache ce que vous savez aussi ? :)

 
Alain Verleyen:

@Ilyas

Bug du compilateur ? Construire 2817.

Dans MQL, const n'est pas const du tout. En fait, la constance nepeut êtreécrite qu'au travers d'une macro

//const ushort AN_USHORT_CONSTANT      = 1; //(*)
#define         AN_USHORT_CONSTANT ushort(1) //(**)
void main()
{
        int i[AN_USHORT_CONSTANT];      //(1) нормально
        ushort avariable = 1;
        switch(avariable) {
        case AN_USHORT_CONSTANT:        //(2) нормально
                break;
        }
}
void f( int = AN_USHORT_CONSTANT ) {}   //(3) нормально
enum { e = AN_USHORT_CONSTANT };        //(4) нормально    
 
A100 :

Dans MQL, const n'est pas const du tout. En fait, la constance ne peut être écrite que par le biais d'une macro.

C'est une erreur :-D
 
Alain Verleyen:
Oui, c'est donc une erreur :-D

Notez que ce n'est pas dans un seul cas, mais dans tous (1) (2) (3) (4) il est conçu de cette façon : avec (*) il y aura une erreur, mais avec (**) c'est OK. Les constantes ne sont pas considérées comme une entité.

 
A100 :

Notez que ce n'est pas dans un seul cas, mais dans tous (1) (2) (3) (4) il est conçu de cette façon : avec (*) il y aura une erreur, mais avec (**) c'est OK. Les constantes ne sont pas considérées comme une entité.

Je sais. C'est pourquoi je demande aux développeurs de le corriger.
 
Mihail Matkovskij:

Intéressant, comment avez-vous déterminé que les étiquettes sont basées sur le canevas, si le canevas lui-même est un add-on à OBJ_BITMAP_LABEL, et que l'étiquette est OBJ_LABEL ?

Pendant que je discutais ici sur le forum, j'ai déjà esquissé le panneau de sortie sur les étiquettes, avec un nombre donné de lignes et de colonnes. Et pour la toile, j'ai d'autres tâches, dans mes autres applications. Et cela fonctionne très bien là aussi.

Donc vous savez probablement tout ? Alors peut-être partagez-vous vos connaissances ou des liens où vous pouvez lire sur les graphiques dans MetaTrader, afin que je sache ce que vous savez aussi ? :)

MT est écrit en C++. Il suffit donc de comprendre comment GDI est configuré et comment toutes les sorties graphiques en C++ fonctionnent via DC (device context) pour comprendre comment les graphiques fonctionnent dans MT.
Il peut y avoir une certaine confusion avec le concept de Canvas. Ce n'est pas une bibliothèque CCanvas. Fondamentalement, ce concept dans divers langages de programmation peut être simplifié en un simple concept de tableau de pixels (BitMap).
C'est ce que je veux dire quand je parle de kanvas.
Dans MQL, on accède à ce tableau de pixels par l'intermédiaire deOBJ_BITMAP_LABEL et OBJ_BITMAP.
Tous les autres OBJ_, y compris OBJ_LABEL et OBJ_TEXT, sont finalement dérivés de bitmaps. Tout ce que vous voyez à l'écran (pas seulement MT) est en fin de compte l'œuvre deDisplay DC, qui est inextricablement lié à un tableau de pixels, dont chacun occupe 4 octets (RVB et un octet exta supplémentaire qui existait à l'origine pour l'alignement, mais qui est surtout utilisé pour la transparence (canal alpha)).