错误、漏洞、问题 - 页 1390 1...138313841385138613871388138913901391139213931394139513961397...3184 新评论 Renat Fatkhullin 2015.10.09 20:02 #13891 不要在指标init中等待,以完全创建指标。创建指标 和返回控制,所有的环境和历史将在以后准备好,你的重新计算代码将被调用。 Ilya Malev 2015.10.09 20:04 #13892 Renat Fatkhullin:不要在初始阶段就等待指标 的完全创建。创建指标和返回控制,所有的环境和历史将在以后准备好,你的重新计算代码将被调用。 谢谢,也就是说,在OnInit()返回后,每次收到数据时都要对4806进行检查? Renat Fatkhullin 2015.10.09 20:54 #13893 在每个数据读取点 Ilya Malev 2015.10.11 10:38 #13894 这是指标被调用的地方,其数值在OnCalculate 中被计算。你可以无限期地等待,不会发生重新计算的情况。要在周期图上运行,D1int i_ich=INVALID_HANDLE; double ind_buf[]; int OnInit(){ i_ich=iIchimoku(Symbol(), PERIOD_H4, 9, 26, 52); if(i_ich==INVALID_HANDLE){ Print("Невозможно создать индиктор Ишимоку!"); return(INIT_FAILED); } SetIndexBuffer(0, ind_buf, INDICATOR_DATA); ArraySetAsSeries(ind_buf, true); return(INIT_SUCCEEDED); } 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[]){ double temp[]; int copied=CopyBuffer(i_ich,0,0,1,temp); if(copied<=0){ datetime now=TimeLocal(); while(BarsCalculated(i_ich)<=0 && !IsStopped()){ Comment("Ждем пересчета индикатора Ишимоку... ",int(TimeLocal()-now)); } if(BarsCalculated(i_ich)>0){ Print("Расчитано ", BarsCalculated(i_ich), " баров за ",int(TimeLocal()-now)," секунд"); } Comment(""); } return(rates_total); }请解释为什么不计算石木读数。 Vladimir Karputov 2015.10.11 11:02 #13895 Ilya Malev:这是指标被调用的地方,其数值在OnCalculate中被计算。你可以无限期地等待,不会发生重新计算的情况。要在周期图上运行,D1 请解释为什么不计算石木读数。这样吧。//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2012, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 0 int i_ich=INVALID_HANDLE; double ind_buf[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { i_ich=iIchimoku(Symbol(),PERIOD_H4,9,26,52); if(i_ich==INVALID_HANDLE) { Print("Невозможно создать индиктор Ишимоку!"); return(INIT_FAILED); } SetIndexBuffer(0,ind_buf,INDICATOR_DATA); ArraySetAsSeries(ind_buf,true); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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[]) { static int count; Print(count); double temp[]; datetime now=TimeLocal(); int copied=CopyBuffer(i_ich,0,0,1,temp); if(copied>0) Print("Расчитано ",BarsCalculated(i_ich)," баров за ",int(TimeLocal()-now)," секунд"); count++; return(rates_total); } //+------------------------------------------------------------------+ ? Renat Fatkhullin 2015.10.11 11:07 #13896 你永远不应该在指标代码中循环期望值。在脚本和专家顾问中,你可以,但在指标中你绝对不能。指标中计算和请求外部数据的策略应该是这样的:如果数据请求不成功,那么我们立即退出,推迟到下一个tick进行计算。在下一次勾选/调用中,我们将再次尝试要求提供必要的数据。 Ilya Malev 2015.10.11 11:09 #13897 Karputov Vladimir:如果是的话。 ? 输出 "0"(因为今天是周日,没有重启OnCalculate)。 Ilya Malev 2015.10.11 11:10 #13898 Renat Fatkhullin:你永远不应该在指标代码中循环期望值。在脚本和专家顾问中,你可以,但在指标中你绝对不能。在指标中计算和请求外国数据的策略应该如下:如果数据请求不成功,那么我们立即退出,将计算推迟到下一个 tick。在下一次勾选/调用中,我们将再次尝试要求提供必要的数据。 好的,但如果指标读数 应该在一次运行中计算,而不需要等待下一个tick,怎么办?例如,如果有一个周末或只是一个低流动性的时期,当滴答声超出一分钟?使用OnTimer而不是OnCalculate? Vladimir Karputov 2015.10.11 11:10 #13899 Ilya Malev: 输出 "0"(因为今天是周日,所以没有重新运行OnCalculate。) 在测试器中,在测试器中!而在周末,你需要右键点击图表并 "刷新"。 Ilya Malev 2015.10.11 11:18 #13900 在按下 "刷新 "键后,一切都被计算出来了。如果在inite中创建的指标数据在第一次调用OnCalculate/OnTimer 等之前被计算出来,那就更方便了。如果有可能在指标内部的循环中初始化后等待它们的计算,那就很有用了。为了计算该指标,用户应该在图表上按几次 "刷新"。他是否需要它。尽管MT5有一些优势,但他会记得老式的MT4,并将继续使用它。 1...138313841385138613871388138913901391139213931394139513961397...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
不要在指标init中等待,以完全创建指标。
创建指标 和返回控制,所有的环境和历史将在以后准备好,你的重新计算代码将被调用。
不要在初始阶段就等待指标 的完全创建。
创建指标和返回控制,所有的环境和历史将在以后准备好,你的重新计算代码将被调用。
这是指标被调用的地方,其数值在OnCalculate 中被计算。你可以无限期地等待,不会发生重新计算的情况。要在周期图上运行,D1
请解释为什么不计算石木读数。
这是指标被调用的地方,其数值在OnCalculate中被计算。你可以无限期地等待,不会发生重新计算的情况。要在周期图上运行,D1
请解释为什么不计算石木读数。
这样吧。
?你永远不应该在指标代码中循环期望值。在脚本和专家顾问中,你可以,但在指标中你绝对不能。
指标中计算和请求外部数据的策略应该是这样的:如果数据请求不成功,那么我们立即退出,推迟到下一个tick进行计算。在下一次勾选/调用中,我们将再次尝试要求提供必要的数据。
如果是的话。
?你永远不应该在指标代码中循环期望值。在脚本和专家顾问中,你可以,但在指标中你绝对不能。
在指标中计算和请求外国数据的策略应该如下:如果数据请求不成功,那么我们立即退出,将计算推迟到下一个 tick。在下一次勾选/调用中,我们将再次尝试要求提供必要的数据。
输出 "0"(因为今天是周日,所以没有重新运行OnCalculate。)
在按下 "刷新 "键后,一切都被计算出来了。如果在inite中创建的指标数据在第一次调用OnCalculate/OnTimer 等之前被计算出来,那就更方便了。
如果有可能在指标内部的循环中初始化后等待它们的计算,那就很有用了。
为了计算该指标,用户应该在图表上按几次 "刷新"。他是否需要它。尽管MT5有一些优势,但他会记得老式的MT4,并将继续使用它。