Teste CGraphic - perguntas e sugestões - página 9

 
Dennis Kirichenko:

Anatoly, muito obrigado! Isso ajudou no ponto 1. Sim, eu perdi oCAxis::MaxGrace(const duplo valor) método do eixo.

Aqui está outro pequeno exemplo:

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

Aplicação #1827124.


 
Anatoli Kazharski:

Aplicação #1827124.

O problema foi resolvido da seguinte forma:

Equipe deapoio2018.01.15 14:30

O erro apareceu ao calcular com segurança o restante da divisão no método CAxis::Mod.

Costumava haver um método numérico implementado ali, sem utilizar a função MathMod, mas seu exemplo mostrou que a precisão deste método não é a melhor em alguns casos.

Portanto, tive que mudar este método para:

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

//---

O resultado com os mesmos parâmetros:


 

Inicialização no especialista em CGraphic.

Se você criar um gráfico no Expert Advisor, por exemplo

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

então, quando se muda um parâmetro externo, o gráfico desaparece periodicamente. Não na primeira vez. Você pode mudar o parâmetro 3-5 vezes e ele se perde ao acaso, e não para sempre. Ele pode ser encontrado através de prazos de troca ou comércio automatizado (ativado ou desativado).

Podemos fazer com que não seja perdido?

 
Photic:

Inicialização no especialista em CGraphic.

Se você criar um gráfico em Expert Advisor, por exemplo:

então, quando o parâmetro externo é alterado, o gráfico desaparece periodicamente. Não desde a primeira vez. É possível mudar o parâmetro 3-5 vezes e então ele é perdido aleatoriamente em algum lugar, e não para sempre. Ele pode ser encontrado através da mudança de prazos ou negociação automática (ativada - não ativada).

Você pode fazer para que não se perca?

Você cria e destrói o objeto no nível local da função OnInit.

Criar um em nível global.
 

O problema foi resolvido com a reinstalação do MT.

Não consigo me acostumar ao fato de que pode não haver um erro quando ocorre um erro.

 

Você pode me dizer como mudar a largura da lenda, ou remover completamente o espaço destinado a ela?

 
Como posso evitar que algumas linhas sejam escritas na lenda? Eu só tenho uma linha que é pontos na coordenada Y e preciso fazer estes pontos em cores diferentes, então é uma linha de cor diferente e mostra a mesma informação, embora seja feita com linhas diferentes, e só preciso colocar informações resumidas sobre esta linha na lenda, existem muitas linhas de cores diferentes. Como posso fazer isso?
 

E outra pergunta, por que especificar uma cor "Vermelho", mas ela é exibida na tabela como azul, enquanto o verde é exibido corretamente?

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 outra pergunta, por que especificar uma cor "Vermelho", mas ela é exibida na tabela azul, enquanto o Verde é exibido corretamente?



Eu descobri, a cor tem que ser definida da seguinte forma

ColorToARGB(Red,256)
Razão: