使用iClose/iOpen时间序列访问等工作时的MQL5错误。 - 页 5 12345678910 新评论 fxsaber 2018.11.14 19:21 #41 Renat Fatkhullin:请告诉我指标的参考代码,它总是保持市场观察中每个符号的最新 2000点。 否则,你会得到一边是猜测,另一边只是以文字形式的建议。 _o0O 2018.11.14 19:24 #42 Renat Fatkhullin:我必须看一下代码。 上面的代码显然有一堆的逻辑和资源问题。我正在做这样的事情,如果有必要,请告诉我如何以及如何调整。 bool flag = true; //+————————————————————————————————————————————————————————————————————————————+ int OnInit () { /* тут определены и настроены буферы */ flag = true; //--- return (INIT_SUCCEEDED); } //+————————————————————————————————————————————————————————————————————————————+ //+————————————————————————————————————————————————————————————————————————————+ void OnDeinit (const int reason) { //--- destroy timer EventKillTimer (); } //+————————————————————————————————————————————————————————————————————————————+ //+————————————————————————————————————————————————————————————————————————————+ int OnCalculate (const int rates_total, const int prev_calculated, const datetime &time [], const double &open [], const double &high [], const double &low [], const double &close [], const long &tick_volume [], const long &volume [], const int &spread []) { //Print ("---"); //Print (rates_total, " ", prev_calculated); //Print ("---"); if (flag) { if (SeriesInfoInteger (Symbol (), Period (), SERIES_SYNCHRONIZED)) { Print ("1 История синхронизирована"); int bars = Bars (Symbol (), Period ()); Print ("Баров в истории ", bars); MqlTick ticks_array []; datetime from = TimeByNumberOfCandles (Symbol (), PERIOD_M1, ParentCandles_P); MqlDateTime sdt; ulong from_msc = ((ulong)from) * 1000; ResetLastError (); int count = CopyTicksRange (Symbol (), ticks_array, COPY_TICKS_INFO, from_msc); //, to_msc); Print ("Скопировано ", count, " тиков"); int error = GetLastError (); Print (error); if (count <= 0 || error != 0) { Print ("Ошибка при получении данных"); return (rates_total); } Print (ticks_array [0].time_msc, " ", ticks_array [count - 1].time_msc); // 0-й самый старый for (int i = 0; i < count; i++) { // тут вычисления и операции с тиками } /* тут заполнение индикаторных буферов значениями полученными после работы с тиками */ } flag = false; } else { Print ("2 История НЕ синхронизирована!"); return (rates_total); } } return (rates_total); } //+————————————————————————————————————————————————————————————————————————————+ Vitaly Muzichenko 2018.11.14 19:26 #43 Renat Fatkhullin:我必须看一下代码。 上面的代码显然有一堆的逻辑和资源问题。这段代码是否存在逻辑问题,或者我是否遗漏了什么? 关于交易、自动交易系统和策略测试的论坛 MQL5在iClose/iOpen时间序列访问等方面的错误。 Stanislav Dray, 2018.11.14 16:28 你对错误报告的态度很奇怪。我又不是拿钱来证明什么。我已经尽可能地阐述了这种情况。 我不是唯一有问题的人,问题出现在你的第30次更新之后,但你仍然影射我是个傻瓜,并指责一些弱智的指标。 在这之前,他们不是已经慢了一年了吗? 下面是一个代码的例子,它在M30上启动25分钟后挂起。 //+------------------------------------------------------------------+ //| Feezzzz.mq5 | //| Copyright 2018, Dray Stanislav | //| https://www.mql5.com/ru/users/fan9 | //+------------------------------------------------------------------+ #property copyright "Copyright 2018, Dray Stanislav" #property link "https://www.mql5.com/ru/users/fan9" #property version "1.00" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- datetime CM1_T[1]; if(CopyTime(_Symbol,PERIOD_M1,0,1,CM1_T)==-1){ Comment("\n\n CopyTime return -1"); return; } Comment("\n\n CopyTime : "+TimeToString(CM1_T[0],TIME_DATE | TIME_SECONDS)); } //+------------------------------------------------------------------+ //| Trade function | //+------------------------------------------------------------------+ void OnTrade() { //--- } //+------------------------------------------------------------------+ transcendreamer 2018.11.14 19:46 #44 Renat Fatkhullin:你在写指标时应该清楚地认识到,你不会一下子得到所有东西。 在OnInit中,你必须通过单次调用CopyXXX来刺激加载所需仪器的历史记录,但你必须等待OnCalculate中的完全初始化。 你的初始化阶段似乎有一个错误--你在错误地等待数据,并且阻塞了。我将努力这样做。 现在我向OnCalculate提出请求,并在那里等待(当然不是每一个tick,而是只在第一次计算时)。 transcendreamer 2018.11.14 19:52 #45 fxsaber:请告诉我指标的参考代码,它总是保持市场观察中每个符号的最新 2000点。 我不知道如何使用它,但我确信我有权利使用它。我同意!这甚至不是针对蜱虫,而是针对酒吧。 你需要一个批准的真实多货币代码的例子。 否则,我们将继续处于黑暗之中......。 Vitaly Muzichenko 2018.11.14 19:55 #46 我将尝试定位错误,并在发现后汇报。 _o0O 2018.11.14 19:59 #47 transcendreamer:我同意!最好连虱子都没有,而是酒吧。 我们需要一个被批准的真实多货币代码的例子。 否则,我们仍然会被蒙在鼓里......。 条形图和刻度图是独立存在于MT5中的不同表征。 Farkhat Guzairov 2018.11.15 03:24 #48 Vladimir Karputov:我们也一直建议,如果你在使用别人的时间框架--你应该每分钟从该时间框架获得一次OHLC(任何CopyXXXX功能)。这种情况一直存在。我已经想吐槽这里的一切了,但不幸的是,我已经在MQ产品上花了大约10年时间。 现在都是生意。Vladimir你关于使用CopyXXXX函数的建议被我采用了,因为从我的非专业编写的代码来看,这没有任何困难。 老实说,我希望问题只出在我那双弯曲的手上,但问题不只出在手上。我在下面有一张截图,预计技术支持会有奇怪的解释,说我的编码不正确,还有100500个其他指标,所以你想要什么,会有问题。我没有100500个其他指标,也没有专家,我在终端中只打开了两个工具,指标测试在欧元兑美元1M上运行,指标调用的是同一工具的M15时间框架的数据,我没有试图加载其他符号数据,在市场回顾中只有少数符号。 对于终端来说,这是一个理想的装载情况,当然,在工作条件下不会有这种情况,但即使在这种情况下,也有一个问题,在我看来,这个问题叫做 "BAG"。 在指标中,iClose和iBars函数被调用只是为了反映Commet()中的状态。在截图创建时的市场回顾中,iClose和iBars函数调用的当前状态在终端窗口中,进一步说,指标的计算部分使用CopyXXXX函数。 如你所见,指标在16:31重新加载并成功运行(我甚至得到了快乐),但iClose数据更新在00:15后停止,分别是CopyXXXX函数也没有返回更新的数据,即错误发生在MT深处的某个地方。 在我看来,从服务器上读取数据时出现了故障,原因可能是大众化的(没有网络,服务器很忙等),但为什么消除了通信原因后恢复工作却没有发生,所以我的结论是,你可以尽情地测试用户的源代码,但如果你有一个隔壁的服务器,这个问题你永远也不会发现,它的存在并不只是因为手脚不好的编码员而发生。 Sergey Klimov 2018.11.15 07:53 #49 昨天还决定测试一下Stanislav的代码。几个小时后,时间更新停止了。我没有切换时间框架,我只是通过图表的上下文菜单 进行了更新,时间继续进行。 今天我对代码进行了一些修改,以观察当前时间框架的时间。 void OnTick() { datetime CM1_T[1]; datetime CM2_T[1]; CopyTime(_Symbol,PERIOD_M1,0,1,CM1_T); CopyTime(_Symbol,PERIOD_CURRENT,0,1,CM2_T); Comment("CopyTime PERIOD_CURRENT: "+TimeToString(CM2_T[0],TIME_DATE | TIME_SECONDS)+"\nCopyTime PERIOD_M1: "+TimeToString(CM1_T[0],TIME_DATE | TIME_SECONDS)); }15分钟后,它在 "非本地 "的时间范围内停止了更新,但在当前的时间范围内,它在正常更新。刷新图表后,时间又开始了。 终端在便携模式下运行。系统和终端本身位于一个SSD磁盘上。 Farkhat Guzairov 2018.11.15 08:09 #50 我不知道发生了什么,但当我在MQL5中为最新的MQ锦标赛编写机器人时,它是多货币的,我没有注意到从其他工具加载数据的问题。 它可能消耗了大量的资源,但它给出了预期的结果,而不是像现在这样的轮盘游戏。 这个问题,例如作为MQL5商业产品的开发者,将不会给我带来很好的印象,如果有人为从市场上购买的产品付款,而它只是因为这样的 "BOGS "而看起来有问题,这将是加倍不愉快的。 12345678910 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
请告诉我指标的参考代码,它总是保持市场观察中每个符号的最新 2000点。
否则,你会得到一边是猜测,另一边只是以文字形式的建议。
我必须看一下代码。
上面的代码显然有一堆的逻辑和资源问题。
我正在做这样的事情,如果有必要,请告诉我如何以及如何调整。
我必须看一下代码。
上面的代码显然有一堆的逻辑和资源问题。
这段代码是否存在逻辑问题,或者我是否遗漏了什么?
关于交易、自动交易系统和策略测试的论坛
MQL5在iClose/iOpen时间序列访问等方面的错误。
Stanislav Dray, 2018.11.14 16:28
你对错误报告的态度很奇怪。我又不是拿钱来证明什么。我已经尽可能地阐述了这种情况。
我不是唯一有问题的人,问题出现在你的第30次更新之后,但你仍然影射我是个傻瓜,并指责一些弱智的指标。
在这之前,他们不是已经慢了一年了吗?
下面是一个代码的例子,它在M30上启动25分钟后挂起。
你在写指标时应该清楚地认识到,你不会一下子得到所有东西。
在OnInit中,你必须通过单次调用CopyXXX来刺激加载所需仪器的历史记录,但你必须等待OnCalculate中的完全初始化。
你的初始化阶段似乎有一个错误--你在错误地等待数据,并且阻塞了。
我将努力这样做。
现在我向OnCalculate提出请求,并在那里等待(当然不是每一个tick,而是只在第一次计算时)。
请告诉我指标的参考代码,它总是保持市场观察中每个符号的最新 2000点。
我不知道如何使用它,但我确信我有权利使用它。
我同意!这甚至不是针对蜱虫,而是针对酒吧。
你需要一个批准的真实多货币代码的例子。
否则,我们将继续处于黑暗之中......。
我将尝试定位错误,并在发现后汇报。
我同意!最好连虱子都没有,而是酒吧。
我们需要一个被批准的真实多货币代码的例子。
否则,我们仍然会被蒙在鼓里......。
我们也一直建议,如果你在使用别人的时间框架--你应该每分钟从该时间框架获得一次OHLC(任何CopyXXXX功能)。这种情况一直存在。
我已经想吐槽这里的一切了,但不幸的是,我已经在MQ产品上花了大约10年时间。
现在都是生意。Vladimir你关于使用CopyXXXX函数的建议被我采用了,因为从我的非专业编写的代码来看,这没有任何困难。
老实说,我希望问题只出在我那双弯曲的手上,但问题不只出在手上。我在下面有一张截图,预计技术支持会有奇怪的解释,说我的编码不正确,还有100500个其他指标,所以你想要什么,会有问题。我没有100500个其他指标,也没有专家,我在终端中只打开了两个工具,指标测试在欧元兑美元1M上运行,指标调用的是同一工具的M15时间框架的数据,我没有试图加载其他符号数据,在市场回顾中只有少数符号。
对于终端来说,这是一个理想的装载情况,当然,在工作条件下不会有这种情况,但即使在这种情况下,也有一个问题,在我看来,这个问题叫做 "BAG"。
在指标中,iClose和iBars函数被调用只是为了反映Commet()中的状态。在截图创建时的市场回顾中,iClose和iBars函数调用的当前状态在终端窗口中,进一步说,指标的计算部分使用CopyXXXX函数。
如你所见,指标在16:31重新加载并成功运行(我甚至得到了快乐),但iClose数据更新在00:15后停止,分别是CopyXXXX函数也没有返回更新的数据,即错误发生在MT深处的某个地方。
在我看来,从服务器上读取数据时出现了故障,原因可能是大众化的(没有网络,服务器很忙等),但为什么消除了通信原因后恢复工作却没有发生,所以我的结论是,你可以尽情地测试用户的源代码,但如果你有一个隔壁的服务器,这个问题你永远也不会发现,它的存在并不只是因为手脚不好的编码员而发生。
昨天还决定测试一下Stanislav的代码。几个小时后,时间更新停止了。我没有切换时间框架,我只是通过图表的上下文菜单 进行了更新,时间继续进行。
今天我对代码进行了一些修改,以观察当前时间框架的时间。
15分钟后,它在 "非本地 "的时间范围内停止了更新,但在当前的时间范围内,它在正常更新。刷新图表后,时间又开始了。
终端在便携模式下运行。系统和终端本身位于一个SSD磁盘上。
我不知道发生了什么,但当我在MQL5中为最新的MQ锦标赛编写机器人时,它是多货币的,我没有注意到从其他工具加载数据的问题。
它可能消耗了大量的资源,但它给出了预期的结果,而不是像现在这样的轮盘游戏。
这个问题,例如作为MQL5商业产品的开发者,将不会给我带来很好的印象,如果有人为从市场上购买的产品付款,而它只是因为这样的 "BOGS "而看起来有问题,这将是加倍不愉快的。