错误、漏洞、问题 - 页 2997 1...299029912992299329942995299629972998299930003001300230033004...3184 新评论 Francuz 2021.04.09 13:11 #29961 Alexey Viktorov:也许是滑雪板坏了?然后是RTS-6.21。 这是另一回事。你有什么经纪人,MT5是什么版本。 Francuz 2021.04.09 13:27 #29962 Alexey Viktorov:也许是滑雪板坏了?还有RTS-6.21。 谢谢你的帮助。弄明白了。从不同的文件夹连接了不同版本的指标。 Nikolai Semko 2021.04.09 13:30 #29963 Francuz:是的,我做到了。结果并没有改变。 我不相信。,再试试。 datetime a = D'2021.04.08 10:00:00'; int handle; double Buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { handle = iCustom(_Symbol, PERIOD_CURRENT, "Examples\\ATR.ex5", 14); ::Print(__FUNCTION__ + "| PERIOD_CURRENT = ", EnumToString(_Period)); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { if(prev_calculated>0 && handle != INVALID_HANDLE) { ::CopyBuffer(handle, 0, a, 1, Buffer); double BS = ::NormalizeDouble(Buffer[0], _Digits); ::Print(__FUNCTION__ + "| a = ", a); ::Print(__FUNCTION__ + "| BS ", BS); handle = INVALID_HANDLE; } // return value of prev_calculated for next call return(rates_total); } Francuz 2021.04.09 13:45 #29964 Nikolai Semko:我不相信。,再试试。我想明白了。问题是,来自不同文件夹的两个不同的ATR文件被连接起来。这就是为什么出现了价值差异。 谢谢你的帮助。 Alexey Viktorov 2021.04.09 16:38 #29965 Nikolai Semko:我不相信。,再试试。 尼古拉,他有一个不同的问题。我也没有立即理解这个问题,以为我需要从不同的TF中获取价值。润滑了滑雪板,一切都很顺利。 Nikolai Semko 2021.04.09 20:04 #29966 Alexey Viktorov: 尼古拉,他有一个不同的问题。我一开始也不明白这个问题,我以为我需要从另一个TF中获取数值。我给滑雪板上了油,一切都很顺利。 奇怪,我什么都不明白。 我完全按照他的描述 在我的问题中重现了他的问题。 它的发生正是因为CopyBuffer的唯一执行发生在OnCalculate的第一次运行中,当时prev_calculated == 0,而且不保证条形已经生成。 解决办法是忽略这第一次运行,只在prev_calculated>0时运行唯一的CopyBuffer。 我不明白"来自不同文件夹的两个不同ATR文件"。 Alexey Viktorov 2021.04.09 21:14 #29967 Nikolai Semko:奇怪,我什么都不明白。 我完全按照他的描述 在我的问题中重现了他的问题。 它的发生正是因为CopyBuffer的唯一执行发生在OnCalculate的第一次运行中,当时prev_calculated == 0,而且不保证条形已经生成。 解决办法是忽略这第一个调用,只在prev_calculated>0时执行单个CopyBuffer。 为什么会有"两个来自不同文件夹的不同ATR文件"--我不明白。 那么,如果打开图表并创建了当前TF的指标,那么当图表被打开时,数据应该已经准备好了。不是吗? Artyom Trishkin 2021.04.09 21:21 #29968 Alexey Viktorov:那么,如果打开一个图表,并为当前的TF创建一个指标,当图表打开时,数据应该已经准备好了。不是吗? 哦,有多少美妙的发现在等着我们......。更多 Nikolai Semko 2021.04.09 22:25 #29969 Alexey Viktorov:好吧,如果一个图表被打开,并且为当前的TF创建了一个指标,那么当图表被打开时,数据应该已经准备好了。不是吗? 我没有正确表达。酒吧是的--很可能他们已经准备好了。但不能保证在第一次调用OnCalculate时,当prev_calculated == 0时,指标已经对所有这些条形图进行了重新计算。 你可以运行这样的指标来确定。 但必须在交易报价时进行。如果市场关闭,你不会看到不匹配的情况。 因此,最好在周末时在加密货币上进行尝试,因为加密货币正在运动中。 如果Buffer数组的大小=-1,这意味着指标缓冲区还没有重新计算,BS值将不正确。 datetime a = D'2021.04.08 10:00:00'; int handle; double Buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { handle = iCustom(_Symbol, PERIOD_CURRENT, "Examples\\ATR.ex5", 14); ::Print(__FUNCTION__ + "| PERIOD_CURRENT = ", EnumToString(_Period)); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { if(handle != INVALID_HANDLE) { ::CopyBuffer(handle, 0, a, 1, Buffer); double BS = ::NormalizeDouble(Buffer[0], _Digits); ::Print(__FUNCTION__ + "| a = ", a); ::Print(__FUNCTION__ + "| BS ", BS); int total_bars = iBars(NULL,PERIOD_CURRENT); int size = CopyBuffer(handle, 0, 0, total_bars, Buffer); Print("Total Bars = " + string(total_bars) + ", Size of Buffer array = " + string(size)); handle = INVALID_HANDLE; } // return value of prev_calculated for next call return(rates_total); } 如果你在下一次调用OnCalculate(当prev_calculated>0时)时做,就不会有这样的问题。 SOM,代码中有一个错误--已经修正。 Alexey Viktorov 2021.04.10 05:19 #29970 Artyom Trishkin:哦,我们将有多么奇妙的发现......更多 我是指计算指标的数据。不要讽刺)))) 1...299029912992299329942995299629972998299930003001300230033004...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
也许是滑雪板坏了?
然后是RTS-6.21。
这是另一回事。你有什么经纪人,MT5是什么版本。
也许是滑雪板坏了?
还有RTS-6.21。
谢谢你的帮助。弄明白了。从不同的文件夹连接了不同版本的指标。
是的,我做到了。结果并没有改变。
我不相信。
,再试试。
我不相信。
,再试试。
我想明白了。问题是,来自不同文件夹的两个不同的ATR文件被连接起来。这就是为什么出现了价值差异。
谢谢你的帮助。我不相信。
,再试试。
尼古拉,他有一个不同的问题。我一开始也不明白这个问题,我以为我需要从另一个TF中获取数值。我给滑雪板上了油,一切都很顺利。
奇怪,我什么都不明白。
我完全按照他的描述 在我的问题中重现了他的问题。
它的发生正是因为CopyBuffer的唯一执行发生在OnCalculate的第一次运行中,当时prev_calculated == 0,而且不保证条形已经生成。
解决办法是忽略这第一次运行,只在prev_calculated>0时运行唯一的CopyBuffer。
我不明白"来自不同文件夹的两个不同ATR文件"。
奇怪,我什么都不明白。
我完全按照他的描述 在我的问题中重现了他的问题。
它的发生正是因为CopyBuffer的唯一执行发生在OnCalculate的第一次运行中,当时prev_calculated == 0,而且不保证条形已经生成。
解决办法是忽略这第一个调用,只在prev_calculated>0时执行单个CopyBuffer。
为什么会有"两个来自不同文件夹的不同ATR文件"--我不明白。
那么,如果打开图表并创建了当前TF的指标,那么当图表被打开时,数据应该已经准备好了。不是吗?
那么,如果打开一个图表,并为当前的TF创建一个指标,当图表打开时,数据应该已经准备好了。不是吗?
哦,有多少美妙的发现在等着我们......。更多
好吧,如果一个图表被打开,并且为当前的TF创建了一个指标,那么当图表被打开时,数据应该已经准备好了。不是吗?
我没有正确表达。酒吧是的--很可能他们已经准备好了。但不能保证在第一次调用OnCalculate时,当prev_calculated == 0时,指标已经对所有这些条形图进行了重新计算。
你可以运行这样的指标来确定。
但必须在交易报价时进行。如果市场关闭,你不会看到不匹配的情况。
因此,最好在周末时在加密货币上进行尝试,因为加密货币正在运动中。
如果Buffer数组的大小=-1,这意味着指标缓冲区还没有重新计算,BS值将不正确。
如果你在下一次调用OnCalculate(当prev_calculated>0时)时做,就不会有这样的问题。
SOM,代码中有一个错误--已经修正。
哦,我们将有多么奇妙的发现......更多
我是指计算指标的数据。不要讽刺))))