错误、漏洞、问题 - 页 2589 1...258225832584258525862587258825892590259125922593259425952596...3184 新评论 Ilyas 2019.10.09 07:38 #25881 fxsaber: 关于ArrayResize的问题。我一次为几个千兆字节做了储备。然后我逐渐增加尺寸,这比最初的储备量要少。 为什么TaskManager在尺寸增加时显示内存消耗增加? 我们没有故意做任何事情--这是操作系统的一个特点(而且用户真的需要千兆字节吗? 如果你想在程序的一个关键点拥有 "热 "内存,你必须在该点之前 "运行 "所分配的块的页,以便进程的虚拟内存页得到物理的。 但是,从MQL来看,无法访问阵列的保留块。 fxsaber 2019.10.09 08:07 #25882 Ilyas:我们并没有刻意为此做什么--这是操作系统的一个特点(而且用户真的需要千兆字节吗? 如果你想在程序的一个关键点上有热的内存,你必须在该点之前 "运行 "所分配的块的页,以便进程的虚拟内存页得到物理的。 但是,从MQL来看,无法访问阵列的保留块。 谢谢。我想知道如果一次对数千字节做完整的ArrayResize,性能应该受到什么影响。 Igor Makanu 2019.10.09 10:46 #25883 void OnStart() { datetime m_stoptime = 0; //1. if(m_stoptime < TimeCurrent()) { //расчеты } //2. MqlTick last_tick; if(SymbolInfoTick(_Symbol, last_tick)) { if(m_stoptime < last_tick.time) { //расчеты } } //3. const int start = 0; const int count = 1; datetime time[1]; if(CopyTime(_Symbol,PERIOD_M1,start,count,time)>0) { if(m_stoptime < time[0]) { //расчеты } } } 经测试,在优化我的EA 时,运行了一个完整的超限值,共5000次,仅从测试者的日志中算起 1.14:04:28.365 - 14:15:47.481 = 11米19秒 2.13:49:56.885 - 14:00:30.819 = 10 m 34 sec. 3.14:28:35.89 - 14:41:11.659 = 12 m 36 sec 原则上,正如预期的那样,选项2更快,对于5000次运行来说,收益约为30秒,也相当不错。 fxsaber 2019.10.10 08:43 #25884 请帮助通过WinAPI调用这个菜单。 我可以得到带有选定的EA名称的行。ComboBox中只有一行,与MT4不同。 但我不能调用菜单。BM_CLICK不起作用。 你如何在x64中使用信息? 使用WM_LBUTTONDOWN解决了这个问题。 fxsaber 2019.10.10 10:05 #25885 零点静力学到底是不是一个错误?int Array0[] = {}; [删除] 2019.10.10 14:02 #25886 在移动终端 中是否会有一个选项,将地下室的指标直接应用到图表中? fxsaber 2019.10.10 14:40 #25887 Igor Makanu: 基本上,正如预期的那样,选项2更快,对于5000次传球来说,收益约为30秒,也不错了。 如果能有一个汇编类似结果的主题,那就更好了。对于优化者来说是相关的。 Igor Makanu 2019.10.10 14:54 #25888 fxsaber:如果有一个收集类似结果的分支,那就好了。这与优化器有关。 我支持它,这不是我第一次在茫茫人海中测试和发布结果了 但我还没准备好开分店....,不好的教育,责任感会压得我喘不过气来,并保持话题的更新......我不确定我是否能够(())。 ZS:按照上面的例子....昨天没有决定再写这个线程的例子#2 SymbolInfoTick() 到SymbolInfoInteger(_Symbol, SYMBOL_TIME) ZZZY:这是我使用的一个例子,对我来说,在优化器中用5分钟的采样率寻找时间更方便--更少的次数,所以在优化器中的时间一般做成2个字节的ushort,如果是0--那么这个选项就不用了,我有更多的--检查如何用字节工作,但不是现在--在我的例子中,一旦在OnInit()中我分割字节--不是关键的 class CWorkTime { private: int m_starthour, m_stophour, m_startmin, m_stopmin; datetime m_starttime, m_stoptime; bool UseThisSession, NotIntraDay; void setTodayWorkTime(); public: void CWorkTime(const ushort worktime); bool Disable(); }; //+------------------------------------------------------------------+ void CWorkTime::CWorkTime(const ushort worktime): UseThisSession(true) { union UShortToByte { ushort u_short; uchar byte[2]; } ShortToByte; if(worktime == 0) { UseThisSession = false; Print("EA working time is not used"); } else { ShortToByte.u_short = worktime; int t = (int)(ShortToByte.byte[0] * 5.625); m_starthour = (int)(t / 60); m_startmin = t % 60; t = (int)(ShortToByte.byte[1] * 5.625); m_stophour = (int)(t / 60); m_stopmin = t % 60; NotIntraDay = m_starthour > m_stophour ? true : false; setTodayWorkTime(); printf("EA working time start: %d h %d min , end: %d h %d min", m_starthour, m_startmin, m_stophour, m_stopmin); } } //+------------------------------------------------------------------+ void CWorkTime::setTodayWorkTime() { MqlDateTime dtstart, dtstop; TimeCurrent(dtstart); dtstop = dtstart; dtstart.hour = m_starthour; dtstart.min = m_startmin; dtstop.hour = m_stophour; dtstop.min = m_stopmin; m_starttime = StructToTime(dtstart); m_stoptime = StructToTime(dtstop); if(NotIntraDay) m_stoptime += 86400; } //+------------------------------------------------------------------+ bool CWorkTime::Disable(void) { bool result = false; if(UseThisSession) { datetime time = (datetime)SymbolInfoInteger(_Symbol, SYMBOL_TIME); if(m_stoptime < time) setTodayWorkTime(); result = time >= m_starttime && time <= m_stoptime ? false : true; } return(result); }; //+------------------------------------------------------------------+ 使用方法。 int OnInit() { WorkTime=new CWorkTime(EA_Time); } void OnTick() { bool DisableTradingByTime=WorkTime.Disable(); ..... if(DisableTradingByTime) return; Artyom Trishkin 2019.10.10 14:58 #25889 fxsaber: 如果有一个收集类似结果的分支,那就好了。它与优化器有关。 在这个问题上,有一个类似的。 Алгоритмы, методы решений, сравнение их производительности 2017.12.10www.mql5.com В данной ветке будем обсуждать разные способы решения тех, или иных задач, сравнивать производительность предложенных решений... Alain Verleyen 2019.10.10 19:28 #25890 我可以得到一些细节:为什么SocketTlsReadAvailable()在Socket已连接(SocketIsConnected()返回真)时返回错误(5273 ERR_NETSOCKET_IO_ERROR)? 关于交易、自动交易系统和策略测试的论坛 虫子,虫子,问题 Alain Verleyen, 2019.08.29 01:17 关于mql SocketXXX函数()这条信息主要是针对Metaquotes的开发者。@Renat Fatkhullin, @Slava, @Ilyas 我正在使用下面的代码来控制安全连接上的信息接收。 int socket; //+------------------------------------------------------------------+ //| void OnTimer() | //+------------------------------------------------------------------+ void OnTimer() { string message; if(receive(message)) { //--- ... } } //+------------------------------------------------------------------+ //| Call every X ms | //+------------------------------------------------------------------+ bool receive(string &message) { //--- ... char response[]; message=""; ResetLastError(); uint len=SocketIsReadable(socket); if(len>1) { int read=SocketTlsReadAvailable(socket,response,len); //--- analyze the response if(read>0) { //--- ... message=CharArrayToString(response,0,read); return(true); } else if(read==-1) { if(SocketIsConnected(socket)) { printf("ERROR: %i, socket(%i) read: len=%i",_LastError,socket,len); } else { printf("ERROR: %i, socket(%i) not connected. len=%i",_LastError,socket,len); //--- ... } } } else { if(_LastError!=0) printf("ERROR: %i (SocketIsReadable).",_LastError); } //--- ... return(false); } 大多数时候,它都能正常工作。然而,尽管插座已经连接,我偶尔会得到一个错误信息,一段时间后(1到5/6个错误),它继续工作。 ...正确接收数据/信息 2019.08.29 00: 45: 43.019 XXXX (EURUSD, H1) ERROR: 5273, socket (1), read: len = 437 2019.08.29 00: 45: 43.237 XXXX (EURUSD, H1) ERROR: 5273, socket (1), read: len = 1242 ...正确接收数据/信息 错误5273是非常常见的,没有什么帮助。是否有可能获得有关此类错误的更多信息? Errors, bugs, questions SQLite: MQL5 原生 SQL MQL5 中的统计分布 - 充分利用 1...258225832584258525862587258825892590259125922593259425952596...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
关于ArrayResize的问题。我一次为几个千兆字节做了储备。然后我逐渐增加尺寸,这比最初的储备量要少。
为什么TaskManager在尺寸增加时显示内存消耗增加?
我们没有故意做任何事情--这是操作系统的一个特点(而且用户真的需要千兆字节吗?
如果你想在程序的一个关键点拥有 "热 "内存,你必须在该点之前 "运行 "所分配的块的页,以便进程的虚拟内存页得到物理的。
但是,从MQL来看,无法访问阵列的保留块。
我们并没有刻意为此做什么--这是操作系统的一个特点(而且用户真的需要千兆字节吗?
如果你想在程序的一个关键点上有热的内存,你必须在该点之前 "运行 "所分配的块的页,以便进程的虚拟内存页得到物理的。
但是,从MQL来看,无法访问阵列的保留块。
谢谢。我想知道如果一次对数千字节做完整的ArrayResize,性能应该受到什么影响。
经测试,在优化我的EA 时,运行了一个完整的超限值,共5000次,仅从测试者的日志中算起
1.14:04:28.365 - 14:15:47.481 = 11米19秒
2.13:49:56.885 - 14:00:30.819 = 10 m 34 sec.
3.14:28:35.89 - 14:41:11.659 = 12 m 36 sec
原则上,正如预期的那样,选项2更快,对于5000次运行来说,收益约为30秒,也相当不错。
请帮助通过WinAPI调用这个菜单。
我可以得到带有选定的EA名称的行。ComboBox中只有一行,与MT4不同。
但我不能调用菜单。BM_CLICK不起作用。
你如何在x64中使用信息?
使用WM_LBUTTONDOWN解决了这个问题。
int Array0[] = {};
基本上,正如预期的那样,选项2更快,对于5000次传球来说,收益约为30秒,也不错了。
如果能有一个汇编类似结果的主题,那就更好了。对于优化者来说是相关的。
如果有一个收集类似结果的分支,那就好了。这与优化器有关。
我支持它,这不是我第一次在茫茫人海中测试和发布结果了
但我还没准备好开分店....,不好的教育,责任感会压得我喘不过气来,并保持话题的更新......我不确定我是否能够(())。
ZS:按照上面的例子....昨天没有决定再写这个线程的例子#2 SymbolInfoTick() 到SymbolInfoInteger(_Symbol, SYMBOL_TIME)
ZZZY:这是我使用的一个例子,对我来说,在优化器中用5分钟的采样率寻找时间更方便--更少的次数,所以在优化器中的时间一般做成2个字节的ushort,如果是0--那么这个选项就不用了,我有更多的--检查如何用字节工作,但不是现在--在我的例子中,一旦在OnInit()中我分割字节--不是关键的
使用方法。
如果有一个收集类似结果的分支,那就好了。它与优化器有关。
我可以得到一些细节:为什么SocketTlsReadAvailable()在Socket已连接(SocketIsConnected()返回真)时返回错误(5273 ERR_NETSOCKET_IO_ERROR)?
关于交易、自动交易系统和策略测试的论坛
虫子,虫子,问题
Alain Verleyen, 2019.08.29 01:17
关于mql SocketXXX函数()这条信息主要是针对Metaquotes的开发者。@Renat Fatkhullin, @Slava, @Ilyas
我正在使用下面的代码来控制安全连接上的信息接收。
大多数时候,它都能正常工作。然而,尽管插座已经连接,我偶尔会得到一个错误信息,一段时间后(1到5/6个错误),它继续工作。
...正确接收数据/信息
2019.08.29 00: 45: 43.019 XXXX (EURUSD, H1) ERROR: 5273, socket (1), read: len = 437
2019.08.29 00: 45: 43.237 XXXX (EURUSD, H1) ERROR: 5273, socket (1), read: len = 1242
...正确接收数据/信息
错误5273是非常常见的,没有什么帮助。是否有可能获得有关此类错误的更多信息?