汎用クラスライブラリ - バグ、説明、質問、使用上の特徴、提案 - ページ 38

 

標準ライブラリには、Class CTradeとClass CExpertTrade : public CTradeをそれぞれ持つ2つのファイルIncludeTrade CExpertTrade.mqhとIncludeExpert CExpertTrade.mqhがあります。

CExpertTradeで、開発者は買いメソッドと売りメソッドの素晴らしい機能を構築しました。

しかし、これらのメソッドは、CTrade基本クラスで異なる動作を実装するメソッドと競合します。しかし、これらのメソッドはCTradeクラスではvirtualキーワードでマークされていないため、実際にはCExpertTradeではオーバーライドできません。その結果、コンプライエーターは警告を発し、CTrade メソッドに記述されたロジックが実際に使用され、CExpertTrade のメソッドの実装は無視されます。

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
MT5 ベータビルド 5512

ObjectCreateのOBJ_TEXTで、OBJPROP_TEXTに全角文字、OBJPROP_FONTに縦書きで利用するアットマーク(@)のフォントを指定すると、文字化けが発生します。

以下はこの問題を再現するためのコードです。
 string objtextname="TstSign";
int OnInit()
  {
   MyTest();
   return(INIT_SUCCEEDED);
  }
void MyTest()
   {
      datetime time=iTime(_Symbol,0,0);
      double price=iLow(_Symbol,0,0);
      ObjectCreate(0,objtextname,OBJ_TEXT,0,time,price);
      ObjectSetString(0,objtextname,OBJPROP_TEXT,"ABC");
      ObjectSetString(0,objtextname,OBJPROP_FONT,"@Meiryo UI");
      ObjectSetInteger(0,objtextname,OBJPROP_FONTSIZE,11);
      ObjectSetDouble(0,objtextname,OBJPROP_ANGLE,-90);
      ObjectSetInteger(0,objtextname,OBJPROP_COLOR,clrGray);
      ObjectSetInteger(0,objtextname,OBJPROP_ANCHOR,ANCHOR_LEFT);
      ChartRedraw();
   }
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0);
  }
void OnTick()
  {
  }  
 
XBrPsvmgFY #:
MT5 Beta Build 5512

In ObjectCreate's OBJ_TEXT, if you specify full-width characters in OBJPROP_TEXT and a vertical font for the @ symbol in OBJPROP_FONT, garbled characters will occur.

Below is the code to reproduce this issue:
            
ObjectSetString(0, objtextname, OBJPROP_TEXT, "ABC" "ABC");
ObjectSetInteger( 0 ,objtextname, OBJPROP_FONTSIZE , 18 );


 
Alain Verleyen #:
ObjectSetString(0, objtextname, OBJPROP_TEXT, "ABC" "ABC");
ご回答ありがとうございます

文字を半角にすれば表示されることは確認しています

しかし、目的は全角文字と@マーク付きのフォントを指定し文字を縦表示にしたいのです

Release Build 5430では問題なく表示されていました


ファイル:
sc.png  20 kb
 
XBrPsvmgFY # :
ご回答ありがとうございます

文字を半角にすれば表示されることは確認しています

しかし、目的は全角文字と@マーク付きのフォントを指定し文字を縦表示にしたいのです

Release Build 5430では問題なく表示されていました


分かりました、その通りです。

MQ に報告して注意を喚起しました。

 
Alain Verleyen #:

分かりました、その通りです。

MQ に報告して注意を喚起しました。

その後の状況ですが、

Build 5549で全角文字は表示されるようになりましたが、まだ縦表示されません。

あと、「5430、5541、5549」の表示比較画像をファイル添付しています。

ファイル:
 
Alain Verleyen #:

分かりました、その通りです。

MQ に報告して注意を喚起しました。

続投、失礼いたします。

MT5 ベータビルド 5554

・OBJPROP_FONTSIZEの制御が効いていない。
・記号やアルファベット文字の混在で表示サイズが勝手に変わる。

以下はこの問題を再現するためのコードです。

