Test CGraphic - domande e suggerimenti - pagina 9

 
Dennis Kirichenko:

Anatoly, grazie mille! Mi ha aiutato nel punto 1. Sì, ho perso il metodo dell'asseCAxis::MaxGrace(const double value).

Ecco un altro breve esempio:

   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);
 

Applicazione #1827124.


 
Anatoli Kazharski:

Applicazione #1827124.

Il problema è stato risolto come segue:

Squadra disupporto2018.01.15 14:30

L'errore appariva quando si calcolava con sicurezza il resto della divisione nel metodo CAxis::Mod.

C'era un metodo numerico implementato lì, senza usare la funzione MathMod, ma il tuo esempio ha mostrato che la precisione di questo metodo non è la migliore in alcuni casi.

Quindi ho dovuto cambiare questo metodo in:

//+------------------------------------------------------------------+
//| 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;
  }

//---

Il risultato con gli stessi parametri:


 

Inizializzazione nell'esperto CGraphic.

Se si crea un grafico in Expert Advisor, per esempio

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);       
  }

poi quando si cambia un parametro esterno, il grafico scompare periodicamente. Non alla prima volta. Puoi cambiare il parametro 3-5 volte e si perde a caso, e non per sempre. Si può trovare attraverso il cambio di timeframes o il trading automatico (abilitato o disabilitato).

Possiamo fare in modo che non si perda?

 
Photic:

Inizializzazione nell'esperto CGraphic.

Se si crea un grafico in Expert Advisor, per esempio:

poi quando il parametro esterno viene cambiato, il grafico scompare periodicamente. Non dalla prima volta. È possibile cambiare il parametro 3-5 volte e poi si perde casualmente da qualche parte, e non per sempre. Si può trovare cambiando i timeframe o il trading automatico (abilitato - non abilitato).

Puoi fare in modo che non si perda?

Si crea e si distrugge l'oggetto a livello locale nella funzione OnInit.

Crearne uno a livello globale.
 

Il problema è stato risolto reinstallando MT.

Non riesco ad abituarmi al fatto che possa non esserci un errore quando si verifica un errore.

 

Puoi dirmi come cambiare la larghezza della legenda, o rimuovere del tutto lo spazio ad essa assegnato?

 
Come posso evitare che alcune righe siano scritte nella leggenda? Ho solo una linea che sono punti sulla coordinata Y e ho bisogno di fare questi punti in colori diversi, quindi è una linea di colore diverso e mostra le stesse informazioni, anche se è fatta con linee diverse, e ho solo bisogno di mettere informazioni riassuntive su questa linea nella legenda, ci sono molte linee di colore diverso. Come posso fare?
 

E un'altra domanda, perché specifico un colore "Rosso", ma viene visualizzato sul grafico come blu, mentre il Verde viene visualizzato correttamente?

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:

E un'altra domanda, perché specifico un colore "Rosso", ma viene visualizzato sul grafico in blu, mentre il Verde viene visualizzato correttamente?



Ho capito, il colore deve essere impostato come segue

ColorToARGB(Red,256)