错误、漏洞、问题 - 页 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:

接口流中的指示器,在它们被计数之前,终端不画任何东西。这就是为什么它挂断了。

四是不会被纠正,很可能。

在五个类似的指标工作,但一切正常,没有冻结。

 
MT5(build 2419)在调试器下工作,去浏览器看了几分钟,然后回到MT,不知为何完全是空的。
- 没有窗户,没有面板,没有工具,什么都没有......。

 
MT5,我如何通过Ctrl+鼠标滚轮以编程方式禁用价格缩放?
我做了一个面板,以编程方式抓住Ctrl + 鼠标滚轮,缩放面板元素。
然而,同样的事件触发了价格缩放,并加载了 "等待更新 "的标题,它完全无限期地覆盖了面板。

示例代码,被注释的内容也在项目 中使用,但不影响上述问题:
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:

文档中的标签宽度说是可读的,但是

宽度只有在对象被完全渲染后才能使用。
我最近也在处理这个问题。

关于交易、自动交易系统和策略测试的论坛

缺陷、错误、问题

Sergey Dzyublik, 2020.05.12 19:32

在使用OBJ_EDIT时,出现了一个问题--需要设置OBJPROP_XSIZE和OBJPROP_YSIZE的尺寸,以便所有的文字都能适合相应的对象尺寸。

问题:如何确定OBJPROP_XSIZE和OBJPROP_YSIZE的大小以适应整个文本?
我已经考虑了两个选项。
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 提供的解决方案
当把shuffle传给TextSetFont 时,我应该把它的大小乘以-10。

 
Sergey Dzyublik:

宽度只有在物体被完全渲染后才能使用。
最近也一直在处理这个问题。

谢谢你!解决办法见附件。


附加的文件:
 
如果一个MQL程序必须一直向文件(RAM-drive)追加一些东西,而另一个(和另一个终端)必须从文件中读取所有这些追加的数据,会有什么标志和隐患?