文章 "从 MQL4 迁移到 MQL5" - 页 3 12345678910...13 新评论 [删除] 2010.05.13 03:56 #21 我建议将double MarketInfo(字符串 符号,int 类型)迁移为一组函数,根据输入参数的指定返回不同类型的数据。例如,这些函数int MarketInfoInt(字符串 符号,int 类型);string MarketInfoStr(string symbol,int type)....我曾与开发人员就函数的 REFERENCES 和结果进行过沟通,但他们拒绝这样做(很遗憾)。PS在此基础上,我认为目前最好的解决方案是MarketInfo 库,它将包含所有需要的函数。顺便说一下,这正是我在自己的库中所做的工作:) Vasily 2010.05.13 15:20 #22 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 一样。 Rashid Umarov 2010.05.13 15:23 #23 CoreWinTT:功能是好的,有用的,但执行..... 是异端邪说。你的工作?WHERE BREAK!!!!!! grief programmers!!!! return 比 break 差在哪里? Vasily 2010.05.13 15:25 #24 我向你道歉。 Rashid Umarov 2010.05.13 15:25 #25 CoreWinTT: 在所有函数中只需定义数组的大小,简单来说就是 az'buki vedi。并非总是如此,请参阅访问时间序列和指标 章节:用于处理时间序列和指标的函数。时间序列与普通数组的不同之处在于,时间序列元素的索引是从数组的末尾开始的(从最新数据到最旧数据)。建议只使用动态 数组来复制时间序列和指标的值,因为复制函数会独立分配数组-值接收器的必要大小。 这条规则有一个 重要的例外:如果需要经常复制 时间序列和指标值,例如在每次调用智能交易系统中的OnTick() 或指标中的OnCalculate() 时,那么在这种情况下最好使用静态分布式数组,因为 动态数组的 内存分配操作需要额外的时间 ,这将影响智能交易系统的测试和优化。 Vasily 2010.05.13 15:39 #26 Rosh:并非总是如此,请参阅访问时间序列和指标:根据我的实践,最好还是这样做。否则会出现数据访问错误尤其是全局数组。首先,因为在指定大小的数组中,索引是静态的,不会出现数组反转的危险时刻。其次,数组的空间分配更少第三,数组访问错误的概率会降低很多倍。这就是为什么我认为这些函数只需要一个确定数组大小的函数。 Sergey Pavlov 2010.05.13 17:02 #27 CoreWinTT:该功能很好很实用,但执行....我会这样做文章已修改:恢复了 TFMigrate() 函数的原貌修改了第 18 节中的函数 Sergey Pavlov 2010.05.17 07:47 #28 已为《参考手册》添加 iMAOnArray(...) 函数 Sergey Pavlov 2010.05.19 08:13 #29 修正了 iMAOnArray 函数。在 MODE_SMA 模式下,计算时间大幅缩短。 [删除] 2010.05.23 13:56 #30 我开始对这个设计的功能产生了很大的怀疑。无论我如何努力去理解这个区块的逻辑,我都无法理解(我也很努力)....。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); } 12345678910...13 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我建议将double MarketInfo(字符串 符号,int 类型)迁移为一组函数,根据输入参数的指定返回不同类型的数据。
例如,这些函数
int MarketInfoInt(字符串 符号,int 类型);
string MarketInfoStr(string symbol,int type)....
我曾与开发人员就函数的 REFERENCES 和结果进行过沟通,但他们拒绝这样做(很遗憾)。
PS
在此基础上,我认为目前最好的解决方案是MarketInfo 库,它将包含所有需要的函数。
顺便说一下,这正是我在自己的库中所做的工作:)
我认为,在迁移环境中处理 TF 需要两个功能:
1.将秒数转换为 TF - 比如ENUM_TIMEFRAMES SecondToPeriod (int Value);
2.将周期转换为秒--例如int PeriodToSecond(ENUM_TIMEFRAMES Value)。
这是我在迁移模块一开始就成功做到的(还有一个 DLL 选项)。
PS
为了最大限度地符合 MQL4,我个人删除了所有非标准的周期
功能是好的,有用的,但执行....。
我会这样做
在所有函数中,您只需定义数组的大小
就像 az buki vedi 一样。
功能是好的,有用的,但执行..... 是异端邪说。
你的工作?
WHERE BREAK!!!!!! grief programmers!!!!
在所有函数中只需定义数组的大小
,简单来说就是 az'buki vedi。
并非总是如此,请参阅访问时间序列和指标 章节:
用于处理时间序列和指标的函数。时间序列与普通数组的不同之处在于,时间序列元素的索引是从数组的末尾开始的(从最新数据到最旧数据)。建议只使用动态 数组来复制时间序列和指标的值,因为复制函数会独立分配数组-值接收器的必要大小。
这条规则有一个 重要的例外:如果需要经常复制 时间序列和指标值,例如在每次调用智能交易系统中的OnTick() 或指标中的OnCalculate() 时,那么在这种情况下最好使用静态分布式数组,因为 动态数组的 内存分配操作需要额外的时间 ,这将影响智能交易系统的测试和优化。
并非总是如此,请参阅访问时间序列和指标:
根据我的实践,最好还是这样做。
否则会出现数据访问错误
尤其是全局数组。
首先,因为在指定大小的数组中,索引是静态的,不会出现数组反转的危险时刻。
其次,数组的空间分配更少
第三,数组访问错误的概率会降低很多倍。
这就是为什么我认为这些函数只需要一个确定数组大小的函数。
该功能很好很实用,但执行....
我会这样做
文章已修改:
我开始对这个设计的功能产生了很大的怀疑。无论我如何努力去理解这个区块的逻辑,我都无法理解(我也很努力)....。