文章 "从 MQL4 迁移到 MQL5" - 页 3

[删除]  

我建议将double MarketInfo(字符串 符号,int 类型)迁移为一组函数,根据输入参数的指定返回不同类型的数据


例如,这些函数

int MarketInfoInt(字符串 符号,int 类型);

string MarketInfoStr(string symbol,int type)....

我曾与开发人员就函数的 REFERENCES 和结果进行过沟通,但他们拒绝这样做(很遗憾)。


PS

在此基础上,我认为目前最好的解决方案是MarketInfo 库,它将包含所有需要的函数。

顺便说一下,这正是我在自己的库中所做的工作:)

 
Interesting:

我认为,在迁移环境中处理 TF 需要两个功能:

1.将秒数转换为 TF - 比如ENUM_TIMEFRAMES SecondToPeriod (int Value);

2.将周期转换为秒--例如int PeriodToSecond(ENUM_TIMEFRAMES Value)。


这是我在迁移模块一开始就成功做到的(还有一个 DLL 选项)。


PS

为了最大限度地符合 MQL4,我个人删除了所有非标准的周期



功能是好的,有用的,但执行....。

我会这样做

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void FixTF(int &tf)
  {
   switch(tf)
     {
      case 0: tf = 0;break;
      case 1: tf = PERIOD_M1;break;
      case 5: tf = PERIOD_M5;break;
      case 15: tf = PERIOD_M15;break;
      case 30: tf = PERIOD_M30;break;
      case 60: tf = PERIOD_H1;break;
      case 240: tf= PERIOD_H4;break;
      case 1440: tf=PERIOD_D1;break;
      case 10080: tf = PERIOD_W1;break;
      case 43200: tf = PERIOD_MN1;break;
      default: tf=0;break;
     }
  }
//+------------------------------------------------------------------+



在所有函数中,您只需定义数组的大小

就像 az buki vedi 一样。

 
CoreWinTT:

功能是好的,有用的,但执行..... 是异端邪说。

你的工作?

WHERE BREAK!!!!!! grief programmers!!!!


return 比 break 差在哪里?
 
我向你道歉。
 
CoreWinTT:

在所有函数中只需定义数组的大小
,简单来说就是 az'buki vedi。

并非总是如此,请参阅访问时间序列和指标 章节:

用于处理时间序列和指标的函数。时间序列与普通数组的不同之处在于,时间序列元素的索引是从数组的末尾开始的(从最新数据到最旧数据)。建议只使用动态 数组来复制时间序列和指标的值,因为复制函数会独立分配数组-值接收器的必要大小。

这条规则有一个 重要的例外:如果需要经常复制 时间序列和指标值,例如在每次调用智能交易系统中的OnTick() 或指标中的OnCalculate() 时,那么在这种情况下最好使用静态分布式数组,因为 动态数组的 内存分配操作需要额外的时间 ,这将影响智能交易系统的测试和优化。

 
Rosh:

并非总是如此,请参阅访问时间序列和指标


根据我的实践,最好还是这样做。

否则会出现数据访问错误

尤其是全局数组。


首先,因为在指定大小的数组中,索引是静态的,不会出现数组反转的危险时刻。

其次,数组的空间分配更少

第三,数组访问错误的概率会降低很多倍。

这就是为什么我认为这些函数只需要一个确定数组大小的函数。

 
CoreWinTT:

该功能很好很实用,但执行....

我会这样做

文章已修改:

  • 恢复了 TFMigrate() 函数的原貌
  • 修改了第 18 节中的函数
 
已为《参考手册》添加 iMAOnArray(...) 函数
 
修正了 iMAOnArray 函数。在 MODE_SMA 模式下,计算时间大幅缩短。
[删除]  

我开始对这个设计的功能产生了很大的怀疑。无论我如何努力去理解这个区块的逻辑,我都无法理解(我也很努力)....。

int iBarShiftMQL4(string symbol,
                  int tf,
                  datetime time,
                  bool exact=false)
  {
   if(time<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[],time1;
   CopyTime(symbol,timeframe,0,1,Arr);
   time1=Arr[0];
   if(CopyTime(symbol,timeframe,time,time1,Arr)>0)
      return(ArraySize(Arr)-1);
   else return(-1);
  }