エラー、バグ、質問 - ページ 2741

 
Ilyas:

MT4のデバッガは変わりません。

MQLコードのデバッグとプロファイリングのシステムを完全に再設計しています。 新システムはMT4と互換性がありません。

MT4 BILD 1262 端末のクラッシュ


2020.05.13 18:05:09.335 アクセス違反 0x0335346E への書き込み

2020.05.13 18:05:09.276 VR EURUSD,H4:リークされた文字列は残り1個です。

2020.05.13 18:11:11.126 アクセス違反 0x033403B7 への書き込み

2020.05.13 18:37:13.585 アクセス違反 0x03093648 への書き込み


この問題を再現するミニソース・コードを作成しました。

 
Vladimir Pastushak:

MT 4 BILD 1262 ターミナルクラッシュ


2020.05.13 18:05:09.335 アクセス違反 0x0335346E への書き込み

2020.05.13 18:05:09.276 VR EURUSD,H4:リークされた文字列は残り1個です。

2020.05.13 18:11:11.126 アクセス違反 0x033403B7 への書き込み

2020.05.13 18:37:13.585 アクセス違反 0x03093648 への書き込み


この問題を再現するためのミニソースを作りました。

プライベート メッセージでソースコードを送っていただければ、確認させていただきます。

 
Ilyas:

MT4のデバッガは変わりません。

MQLコードのデバッグとプロファイリングのシステムを完全に再設計しており、新システムはMT4と互換性がありません

かっこいい。MT4用の本格的なインジケーターの開発は忘れてもいい。

ありがとうございます、わかります。

 
Andrey Khatimlianskii:

インターフェースストリームのインジケータは、カウントされるまでは、端末は何も描画しません。だから、ハングアップするんです。

4は修正されないことがほとんどでしょう。

5つの同じようなインジケータが動作しますが、すべてがフリーズすることなく、正常である。

 
MT5(ビルド2419)がデバッガーで動いていて、数分ブラウザに行き、MTに戻るとなぜか真っ白になっていました。
- 窓もパネルも、工具も何もない。

 
MT5, Ctrl + Mouse Wheelによる価格スケーリングをプログラムで無効にするにはどうすればいいですか?
パネルを作って、プログラムでCtrl + Mouse Wheelをキャッチして、パネル要素を拡大縮小しています。
しかし、同じイベントで価格のスケーリングが発動され、「更新待ち」キャプションがロードされ、パネルが完全に無期限にオーバーライドされます。

サンプルコード、コメントされているものはプロジェクトでも 使用されていますが、上記の問題には影響しません:
void HideChart(long achart, color BackClr){     
   //ChartSetInteger(achart, CHART_SHOW, false);
        //ChartSetInteger(achart, CHART_SHOW_OHLC, false);
        //ChartSetInteger(achart, CHART_SHOW_BID_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_ASK_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_LAST_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_PERIOD_SEP, false);
        //ChartSetInteger(achart, CHART_SHOW_GRID, false);
        //ChartSetInteger(achart, CHART_SHOW_VOLUMES, CHART_VOLUME_HIDE);
        //ChartSetInteger(achart, CHART_SHOW_OBJECT_DESCR, false);
        //ChartSetInteger(achart, CHART_SHOW_TRADE_LEVELS, false);
        //ChartSetInteger(achart, CHART_SHOW_DATE_SCALE, false);
        //ChartSetInteger(achart, CHART_SHOW_PRICE_SCALE, false);
        //ChartSetInteger(achart, CHART_FOREGROUND, false);
        //ChartSetInteger(achart, CHART_SHIFT, false);
        //ChartSetInteger(achart, CHART_MODE, CHART_LINE);

        //ChartSetInteger(achart, CHART_SCALE, 0);
        ChartSetInteger(achart, CHART_SCALEFIX, 0);
        ChartSetInteger(achart, CHART_SCALEFIX_11 , 0);
        ChartSetInteger(achart, CHART_SCALE_PT_PER_BAR, 0);
        ChartSetInteger(achart, CHART_EVENT_OBJECT_DELETE, 0);
        ChartSetInteger(achart, CHART_EVENT_OBJECT_CREATE, 0);

   	ChartSetInteger(achart, CHART_EVENT_MOUSE_WHEEL,1); 
        ChartSetInteger(achart, CHART_EVENT_MOUSE_MOVE, 0);
        ChartSetInteger(achart, CHART_MOUSE_SCROLL, 0);
        ChartSetInteger(achart, CHART_KEYBOARD_CONTROL, 0);
        ChartSetInteger(achart, CHART_QUICK_NAVIGATION, 0);
        
        //ChartSetInteger(achart, CHART_COLOR_BACKGROUND, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_FOREGROUND, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_CHART_LINE, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_ASK, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_BID, BackClr);
        //ChartSetDouble(achart, CHART_FIXED_MAX, 1);
        //ChartSetDouble(achart, CHART_FIXED_MIN, 1);
        //ChartSetString(achart, CHART_COMMENT, "");
        //ChartSetInteger(achart, CHART_CROSSHAIR_TOOL, 0);
        //ChartSetInteger(achart, CHART_SHOW_ONE_CLICK, 0);
        //ChartSetInteger(achart, CHART_CONTEXT_MENU, 0);
        ChartRedraw(achart);
}

