如何使图表上的输出为单行字体? - 页 3

 
Victor Ziborov:

在测试和优化参数的阶段,输出到评论和输出到标签可以被禁用,但当在现实生活中使用EA的时候,输出到评论和输出到标签应该被再次启用。


谢谢,帽子 )))))) 我们不知道

 
Victor Ziborov:

在测试和优化参数的阶段,注释中的输出和标签上的输出可以关闭,但当在实际生活中使用EA时,注释中的输出和标签上的输出应该重新打开。

一般来说,这是自动完成的。

bool bIsComment = (!IsTesting() || IsVisualMode());

然后我们在代码中检查bIsComment,如果评论要被输出或要执行任何图表。因此,不需要手动切换任何东西。

 
Ihor Herasko:

这是自动完成的。

然后,当需要输出Comment或进行任何图形构造 时,我们检查代码上的bIsComment。因此,不需要手动切换任何东西。


哪里说过你必须手动操作?我错过了什么吗?

 
Yury Kirillov:

哪里说过你必须手动操作了?我错过了什么吗?


这个 帖子作出回应。那里基本上是模棱两可的。但不知何故,它似乎更像是 "禁用 "和 "启用 "是一个配置参数,由用户根据程序的运行方式来改变。刚刚澄清了,不需要这样的参数。

 
Artem Virskiy:

你可以用piskels测量每个字符的宽度(会有几组具有相同的宽度)。编写一个函数,将任何带有空格的字符串追加,直到达到给定宽度。然后从这些子字符串中组合出评论。

如果你做了这样的功能,请在kodobase上发布,很多人都会感激。我也是。我太懒了,懒得麻烦自己。

在这种情况下,符号(x200A)将是有用的--空间的最小宽度,以实现精确配合。并用符号/1--宽空格代替常规空格(毕竟评论的长度是有限的)。也许还有其他有用的空间,但我不知道它们。


谢谢你的主意!

 
Yury Kirillov:
评论的运行速度明显快于图形化字体。

这很符合逻辑,但事实并非如此。
而且很容易检查。
这是一个关于MQL5的脚本(没有在MT4上试过)。

#property script_show_inputs
#include <Canvas\Canvas.mqh>

input uint   FontSize=12;                                   // размер шрифта
input ENUM_COLOR_FORMAT format=COLOR_FORMAT_ARGB_NORMALIZE; //Способ обработки цвета

void OnStart()
  {
   CCanvas Text;
   ulong ColorScreen=ChartGetInteger(0,CHART_COLOR_BACKGROUND,0);

   Text.FontSet("Arial",FontSize);
   string str="Соотношение времени выполнения Canvas/Comment = 0.00000";
   int H=Text.TextHeight(str);
   int W=Text.TextWidth(str);
   if(!Text.CreateBitmapLabel(0,0,"FONT",2,130,W,H,format)) Print("Error creating canvas: ",GetLastError());

   ulong t1=1,t2=1,t0;
   int i=0;
   color clr=(color)ARGB(255,255^GETRGBR(ColorScreen),255^GETRGBG(ColorScreen),255^GETRGBB(ColorScreen));
   while(!IsStopped())
     {
      t0=GetMicrosecondCount();
      Text.Erase((color)ColorScreen);
      Text.TextOut(0,0,str,clr);
      Text.Update();
      t1+=GetMicrosecondCount()-t0;
      t0=GetMicrosecondCount();
      Comment(str);
      t2+=GetMicrosecondCount()-t0;
      str="Соотношение времени выполнения Canvas/Comment = "+DoubleToString((double)t1/(double)t2,5);
      if(i==1000) {Print("Canvas - ",t1,"   Comment - ",t2); i=0; t1=1; t2=1; } else i++;
     }
   Text.Destroy();
   Comment("");

}

测试结果显示,图形输出的速度约为10%。但有趣的是,即使你将字体大小 设置为30(而不是12),速度仍会更快。这对我个人来说是个谜。

附加的文件:
 
Alexey Volchanskiy:

我不做60K/秒的漫画,我只是把它们放出来就可以了。

帆布也可以做卡通。


附加的文件:
 
Nikolai Semko:


这是一个关于MQL5的脚本(没有在MT4上试过)。


我在MT4上试过。
在MT4上,事实证明,Comment 比其图形对应的速度快5倍左右。而事实证明,Comment()在MT5上比在MT4上慢了5-6倍。现在,这是一个令人不快的奇怪的惊喜。因此,我的问题是给开发商的。怎么会呢?这显然是5的一个错误!!!。

 
Nikolai Semko:

它是符合逻辑的,但它不是。
而且这很容易检查。
这里有一个用于MQL5的脚本(我没有在MT4上试过)。

测试结果显示,图形输出的速度约为10%。但有趣的是,即使你将字体大小 设置为30(而不是12),速度仍会更快。这对我个人来说是个谜。


这些测量是关于什么的。我们应该为《评论》和《画布》分别运行数万次的循环,然后我们就能判断出一些东西。而要打印的文本应该改变,例如,让计数器的值被打印出来。

你就不能这样重做吗?

 
Alexey Volchanskiy:

这些测量结果算不上什么。我们应该为 "评论 "和 "画布 "分别做几万次的循环,然后我们就可以判断一些东西。而要打印的文本应该改变,例如,让计数器的值被打印。

你能以这种形式重做吗?


我也试着做了单独的循环,觉得结果相当奇怪。同样的结果。无论是一般的循环还是单独的循环,都没有任何区别。在我的样本中,文本每次都会改变,我想知道为什么没有人注意到这一点。我也知道编译器的优化。))