初学者的问题 MQL4 MT4 MetaTrader 4 - 页 196 1...189190191192193194195196197198199200201202203...260 新评论 Vladimir Karputov 2020.02.01 17:42 #1951 Vitaly Muzichenko: 这就是布局,4号和5号之间没有区别 句柄应该在OnInit()创建一次,而不是在每一步创建。你还不知道吗? Vitaly Muzichenko 2020.02.01 17:51 #1952 删除,需要考虑一下。 Vladimir Karputov 2020.02.01 17:55 #1953 Vitaly Muzichenko: 这个怎么样? 而这样一来,你仍然会在每一个刻度上建立一个手柄。 使用造型器,你会立即看到逻辑错误。 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double MA(string symb,ENUM_TIMEFRAMES tf,int period,int ma_shift, ENUM_MA_METHOD method,ENUM_APPLIED_PRICE price,int index) { #ifdef __MQL4__ return(iMA(symb,tf,period,ma_shift,method,price,index)); #else double buf[1]; static int hMA=-1; int handle=iMA(symb,tf,period,ma_shift,method,price); if(handle<hMA) { PrintFormat("Failed to create handle MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } else { if(CopyBuffer(handle,0,index,1,buf)<0) { PrintFormat("Failed to copy data from the indicator MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } } hMA=handle; return(buf[0]); #endif } Vitaly Muzichenko 2020.02.01 18:04 #1954 Vladimir Karputov: 但你仍然在为每一个刻度创建一个手柄。 使用造型器,你会立即看到逻辑错误。 像这样 double MA(string symb,ENUM_TIMEFRAMES tf,int period,int ma_shift, ENUM_MA_METHOD method,ENUM_APPLIED_PRICE price,int index) { #ifdef __MQL4__ return(iMA(symb,tf,period,ma_shift,method,price,index)); #else double buf[1]; static int handle=-1; if(handle<0) { handle=iMA(symb,tf,period,ma_shift,method,price); } if(handle<0) { PrintFormat("Failed to create handle MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } else { if(CopyBuffer(handle,0,index,1,buf)<0) { PrintFormat("Failed to copy data from the indicator MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } } return(buf[0]); #endif } 然后,其余的峰值搜索代码是跨平台的 Vladimir Karputov 2020.02.01 18:07 #1955 Vitaly Muzichenko: 我想是的。 然后,其余的峰值搜索代码是跨平台的 是的,它是... //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double MA(string symb,ENUM_TIMEFRAMES tf,int period,int ma_shift, ENUM_MA_METHOD method,ENUM_APPLIED_PRICE price,int index) { #ifdef __MQL4__ return(iMA(symb,tf,period,ma_shift,method,price,index)); #else double buf[1]; static int handle=-1; if(handle<0) { handle=iMA(symb,tf,period,ma_shift,method,price); } if(handle<0) { PrintFormat("Failed to create handle MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } else { if(CopyBuffer(handle,0,index,1,buf)<0) { PrintFormat("Failed to copy data from the indicator MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } } return(buf[0]); #endif } 显然更好。但是这个块的位置 不对--它应该紧接着 创建句柄 之后放置。 Vitaly Muzichenko 2020.02.01 18:12 #1956 Vladimir Karputov: 是的,现在 显然更好。但是这个块的位置不对--它应该紧接着 创建句柄 之后放置。 最好的方法可能是这样的,它将打印一次创建错误,但这样就会减少对if(...)的检查。 double MA(string symb,ENUM_TIMEFRAMES tf,int period,int ma_shift, ENUM_MA_METHOD method,ENUM_APPLIED_PRICE price,int index) { #ifdef __MQL4__ return(iMA(symb,tf,period,ma_shift,method,price,index)); #else double buf[1]; static int handle=-1; if(handle<0) { handle=iMA(symb,tf,period,ma_shift,method,price); PrintFormat("Failed to create handle MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } else { if(CopyBuffer(handle,0,index,1,buf)<0) { PrintFormat("Failed to copy data from the indicator MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } } return(buf[0]); #endif } Vladimir Karputov 2020.02.01 18:17 #1957 Vitaly Muzichenko: 最好的方法可能是这样的,它将打印一次创建错误,但这样就会减少对if(...)的检查。 我在你的混乱中看不到任何东西--一切都很模糊。 使用造型器。 Vitaly Muzichenko 2020.02.01 18:23 #1958 Vladimir Karputov: 我在你的混乱中看不到任何东西--它都融合在一起了。 使用造型器。 如果有的话,我在造型师中没有看到我的风格,而且有哦很多。 附加的文件: cc.PNG 100 kb GlaVredFX 2020.02.01 18:51 #1959 不幸的是,我的索引器是基于MQL4的,这个功能只是它的一小部分。 这就是为什么实现MQL5的效率不高的原因,而且重写整个事情会很漫长,也很有问题。 Artyom Trishkin 2020.02.01 18:52 #1960 GlaVredFX: 不幸的是,我的索引器是基于MQL4的,这个功能只是它的一小部分。 这就是为什么实现MQL5的效率不高的原因,而且重写整个事情会很漫长,也很有问题。 在MQL5中重写一个指标平均需要半小时。喝了一杯咖啡。 1...189190191192193194195196197198199200201202203...260 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这就是布局,4号和5号之间没有区别
句柄应该在OnInit()创建一次,而不是在每一步创建。你还不知道吗?
这个怎么样?
而这样一来,你仍然会在每一个刻度上建立一个手柄。 使用造型器,你会立即看到逻辑错误。
但你仍然在为每一个刻度创建一个手柄。 使用造型器,你会立即看到逻辑错误。
像这样
然后,其余的峰值搜索代码是跨平台的我想是的。
然后,其余的峰值搜索代码是跨平台的是的,它是...
显然更好。但是这个块的位置 不对--它应该紧接着 创建句柄 之后放置。
是的,现在
显然更好。但是这个块的位置不对--它应该紧接着 创建句柄 之后放置。
最好的方法可能是这样的,它将打印一次创建错误,但这样就会减少对if(...)的检查。
最好的方法可能是这样的,它将打印一次创建错误,但这样就会减少对if(...)的检查。
我在你的混乱中看不到任何东西--一切都很模糊。
使用造型器。我在你的混乱中看不到任何东西--它都融合在一起了。
使用造型器。如果有的话,我在造型师中没有看到我的风格,而且有哦很多。
不幸的是,我的索引器是基于MQL4的,这个功能只是它的一小部分。
这就是为什么实现MQL5的效率不高的原因,而且重写整个事情会很漫长,也很有问题。
不幸的是,我的索引器是基于MQL4的,这个功能只是它的一小部分。
这就是为什么实现MQL5的效率不高的原因,而且重写整个事情会很漫长,也很有问题。
在MQL5中重写一个指标平均需要半小时。喝了一杯咖啡。