Test de CGraphic - questions et suggestions - page 9

 
Dennis Kirichenko:

Anatoly, merci beaucoup ! Il a aidé sur le point 1. Oui, j'ai manqué la méthode d'axeCAxis::MaxGrace(const double value).

Voici un autre petit exemple :

   CAxis *x_axis=graph.XAxis();
   x_axis.AutoScale(true);
   x_axis.Min(0);
   x_axis.Max(m_max_data);
   x_axis.MinGrace(0.0);
   x_axis.MaxGrace(0.2);
   x_axis.DefaultStep(m_max_data/10);
 

Demande n° 1827124.


 
Anatoli Kazharski:

Demande n° 1827124.

Le problème a été corrigé comme suit :

Équipe desoutien2018.01.15 14:30

L'erreur apparaissait lors du calcul sécurisé du reste de la division dans la méthode CAxis::Mod.

Il existait auparavant une méthode numérique implémentée à cet endroit, sans utiliser la fonction MathMod, mais votre exemple a montré que la précision de cette méthode n'est pas la meilleure dans certains cas.

J'ai donc dû changer cette méthode en :

//+------------------------------------------------------------------+
//| Calculate the modulus (remainder) in a safe manner so that divide|
//| by zero errors are avoided                                       |
//+------------------------------------------------------------------+
double CAxis::Mod(const double x,const double y)
  {
//--- check 
   if(y==0)
      return(0);
//--- calculate modulus
   return (x>0)? MathMod(x,y): MathMod(x,y)+y;
  }

//---

Le résultat avec les mêmes paramètres :


 

Initialisation dans l'expert CGraphic.

Si vous créez un graphique dans l'Expert Advisor, par ex :

int OnInit()
  {
     
   CGraphic graphic;
   string name ="Graphic";   
   bool ch =graphic.Create(0,name,0,220,20,970,370);

   double x[24]={0,1,2,3,4,5,6,7,8,9,10};
   double y[24]={0,1,2,3,4,5,6,7,8,9,10};
   
   for(int i=0;i<10;i++)
     {
     y[i] =y[i]+Shift;
     }
   CCurve *curve=graphic.CurveAdd(x,y,CURVE_HISTOGRAM);
   curve.HistogramWidth(6);
   curve.Color(Green);
   curve.Name("Curve");
   
   graphic.CurvePlotAll();
   graphic.Update();
//   ChartRedraw();
   
  return(INIT_SUCCEEDED);       
  }

puis lorsque vous modifiez un paramètre externe, le graphique disparaît périodiquement. Pas la première fois. Vous pouvez changer le paramètre 3 à 5 fois et il se perd au hasard, et pas pour toujours. Elle peut être trouvée en changeant de cadre temporel ou par le biais du trading automatisé (activé ou désactivé).

Peut-on faire en sorte qu'il ne soit pas perdu ?

 
Photic:

Initialisation dans l'expert CGraphic.

Si vous créez un graphique dans Expert Advisor, par exemple :

puis, lorsque le paramètre externe est modifié, le graphique disparaît périodiquement. Pas dès la première fois. Il est possible de modifier le paramètre 3 à 5 fois, puis il est aléatoirement perdu quelque part, et pas pour toujours. On peut le trouver en changeant d'horizon temporel ou par le trading automatique (activé - non activé).

Pouvez-vous faire en sorte qu'il ne soit pas perdu ?

Vous créez et détruisez l'objet au niveau local de la fonction OnInit.

Créez-en un au niveau mondial.
 

Le problème a été résolu en réinstallant MT.

Je ne peux pas m'habituer au fait qu'il peut ne pas y avoir d'erreur lorsqu'une erreur se produit.

 

Pouvez-vous me dire comment modifier la largeur de la légende, ou supprimer complètement l'espace qui lui est alloué ?

 
Comment puis-je empêcher que certaines lignes soient écrites dans la légende ? J'ai juste une ligne qui représente des points sur la coordonnée Y et j'ai besoin de faire en sorte que ces points soient de couleurs différentes, de sorte que ce soit une ligne de couleur différente et qu'elle montre les mêmes informations, bien qu'elle soit faite avec des lignes différentes, et j'ai seulement besoin de mettre des informations sommaires sur cette ligne dans la légende, il y a beaucoup de ces lignes de couleurs différentes. Comment puis-je le faire ?
 

Et une autre question, pourquoi est-ce que je spécifie la couleur "Rouge", mais elle est affichée sur le graphique en bleu, alors que le Vert est affiché correctement ?

if(TypeInfo=="TP_FP")
{
   graphicP.HistoryNameSize(Point_K);//Устанавливает размер шрифта имени кривой
   graphicP.HistorySymbolSize(Point_K);//Получить/установить размер символов условных обозначений  

   CCurve *A=graphicP.CurveAdd(X,Y,Green,CURVE_POINTS,N_Model+"("+N+")");//Создает и добавляет кривую на график
   A.PointsFill(true);//Устанавливает флаг, указывающий, нужно ли выполнять заливку для точек, определяющих кривую при отрисовке точками. 
   A.PointsType(POINT_VERTICAL_DASH);//Устанавливает флаг, указывающий на тип точек, использующихся при отрисовке кривой точками.
}

if(TypeInfo=="FN")
{
   //graphicP.HistoryNameSize(1);//Устанавливает размер шрифта имени кривой
   //graphicP.HistorySymbolSize(1);//Получить/установить размер символов условных обозначений  

   CCurve *A=graphicP.CurveAdd(X,Y,Red,CURVE_POINTS,"");//Создает и добавляет кривую на график
   A.PointsFill(false);//Устанавливает флаг, указывающий, нужно ли выполнять заливку для точек, определяющих кривую при отрисовке точками. 
   A.PointsType(POINT_VERTICAL_DASH);//Устанавливает флаг, указывающий на тип точек, использующихся при отрисовке кривой точками.
}



 
Aleksey Vyazmikin:

Et une autre question, pourquoi est-ce que je spécifie une couleur "Rouge", mais elle est affichée sur le graphique en bleu, alors que le Vert est affiché correctement ?



J'ai trouvé la solution, la couleur doit être réglée comme suit

ColorToARGB(Red,256)