void OnInit() {
   HideChart(0, clrWhite);
} 
 

は、バグなのでしょうか? ドキュメントには、読めると書いてありますが

Print(i," - ",ObjectGetInteger(0,name,OBJPROP_XDISTANCE)," - ",ObjectGetInteger(0,name,OBJPROP_XSIZE));

挙がる

チャート上にテキストが表示されます。

フルコードを添付

ファイル:
 
Igor Zakharov:

ドキュメントではラベルの幅が読めるようになっていますが、バグでしょうか?

幅は、オブジェクトが完全にレンダリングされた後でのみ利用可能です。
私も最近、この問題に取り組んでいます。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

バグ、エラー、質問

セルゲイ・デジブリク, 2020.05.12 19:32

OBJ_EDITを使用する際、すべてのテキストが対応するオブジェクトの寸法に収まるようにOBJPROP_XSIZEとOBJPROP_YSIZEのサイズを設定する必要があるという問題が発生しました。

質問:テキスト全体にフィットするOBJPROP_XSIZEとOBJPROP_YSIZEのサイズを決定する方法は?
私は2つの選択肢を考えました。
1.OBJ_LABLEオブジェクトの作成、寸法の読み込み、OBJ_LABLEオブジェクトの削除。
寸法記入はオブジェクトが実際に作成された後でなければできず、オブジェクトがChartRedrawのキューにあるときにはできないため、適さない。

2.TextSetFontの後にTextGetSizeを使用する。
1の方法とは結果が根本的に異なり、フォントの大きさによって2.5倍から2.9倍の差があるため、適さない。
おそらく原因は、4Kモニターと175%のDPIだと思います。

#define  PRINT(x) ; Print(#x, ":", string(x))
          
void SetLabel(long achart, string name, int wnd, string text, color clr, int x, int y, int corn=0, int fontsize=8, string font="Tahoma")
{
   ObjectCreate(achart, name, OBJ_LABEL, wnd, 0, 0); 
   ObjectSetInteger(achart, name, OBJPROP_CORNER, corn); 
   ObjectSetString(achart, name, OBJPROP_TEXT, text); ObjectSetInteger(achart, name, OBJPROP_COLOR, clr); 
   ObjectSetInteger(achart, name, OBJPROP_FONTSIZE, fontsize); ObjectSetString(achart, name, OBJPROP_FONT, font);
   ObjectSetInteger(achart, name, OBJPROP_SELECTABLE, false); 
   ObjectSetInteger(achart, name, OBJPROP_BORDER_TYPE, 0);
   ObjectSetInteger(achart, name, OBJPROP_XDISTANCE, x); ObjectSetInteger(achart, name, OBJPROP_YDISTANCE, y);
}

void OnStart(){     
   string obj_name = "test_obj";   
   string text = "AAAA::BBBB";
   int font_size = 7;
   string font_name = "Tahoma";
   
   SetLabel(0, obj_name, 0, text, clrWhite, 100, 100, 0, font_size, font_name);
   ChartRedraw(0);
   Sleep(1000);
   
   uint dx_fixed_0 = int(ObjectGetInteger(0, obj_name, OBJPROP_XSIZE));
   uint dy_fixed_0 = int(ObjectGetInteger(0, obj_name, OBJPROP_YSIZE));
   ObjectDelete(0, obj_name);
   
   PRINT(dx_fixed_0);
   PRINT(dy_fixed_0);
   
   
   uint dx_fixed_1;
   uint dy_fixed_1;
   TextSetFont(font_name, -10 *  font_size);
   TextGetSize(text, dx_fixed_1, dy_fixed_1);
   
   PRINT(1.0 * dx_fixed_0 / dx_fixed_1);  	// Result: 1.0
   PRINT(1.0 * dy_fixed_0 / dy_fixed_1);  	// Result: 1.0
}  


解決して くれたGeessに 感謝します。
TextSetFontに 渡すとき、shuffleのサイズに-10を掛けるべきですね。

 
Sergey Dzyublik:

幅は、オブジェクトが完全にレンダリングされた後でのみ利用可能です。
最近もこの問題に取り組んでいます。

ありがとうございました。解決策を添付します。


ファイル:
 
一方のMQLプログラムがファイル(RAM-drive)に常に何かを追加しなければならず、もう一方(と別のターミナル)がこの追加されたデータをすべてそこから読み込まなければならないとしたら、どんなフラグや落とし穴があり得るでしょうか?