CGraphicのテスト - 質問と提案 - ページ 9

 
Dennis Kirichenko:

Anatolyさん、ありがとうございますポイント1では役に立ちました。はい、CAxis::MaxGrace(const double value)の 軸メソッドを見逃していました。

こちらも短い例です。

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

出願番号1827124


 
Anatoli Kazharski:

出願番号1827124

この問題は、以下のように修正されました。

サポートチーム2018.01.15 14:30

CAxis::Modメソッドで除算の余りを安全に計算するときにエラーが発生しました。

以前はそこにMathMod関数を使わない数値計算の方法が実装されていましたが、あなたの例から、この方法の精度がベストではないケースがあることがわかりました。

だから、この方法を変更する必要があったんだ。

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

//---

同じパラメータでの結果です。


 

CGraphic エキスパートでの初期設定。

Expert Advisorでグラフを作成した場合など。

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

で、外部パラメータを変更すると、グラフが周期的に消えます。初回ではありません。パラメータを3~5回変更しても、ランダムで失われ、永遠に失われることはない。タイムフレームの切り替えや自動売買(有効・無効)を通じて知ることができる。

失われないようにすることはできないか。

 
Photic:

CGraphicエキスパートでの初期設定。

例えばExpert Advisorでチャートを作成した場合。

で、外部パラメータを変更すると、グラフが周期的に消える。初回からではありません。3~5回パラメータを変更しても、ランダムにどこかに消えてしまうことがあり、永遠に消えない。タイムフレームの切り替えや自動売買(有効 - 無効)でも確認できます。

紛失しないように作れるか?

OnInit関 数のローカルレベルでオブジェクトの生成と破棄を行います。

世界レベルで作る。
 

MTの再インストールで解決しました。

エラーが発生しても、エラーが発生しない場合もあることに慣れない。

 

凡例の幅を変更する方法、または凡例に割り当てられているスペースを完全に削除する方法を教えていただけませんか?

 
凡例に一部の行を書き込まないようにするにはどうしたらよいですか?ただ、Y座標上の点である線があり、これらの点を異なる色で作る必要があるので、異なる色の線 でありながら同じ情報を表示し、この線に関する概要情報を凡例に記載すればよいのですが、このような色の異なる線は数多く存在します。どうすればいいのでしょうか?
 

また、もう一つの質問ですが、色「赤」を指定しても、チャート上では青で表示され、緑は正しく表示されるのはなぜでしょうか?

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:

また、もう一つの質問ですが、「赤」という色を指定しても、グラフ上では青く表示され、緑は正しく表示されるのはなぜですか?



私はそれを考え出した、色は次のように設定する必要があります。

ColorToARGB(Red,256)
理由: