文章 "编写"EA 交易"时,MQL5 标准交易类库的使用" - 页 2

[删除]  
Trolls:

我做错了什么? 为什么投标书没有打印出来?

以下是工作日志


2011.01.31 20:20:18 00 (eurusd,m1) eurusd 0

以下是代码



使用 \my_symbol.RefreshRates();\ 代替 \my_symbol.Refresh();\ 。这样就能正常工作了!
 
-Alexey-:
使用 \my_symbol.RefreshRates();\ 代替 \my_symbol.Refresh();\。这样就能正常工作了!

谢谢。

这个问题可能要问开发人员或编写帮助的人。

文章中说

mysymbol.Refresh()
用于刷新 所有数据 的所有数据。为一个类指定新的符号名称时,会自动调用该函数。


mysymbol.RefreshRates()
用于更新报价。设置新符号时,将自动调用该函数。

1.事实证明,并不是所有的数据都会自动更新。

2.指定新符号和设置新符号有什么区别?

3.我不明白自动这个词。我似乎用 my_symbol.Name(_Symbol) 命令设置了一个符号,但更新并没有发生....。

 
Trolls:

文章说

mysymbol.Refresh()
用于刷新的所有数据 的所有数据。当为一个类指定新的符号名称时,会自动调用该函数。

mysymbol.RefreshRates()
用于刷新报价。设置新符号时,会自动调用该函数。

1.事实证明,并不是所有的数据都能刷新报价。

2.指定新字符和设置新字符有什么区别?

3.我不明白自动这个词。我似乎用 my_symbol.Name(_Symbol) 命令设置了符号,但更新没有发生....。

难得的一刻,你不必等待文章作者或参考书作者的答复:)只要看看源代码,就会发现RefreshRates()SymbolInfoTick() 函数完全重复,后者 "MqlTick 类型的变量中返回指定符号的当前价格"。 因此,当作者说 "关于更新报价 "时,他们实际上是在说更新 MqlTick 类型变量的值。

2.源代码中有这样一行

void  Name(string name)  { m_name=name; Refresh();}
这表明在调用 Name() 函数时,只有 Refresh() 函数被自动激活。我没有找到任何关于在调用 Name() 函数时自动激活 RefreshRates() 函数的信息。因此,"从今天起",Name()函数符号的更改不会自动激活 RefreshRates() 函数。我们必须单独强制更新 MqlTick 类型变量("刷新引号")的值。
 
Trolls:

我做错了什么? 为什么没有打印出价?以下是工作日志 2011.01.31 20:20:18 00 (EURUSD,M1) EURUSD 0

以下是代码

void OnTick()
  {
   my_symbol.Name(_Symbol);
   my_symbol.Refresh();
   Print(_Symbol," ",my_symbol.Bid());
  }

以下是 Bid 值打印为 0 的原因。源代码显示,Bid() 函数由以下行描述

double  Bid()  const { return(m_tick.bid);}

因此,Bid() 函数的值与MqlTick 类型变量的一个元素的值绑定。当符号发生变化时,该变量不会自动更新,而是通过额外调用 RefreshRates() 函数更新。在您的代码中,Refresh() 函数被调用了--事实上,它被调用了两次(考虑到 Name() 函数的主体)--而 RefreshRates() 函数却没有被调用一次。

[删除]  
也许您可以在Refresh() 的最后部分添加Refresh()调用 ,从而 改进代码。这样,所有数据 就会真正得到更新.....
 
Interesting:
也许您可以Refresh() 的最后部分添加RefreshRates() 调用 ,从而 改进代码。这样,所有数据 就会真正得到更新.....
我在Name() 函数 中添加了RefreshRates() 调用。不过,这些仍然是根据个人用户的需要而在其层面上打的补丁。
[删除]  
Yedelkin:
我在Name() 函数 中添加了RefreshRates() 调用。不过,这些仍是针对个人用户需求的补丁。

但是,如果开发人员将 Refresh() 放在其他地方(由他们自行决定),对于大多数用户来说,这将是一个正常的解决方案。

如果我们说Refresh 会更新所有数据,那么所有数据都应该被更新。我认为


 
Interesting:

但如果开发人员把它放在 Refresh() 和其他地方(由他们决定),对大多数用户来说,这将是一个正常的解决方案。

如果我们说刷新会更新所有数据,那么所有数据确实都应该更新。我认为

这一点无可争议。但对用户来说,正常的解决方案仍然是对 可用 设计及其属性进行清晰易懂的描述。然后,用户自己就会知道如何使用这些结构。由于各种原因,这样的解决方案很难实现,因此那些向自己和他人提出更多问题的人将会继续前进:)
[删除]  
Yedelkin:
这一点无可非议。但是,对于用户来说,正常的解决方案仍然是清晰易懂地介绍可用的 设计及其特性。然后,用户自己就会知道如何使用这些结构。由于各种原因,这样的解决方案很难实现,因此那些向自己和他人提出更多问题的人将会继续前进:)

我不知道,我使用标准库 只是为了学习。我的所有项目都是用自己的组件编写的。

我会等到构造函数变得更方便时,再放弃使用标准库....。

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
 

顺便说一下,我发现CHistoryOrderInfo 类中有几行类似下面这样的代码

return(FormatType(str,Type()));
...
FormatType(type,Type())

但该类中没有 Type() 函数。