void MyTest()
   {
      string name="TestSign",objname;
      datetime time;
      double price;
      
      objname=name+"0";
      time=iTime(_Symbol,0,0);
      price=iLow(_Symbol,0,0);
      ObjectCreate(0,objname,OBJ_TEXT,0,time,price);
      ObjectSetString(0,objname,OBJPROP_TEXT,"ABC");
      ObjectSetString(0,objname,OBJPROP_FONT,"@Meiryo UI");
      ObjectSetInteger(0,objname,OBJPROP_FONTSIZE,12);
      ObjectSetDouble(0,objname,OBJPROP_ANGLE,270);
      ObjectSetInteger(0,objname,OBJPROP_COLOR,clrRed);
      ObjectSetInteger(0,objname,OBJPROP_ANCHOR,ANCHOR_LEFT);
      
      objname=name+"1";
      time=iTime(_Symbol,0,1);
      price=iLow(_Symbol,0,1);
      ObjectCreate(0,objname,OBJ_TEXT,0,time,price);
      ObjectSetString(0,objname,OBJPROP_TEXT,"ABC");
      ObjectSetString(0,objname,OBJPROP_FONT,"@Meiryo UI");
      ObjectSetInteger(0,objname,OBJPROP_FONTSIZE,28);
      ObjectSetDouble(0,objname,OBJPROP_ANGLE,270);
      ObjectSetInteger(0,objname,OBJPROP_COLOR,clrRed);
      ObjectSetInteger(0,objname,OBJPROP_ANCHOR,ANCHOR_LEFT);
      
      objname=name+"2";
      time=iTime(_Symbol,0,2);
      price=iLow(_Symbol,0,2);
      ObjectCreate(0,objname,OBJ_TEXT,0,time,price);
      ObjectSetString(0,objname,OBJPROP_TEXT,"■●▲");
      ObjectSetString(0,objname,OBJPROP_FONT,"@Meiryo UI");
      ObjectSetInteger(0,objname,OBJPROP_FONTSIZE,12);
      ObjectSetDouble(0,objname,OBJPROP_ANGLE,270);
      ObjectSetInteger(0,objname,OBJPROP_COLOR,clrRed);
      ObjectSetInteger(0,objname,OBJPROP_ANCHOR,ANCHOR_LEFT);
      
      objname=name+"3";
      time=iTime(_Symbol,0,3);
      price=iLow(_Symbol,0,3);
      ObjectCreate(0,objname,OBJ_TEXT,0,time,price);
      ObjectSetString(0,objname,OBJPROP_TEXT,"■AB");
      ObjectSetString(0,objname,OBJPROP_FONT,"@Meiryo UI");
      ObjectSetInteger(0,objname,OBJPROP_FONTSIZE,12);
      ObjectSetDouble(0,objname,OBJPROP_ANGLE,270);
      ObjectSetInteger(0,objname,OBJPROP_COLOR,clrRed);
      ObjectSetInteger(0,objname,OBJPROP_ANCHOR,ANCHOR_LEFT);
      ChartRedraw();
   }

表示結果の画像ファイル


ファイル:
5554.jpg  32 kb
 
XBrPsvmgFY # #:
Continued, sorry.

MT5 Beta-Build 5554

OBJPROP_FONTSIZE control is not working.
・The display size changes arbitrarily by mixing symbols and alphabetic characters.

Below is the code to reproduce this problem.

Image file of the display result


送信しました。ありがとうございました。
 
MT5 リリースビルド 5572

ObjectCreateのOBJ_TEXTで作成された
・@マーク付き全角フォント指定での縦表示ができない。
・記号のみのOBJPROP_FONTSIZEが制御されない。

また、上記の不具合とは別に、
[挿入]→[オブジェクト]→[グラフィック]→[テキスト]やObjectCreateのOBJ_TEXTで作成された
テキストオブジェクトを持つチャートがあると、そのチャートの動作や描画パフォーマンス低下、
MT5全体の動作までもが異常に遅くなる。
なお、この現象はテキストオブジェクトの数に比例し、場合によっては起動不能やクラッシュまで引き起こす。


以下は上記の不具合を再現するためのコードです。
int OnInit()
  {
      MyTest();
      return(INIT_SUCCEEDED);
  }
