我的方法。核心是引擎。 - 页 97

 
Vasiliy Sokolov:

彼得,弦乐是什么鬼东西?你有一堆参数,如double、int、color,你把它们转换为字符串,把它们写进图表上的对象。但在与工会合作时,你不需要任何弦外之音。再看看这个例子,你是直接用double工作的,没有任何字符串,而且数据被很好地传递。

Vasiliy,除了数字数据,自定义EA在引擎中设置了大量的字符串数据。姓名、信息等。因此,只用数字来做是不可能的。

例如,Oleg Papkov的专家顾问会在其窗口中传递 "趋势上升,趋势下降...... "这样的文字。其他人会想在表格单元格中传递文本。进入输入字段

没有办法只用数字来做...((

 

如果你需要传递文本,那么就把字符串翻译成一个字节数组。

StringToCharArray("text", u.char);

其中u分别是union和u.char数组char[]。联合数组将有一个固定的大小,所以如果字符串不适合,那么要么增加u.char,要么将字符串分次传递。

 
Vasiliy Sokolov:

如果你需要传递文本,那么就把字符串翻译成一个字节数组。

其中u分别是union和u.char数组char[]。联合数组将有一个固定的大小,所以如果字符串放不进去,要么扩大u.char,要么将字符串分次传递。

我明白了,谢谢。我现在就去试试。(虽然,我可以通过对象描述 来完成一切)。 但我想充分了解资源。它也可能会派上用场。

额外的功能总是有用的。一些新的知识也不会有什么影响......

总之,非常感谢你个人和其他所有人的帮助

 
Реter Konow:

我明白了,谢谢你。我会试一试的。(虽然,你可以直接通过对象的描述 来做所有的事情),但我想把资源的问题解决掉。它也可能会派上用场。

额外的功能总是有用的。一些新的知识也不会有什么影响......

总之,非常感谢你个人和其他所有人的帮助

如果你想快速沟通,你不能做得更快。带参数的字符串你会非常快地通过对象,甚至可能比ResourceCreate更快,但这个字符串的解析会扼杀你所有的速度。但是,MQL是一种非常快的语言,即使是缓慢的解析在这里也是比较快的。

 
Vasiliy Sokolov:

如果你想快速沟通,你不能做任何比联盟更快的事情。你可以通过对象传递一个带参数的字符串,速度非常快,甚至可能比ResourceCreate还快,但这个字符串的解析会扼杀你的速度。但是,MQL是一种非常快的语言,即使是缓慢的解析在这里也是比较快的。

问题是,在任何情况下都需要进行解析。毕竟,即使在将字符串写入资源后,也必须从那里提取、收集,然后将其分成"参数号/参数值"的部分。

也就是说,你很难一下子从资源中获得断裂的字符串。因此,仍然需要进行解析......(()。

 
Реter Konow:

问题是,在任何情况下都需要进行解析。毕竟,即使在将一个字符串写入资源后,也必须从那里提取、收集,然后分成"参数编号/参数值"等部分。

也就是说,你很难一下子从资源中获得断裂的字符串。所以我们仍然需要解析......()

彼得,你又在做了。它已经进行了多少次?已经说过很多次了:你传递数值和参数数字,而不使用字符串。在你的例子中,你传递并得到了双倍,而没有进行任何字符串解析。那么,你为什么又要把这个双数放到一个字符串里呢?如果你需要把信息传递给用户--你就把它作为文本传递,而不需要进行任何解析。就这样了。

 
Vasiliy Sokolov:

彼得,你又来了。这句话已经说过多少次了?已经说过很多次了:你传递和接收参数值和数字,不需要使用字符串。在你的例子中,你传递并得到了双倍,而没有进行任何字符串解析。那么,你为什么又要把这个双数放到一个字符串里呢?如果你需要把信息传递给用户--你就把它作为文本传递,而不需要进行任何解析。就这样了。

瓦西里,让我试着解释一下。

参数值不仅是数字。一个参数值可以是一个文本。例如,一个用户在输入栏中输入了文本。这个文本从引擎转移到专家顾问。或者,专家顾问在一个特定的事件中向GUI发送一个文本,信息是"一个交易时段 已经开始!"。

由于在每个事件中,专家顾问或引擎需要来回传递所有类型的数据(int, double, long, string...),所以通过一个字符串来传递所有的东西,然后再转换为所需的类型,这样更方便。

否则,一种方式传递一些数据,另一种方式传递其他数据。

没有人知道用户将转移或接收更多的数据。也许将是文本作为主要数据。从各方面来看,事实证明,绳子,是一个传输和接收信息的通用媒介。

 
Vasiliy Sokolov:


顺便说一下,看看由于我们昨天的解决方案(和你的帮助),我已经取得了多大的进步。

在这个特殊的例子中,所有的东西都是通过一个资源来传递的。



而这一切都通过EA中的这段代码完成。

void OnTimer()
  { 
   static int q1,q2,q3,a,b,c,d; 
   //------------------------------------
   LOAD_CANVAS_Last_10_bars();
   //---------------------------------
   if(!a) { q1++;}
   if(q1 == 200)a = 1;
   if(a)q1--;
   if(!q1)a = 0;
   //------------------------------------  
   CIRCLE(q1,q2,q3,clrGreen);  
   TRIANGLE(q1,q1,q1 + 100,q1 + 10,q1 + 50,q1 + 200,clrRed);  
   ELLIPSE(q1,q1,q1 + q1*2,q1 +  q1,clrBlue);  
   FILLED_CIRCLE(q1,20,20,clrBlue); 
   TRIANGLE(q1 + 10,q1,q1 + 10,q1 + 100,q1 + 50,q1 + 200,clrAqua);  
   ELLIPSE(q1 + 50,q1,q1 + q1*2,q1 * q1-30,clrBlack);  
   ELLIPSE(q1 + 52,q1,q1 + q1*3,q1 * q1-32,clrMagenta); 
   ELLIPSE(q1 + 54,q1,q1 + q1*4,q1 * q1-34,clrOrange); 
   FILLED_CIRCLE(q1 + 70,q1+20,20,clrDarkCyan);        
   FILLED_CIRCLE(q3,q2,40,clrGreen); 
   //------------------------------------
   REDRAW_CANVAS();
  }
 
Реter Konow:

顺便说一下,看看由于我们昨天的解决方案(和你的帮助),我已经取得了多大的进步。

在这个特殊的例子中,所有的东西都是通过一个资源来转移的。

是的,它看起来很壮观。

 
Реter Konow:

从各方面来看,绳子似乎是一个传输和接收信息的通用媒介。

我不同意你在这里的观点。传输信息的通用工具是字节数组。

我同意文本也应该被转移。我也同意把文本作为一个字符串来传递比较好。但是,事实上,字符串只是一个抽象概念。 当你通过图中的对象传递文本时,这个文本的长度被限制在64个字符。这意味着在幕后你实际上是在传递一个64字节的数组(MQL为你做了所有将字符串转换 为数组并返回的工作,而不是显式的)。如果你正在做一个项目,在MQL程序之间交换信息是项目的一个关键和基本点,把这个功能留给一个通用的解决方案是不可能的。如果我是你,我会为任意类型开发一个通用的传输系统,包括字符串,并有严格的转换控制。这可以在解析和阅读资源的基础上进行。但是在字符串解析上这是有问题的,因为不能保证解析出来的字符串是有效的。