一个指标出现了除以零的错误 - 页 6 1234567891011 新评论 [删除] 2018.07.04 15:44 #51 Aleksey Vyazmikin:从逻辑上讲,它根本不应该等于零--不清楚为什么会出现这种情况! 你的d1给出的数字很小,我通过将价格转换为int来避免这种问题,例如int bid=int((tick_array[0].bid+_Point/10)/_Point);当然,有时它给出的5位数字是0.00000999999,如果以双数计算的话。 Sergey Savinkin 2018.07.04 15:50 #52 Aleksey Vyazmikin:按照逻辑,它根本不应该是零--我不明白它为什么会这样做!?在Si-9.18的调试器中运行。 由于某种原因,速率中的时间是2016年。虽然i的值是2189。因此,它从图表的开头 开始计算,那里没有流动资金。启动和停止之间的初始时间为1小时。但对于那一小时,只有一个时间值。它用开始和停止两个变量找到它。因此,开始=停止。当然,如果你减去它们,你会得到零。我还没有想出其他的办法。 Aleksey Vyazmikin 2018.07.04 15:53 #53 ovak77: 你的d1有很小的数字,我避免了这种问题,将价格转换为int,即例如int bid=int((tick_array[0].bid+_Point/10)/_Point);当然,如果用双数计算,有时会返回0。我们不要讨论d1--如果它是必要的,那么它就是必要的,一切都在那里被正确计算。问题是,为什么我们的start_time和stop_time,以及start_index和stop_index的值都一样? [删除] 2018.07.04 15:57 #54 Aleksey Vyazmikin:我们不要讨论d1--如果它是必要的,那么它就是必要的,一切都在那里被正确计算。问题是,为什么我们得到的start_time和stop_time的值与start_index和stop_index的值相同? 这取决于你,试着用0.0000099999除以2,例如 Aleksey Vyazmikin 2018.07.04 15:58 #55 再次挂断后,终端停止工作....我怎样才能在不重新安装的情况下复活它? 结果发现在内存中被挂起--强行杀了这个进程--它开始了。 Sergey Savinkin 2018.07.04 16:12 #56 Aleksey Vyazmikin:时间怎么可能变得相等呢?半年来,一切都在正常工作......。void CreateFigure(int i,const datetime &Time[],const double &Open[],const double &High[],const double &Low[],const double &Close[],MqlRates &rates[]) { //i = 2189 datetime start_time=rates[i].time; //start_time=rates[i].time = D'2016.10.06 12:00:00' datetime stop_time=(start_time+PeriodSeconds(TimeFrames)); //stop_time = D'2016.10.06 13:00:00' //--- //Time[38572] = D'2016.10.05 19:23:00' int start_index,stop_index,limit; //Time[38571] = D'2016.10.06 12:35:00' datetime vertical_line_time; //Time[38570] = D'2016.10.06 19:05:00' //--- start_index=ArrayBsearch(Time,start_time); //start_index = 38571 if(Time[start_index]<start_time) start_index=(start_index>0?start_index-1:start_index); start_time=Time[start_index]; //start_time = D'2016.10.06 12:35:00' if(i>0) { stop_index=ArrayBsearch(Time,stop_time); //stop_index = 38571 if(Time[stop_index]>stop_time) stop_index++; stop_time=Time[stop_index]; //stop_time = D'2016.10.06 12:35:00' limit=start_index-stop_index+1; vertical_line_time=Time[start_index-(limit>>1)]; 你首先有limit=start_index-stop_index+1,即limit==1,然后在除以2的地方,limit=(int)(stop_time-start_time)/PeriodSeconds(_Period)。一个是不加。零除以周期。 Aleksey Vyazmikin 2018.07.04 16:15 #57 Sergey Savinkin:在Si-9.18的调试器中运行。 由于某种原因,速率中的时间是2016年。虽然i的值是2189。因此,它从图表的开头 开始计算,那里没有流动资金。启动和停止之间的初始时间为1小时。但对于那一小时,只有一个时间值。它用开始和停止两个变量找到它。因此,开始=停止。当然,如果你减去它们,你会得到零。我还没有想出其他的办法。把BarsUsed=100放在传入参数中。 Sergey Savinkin 2018.07.04 16:22 #58 Aleksey Vyazmikin:把BarsUsed=100放在传入参数中。是的,这样就不会发生错误。但是,如果你进入一些非流动性的工具或非流动性的时间--例如晚间时段,那么你可以很容易地在一小时内得到一个低点。因此,极限=0对你来说是有保证的!而如果报价是2 - 那么limit/2在四舍五入后仍然会给出0。 Aleksey Vyazmikin 2018.07.04 16:37 #59 Sergey Savinkin:是的,这不是一个错误。但如果你进入一些非流动性的工具或非流动性的时间--例如,在晚间时段,你可能很容易在一个小时内得到一个低点。因此,极限=0对你来说是有保证的!而如果引号是2--那么极限/2在四舍五入后仍将是0。也许,我会考虑一下,谢谢你。但全球问题是另一回事....问题是,它并不稳定。 Aleksey Vyazmikin 2018.07.04 16:39 #60 ovak77: 这取决于你,试着用0.0000099999除以2,例如打印的d1--就我的目的而言,它是 2018.07.04 19:38:06.404 IndDrafter_Test (Si-9.18,M1) d1=35.71428571428572 2018.07.04 19:38:06.404 IndDrafter_Test (Si-9.18,M1) d1=32.78688524590164 2018.07.04 19:38:06.404 IndDrafter_Test (Si-9.18,M1) d1=32.78688524590164 2018.07.04 19:38:06.404 IndDrafter_Test (Si-9.18,M1) d1=32.78688524590164 2018.07.04 19:38:06.404 IndDrafter_Test (Si-9.18,M1) d1=43.47826086956522 总之,这不是重点,谢谢。 1234567891011 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
从逻辑上讲,它根本不应该等于零--不清楚为什么会出现这种情况!
按照逻辑,它根本不应该是零--我不明白它为什么会这样做!?
在Si-9.18的调试器中运行。 由于某种原因,速率中的时间是2016年。虽然i的值是2189。因此,它从图表的开头 开始计算,那里没有流动资金。启动和停止之间的初始时间为1小时。但对于那一小时,只有一个时间值。它用开始和停止两个变量找到它。因此,开始=停止。当然,如果你减去它们,你会得到零。我还没有想出其他的办法。
你的d1有很小的数字,我避免了这种问题,将价格转换为int,即例如int bid=int((tick_array[0].bid+_Point/10)/_Point);当然,如果用双数计算,有时会返回0。
我们不要讨论d1--如果它是必要的,那么它就是必要的,一切都在那里被正确计算。问题是,为什么我们的start_time和stop_time,以及start_index和stop_index的值都一样?
我们不要讨论d1--如果它是必要的,那么它就是必要的,一切都在那里被正确计算。问题是,为什么我们得到的start_time和stop_time的值与start_index和stop_index的值相同?
再次挂断后,终端停止工作....我怎样才能在不重新安装的情况下复活它?
结果发现在内存中被挂起--强行杀了这个进程--它开始了。
时间怎么可能变得相等呢?半年来,一切都在正常工作......。
在Si-9.18的调试器中运行。 由于某种原因,速率中的时间是2016年。虽然i的值是2189。因此,它从图表的开头 开始计算,那里没有流动资金。启动和停止之间的初始时间为1小时。但对于那一小时,只有一个时间值。它用开始和停止两个变量找到它。因此,开始=停止。当然,如果你减去它们,你会得到零。我还没有想出其他的办法。
把BarsUsed=100放在传入参数中。
把BarsUsed=100放在传入参数中。
是的,这样就不会发生错误。但是,如果你进入一些非流动性的工具或非流动性的时间--例如晚间时段,那么你可以很容易地在一小时内得到一个低点。因此,极限=0对你来说是有保证的!而如果报价是2 - 那么limit/2在四舍五入后仍然会给出0。
是的,这不是一个错误。但如果你进入一些非流动性的工具或非流动性的时间--例如,在晚间时段,你可能很容易在一个小时内得到一个低点。因此,极限=0对你来说是有保证的!而如果引号是2--那么极限/2在四舍五入后仍将是0。
也许,我会考虑一下,谢谢你。但全球问题是另一回事....问题是,它并不稳定。
这取决于你,试着用0.0000099999除以2,例如
打印的d1--就我的目的而言,它是
总之,这不是重点,谢谢。