void MyTest()
   {
      string name="TestSign",objname;
      datetime time;
      double price;
      
      objname=name+"0";
      time=iTime(_Symbol,0,0);
      price=iLow(_Symbol,0,0);
      ObjectCreate(0,objname,OBJ_TEXT,0,time,price);
      ObjectSetString(0,objname,OBJPROP_TEXT,"ABC");
      ObjectSetString(0,objname,OBJPROP_FONT,"@Meiryo UI");
      ObjectSetInteger(0,objname,OBJPROP_FONTSIZE,12);
      ObjectSetDouble(0,objname,OBJPROP_ANGLE,270);
      ObjectSetInteger(0,objname,OBJPROP_COLOR,clrRed);
      ObjectSetInteger(0,objname,OBJPROP_ANCHOR,ANCHOR_LEFT);
      
      objname=name+"1";
      time=iTime(_Symbol,0,1);
      price=iLow(_Symbol,0,1);
      ObjectCreate(0,objname,OBJ_TEXT,0,time,price);
      ObjectSetString(0,objname,OBJPROP_TEXT,"■●▲");
      ObjectSetString(0,objname,OBJPROP_FONT,"@Meiryo UI");
      ObjectSetInteger(0,objname,OBJPROP_FONTSIZE,12);
      ObjectSetDouble(0,objname,OBJPROP_ANGLE,270);
      ObjectSetInteger(0,objname,OBJPROP_COLOR,clrRed);
      ObjectSetInteger(0,objname,OBJPROP_ANCHOR,ANCHOR_LEFT);
      
      objname=name+"2";
      time=iTime(_Symbol,0,2);
      price=iLow(_Symbol,0,2);
      ObjectCreate(0,objname,OBJ_TEXT,0,time,price);
      ObjectSetString(0,objname,OBJPROP_TEXT,"ABC■●▲");
      ObjectSetString(0,objname,OBJPROP_FONT,"@Meiryo UI");
      ObjectSetInteger(0,objname,OBJPROP_FONTSIZE,12);
      ObjectSetDouble(0,objname,OBJPROP_ANGLE,270);
      ObjectSetInteger(0,objname,OBJPROP_COLOR,clrRed);
      ObjectSetInteger(0,objname,OBJPROP_ANCHOR,ANCHOR_LEFT);
      
      objname=name+"3";
      time=iTime(_Symbol,0,3);
      price=iLow(_Symbol,0,3);
      ObjectCreate(0,objname,OBJ_TEXT,0,time,price);
      ObjectSetString(0,objname,OBJPROP_TEXT,"ABC");
      ObjectSetString(0,objname,OBJPROP_FONT,"@Meiryo UI");
      ObjectSetInteger(0,objname,OBJPROP_FONTSIZE,28);
      ObjectSetDouble(0,objname,OBJPROP_ANGLE,270);
      ObjectSetInteger(0,objname,OBJPROP_COLOR,clrRed);
      ObjectSetInteger(0,objname,OBJPROP_ANCHOR,ANCHOR_LEFT);
      
      objname=name+"4";
      time=iTime(_Symbol,0,4);
      price=iLow(_Symbol,0,4);
      ObjectCreate(0,objname,OBJ_TEXT,0,time,price);
      ObjectSetString(0,objname,OBJPROP_TEXT,"■●▲");
      ObjectSetString(0,objname,OBJPROP_FONT,"@Meiryo UI");
      ObjectSetInteger(0,objname,OBJPROP_FONTSIZE,28);
      ObjectSetDouble(0,objname,OBJPROP_ANGLE,270);
      ObjectSetInteger(0,objname,OBJPROP_COLOR,clrRed);
      ObjectSetInteger(0,objname,OBJPROP_ANCHOR,ANCHOR_LEFT);
      
      objname=name+"5";
      time=iTime(_Symbol,0,5);
      price=iLow(_Symbol,0,5);
      ObjectCreate(0,objname,OBJ_TEXT,0,time,price);
      ObjectSetString(0,objname,OBJPROP_TEXT,"ABC■●▲");
      ObjectSetString(0,objname,OBJPROP_FONT,"@Meiryo UI");
      ObjectSetInteger(0,objname,OBJPROP_FONTSIZE,28);
      ObjectSetDouble(0,objname,OBJPROP_ANGLE,270);
      ObjectSetInteger(0,objname,OBJPROP_COLOR,clrRed);
      ObjectSetInteger(0,objname,OBJPROP_ANCHOR,ANCHOR_LEFT);
      
      ChartRedraw();
   }
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0);
  }
void OnTick()
  {
  } 

ファイル:
5570-5430.jpg  53 kb
 
XBrPsvmgFY # :
MT5 リリースビルド 5572

ObjectCreateのOBJ_TEXTで作成された
・@マーク付き全角フォント指定での縦表示ができない。
・記号のみのOBJPROP_FONTSIZEが制御されない。

また、上記の不具合とは別に、
[挿入]→[オブジェクト]→[グラフィック]→[テキスト]やObjectCreateのOBJ_TEXTで作成された
テキストオブジェクトを持つチャートがあると、そのチャートの動作や描画パフォーマンス低下、
MT5全体の動作までもが異常に遅くなる。
なお、この現象はテキストオブジェクトの数に比例し、場合によっては起動不能やクラッシュまで引き起こす。


以下は上記の不具合を再現するためのコードです。
MeatQuotes に報告していただきありがとうございます (再度)。