错误、漏洞、问题 - 页 1439

 
George Merts:

根据我的经验,如果程序员在一个包含10个项目、索引为20的数组中写了什么,这很可能意味着他/她犯了一个错误,程序应该产生一个错误,而不是增加数组的大小,从而隐藏一个有问题的动作。

所有这些 "调整大小的数组 "在隐藏潜在错误方面要比便利性麻烦得多。更重要的是,不需要跟踪数组的大小也是一种潜在的危险做法,会导致难以修复的错误。

是我,还是你没有使用过相关的语言?你根本不需要指定要添加的索引:它被自动分配,而且数组的大小也会增加。在这个操作过程中,程序员就是没有机会在索引上犯错。

你可以用类来实现类似的行为,添加相关的函数pop、shift、unshift等等。并从代码中拖出一马车的类,每个代码都使用其中的%10...20个函数。这听起来像是一个好的解决方案吗?在我看来,正确解决方案的一个例子是在ObjectsDeleteAll函数 中加入按前缀删除的功能--这是向更高级别的编程迈进的另一个微米--而大多数编码员都飞到了回收站,所以自制了这个功能。唉,我们几乎看不到阵列的这种情况......。

 

И таскать телегу классов из кода в код, при том что в каждом коде из неё используются %10..20 функций.

你没听说过include mqh文件吗?
 

不需要编写 "智能数组 "类,它们已经在MetaQuotes标准库 中了,请看Arry类家族。

 
你好。我想用MT5通过经纪人 "Otkritie "进行期货工作。
当访问SymbolInfoTick函数 时,结果发现MqlTick结构的最后两个参数
- time_msc, flag都没有。有可能解决这个问题吗?例如,以本网站的MT5为例。
尝试将其连接到经纪人的服务器。或者可以通过其他方式获得所需信息。
我很感兴趣:谁发起的交易,卖方还是买方?
 
Alexander Puzanov:

是我的问题,还是你没有使用过有关的语言?你根本不需要为添加的元素指定索引,它被自动分配,而且数组的大小也会增加。在这个操作过程中,程序员就没有机会在索引上犯错。

Awwwww...程序员有什么机会犯错?你认为你可以考虑到任何复杂程序的所有变体是错误的。

所有这些 "默认动作 "必须是复杂对象的属性。简单对象,如变量、数组和简单结构--必须有尽可能少的 "默认 "属性。

例如,在创建时 - 它们必须存储一个未定义的值,而不是零。

你可以用类来实现类似的行为,添加相关的函数pop、shift、unshift等。并从代码中拖出一马车的类,每个代码都使用其中的%10...20个函数。这听起来像是正确的解决方案吗?

从逻辑上讲,这是正确的解决方案。在处理这类问题时--他们的行为是透明的。

那么 "拖动一车的类 "呢--在编码时,你不拖动它们,你只是插入库中。而在编译时,一个正常的链接器不应该把库中的所有方法都放到可执行文件中,而应该是那些被使用的方法。

在我看来,正确的解决方案的例子--在ObjectsDeleteAll函数 中加入前缀删除--这是迈向更高级别的编程的另一个微米--大多数编码员已经飞到了垃圾桶里,这个自制的函数。唉,这不太可能发生在数组上......。

在我看来,这也是一个错误的方法,原因是一样的。该功能被加载了一些不典型的任务,不符合其应用的逻辑。

在我看来,正确的解决方案是在图上有一个类对象管理器,保持一个列表,并在函数被调用时删除必要的对象。在我看来,名称的前缀应该仅仅是为了让人清楚地了解对象的一些信息。而删除--不应该以任何方式基于对象的名称,而是将该名称保存在一个数组中。

 
Demal:
你好。我试图使用MT5通过经纪人 "Otkritie "进行期货工作。
当访问SymbolInfoTick函数 时,结果发现MqlTick结构的最后两个参数
- time_msc, flag都没有。有可能解决这个问题吗?例如,以本网站的MT5为例。
尝试将其连接到经纪人的服务器。或者可以通过其他方式获得所需信息。
我很感兴趣:谁发起的交易,卖方还是买方?
  1. 你现在的终端是什么版本的?
  2. 你是连接到一个演示的还是真实的服务器?
 
版本5.0 build 1150,演示
 
Demal:
版本5.0 build 1150,演示

更新你的终端(你需要连接到MetaQuotes-Demo服务器)。目前的建设。

Terminal        MetaTrader 5 build 1210 started (MetaQuotes Software Corp.)

这就是剧本。

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                              Copyright © 2015, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlTick last_tick;
//--- 
   if(SymbolInfoTick(Symbol(),last_tick))
     {
      Print("time = ",last_tick.time,"; bid = ",last_tick.bid,
            "; ask = ",last_tick.ask,"; volume = ",last_tick.volume,
            "; time_msc = ",last_tick.time_msc,"; flag = ",last_tick.flags);
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
  }
//+------------------------------------------------------------------+

得到了这个结果。

Test (RTS-12.15,H1)     time = 2015.11.26 09:42:57; bid = 88360.0; ask = 88400.0; volume = 2; time_msc = 1448530977000; flag = 0

附加的文件:
Test.mq5  2 kb
 
Karputov Vladimir:

更新你的终端(你需要连接到MetaQuotes-Demo服务器)。目前的建设。

这就是剧本。

得到了这个结果。

谢谢你,你知道为什么这个标志的值是0,好像什么都没有改变?
 
Demal:
谢谢,你知道为什么标志的值是0,好像什么都没有改变。
使用CopyTicks,你会很高兴。而且SymbolInfoTick 可能还不知道如何与新的tick结构一起工作。
附加的文件:
CopyTicks.mq5  4 kb