新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 961

 
Yevhenii Levchenko:

我有什么要说的:是否会发生这种情况,是否也是由于引文中的某种裂缝,还是我写错了什么?

你想让我告诉你,MT4测试器不能正常工作吗?- 你不会听到你的截图中出现错误的ticks 或bar--测试器将从任何可能的低TF中生成一切。

开发人员一直在回答像你这样的问题--正确地编写代码!

我给你看了一个如何写代码的例子....我看不到,也不感兴趣:)))- 忙着看文章,我就去写代码了

 
Igor Makanu:

你想让我告诉你,MT4测试器不能正常工作吗?- 你不会听到你的截图中出现错误的ticks 或bar--测试器将从任何可能的低TF中生成一切。

开发人员一直在回答像你这样的问题--正确地编写代码!

我给你看了一个如何写代码的例子....我看不到,也不感兴趣:)))- 忙着看文章,我将开始研究我的代码。

好的!谢谢你

 
Yevhenii Levchenko:

好的!谢谢你

可能会派上用场:https://www.mql5.com/ru/forum/165405#comment_5602248

Архивные котировки от Metaquotes
Архивные котировки от Metaquotes
  • 2017.01.02
  • www.mql5.com
Ситуация: В терминале MT4 по клавише F2 можно закачать архивные котировки. Они нужны всем, кто разрабатывает свою торговую систему...
 

下午好,同志们。我正在学习用mql4写一些简单的东西,现在我正在尝试用数组工作。 我不明白这段代码的错误在哪里。

   double d1 = NormalizeDouble(Low[iLowest(NULL, 0, MODE_LOW, MaxLimit, 0)],4);
   double d2 = NormalizeDouble(High[iHighest(NULL, 0, MODE_HIGH, MaxLimit, 0)],4);
   double CrossBarsNum[][2];
   for (double d = d1; d <= d2; d += 0.0001)
     {
       double a = 0.0;
       for(int i = 0; i < MaxLimit; i++)
           if(d > Low[i] && d < High[i])
               a+=1;
               CrossBarsNum[(d-d1)/0.0001,0] = d;
               CrossBarsNum[(d-d1)/0.0001,1] = a;

它在最后两行的整数表达式预期的措辞上崩溃了。根据我的理解,数组中的索引可以用公式来设置。它需要在数组字符串中搜索,并依次记录引号和包含这种引号的条数。该公式给出了一个整数值(从0到更高,增量为1),那么错误是什么?

 
Azat0t:

下午好,同志们。我正在学习用mql4写一些简单的东西,现在我正在尝试用数组工作。 我不明白这段代码的错误在哪里。

它在最后两行的整数表达式预期的措辞上崩溃了。根据我的理解,数组中的索引可以用公式来设置。它需要在数组字符串中搜索,并依次记录引号和包含这种引号的条数。该公式返回一个整数值(从0到更高,步长为1),那么错误在哪里?

让数组索引成为int类型,而不是double类型。数组索引应该是一个整数。

 
Sergey Basov:

可能会派上用场:https://www.mql5.com/ru/forum/165405#comment_5602248

谢谢你!我几乎一直是这样做的。加载后,我按下了 "刷新 "键--引号是不同的。我忘了我为机器人的工作设定了时间限制。:)
 
Azat0t:

下午好,同志们。我正在学习用mql4写一些简单的东西,现在我正在尝试用数组工作。 我不明白这段代码的错误在哪里。

它在最后两行的整数表达式预期的措辞上崩溃了。根据我的理解,数组中的索引可以用公式来设置。它需要在数组字符串中搜索,并依次记录引号和包含这种引号的条数。该公式返回一个整数值(从0到更高,步长为1),那么错误在哪里?

使用明确的类型转换

               CrossBarsNum[int((d-d1)/0.0001),0] = d;
               CrossBarsNum[int((d-d1)/0.0001),1] = a;
 
谢谢,我修正了错误,但还是没有结果:阵列没有填满。这能与什么相联系?
   int handle;
   handle = FileOpen("FindLevels.txt", FILE_CSV|FILE_WRITE, '\t');
   double d1 = NormalizeDouble(Low[iLowest(NULL, 0, MODE_LOW, MaxLimit, 0)],4);
   double d2 = NormalizeDouble(High[iHighest(NULL, 0, MODE_HIGH, MaxLimit, 0)],4);
   double CrossBarsNum[][2];
   for (double d = d1; d <= d2; d += 0.0001)
     {
       double a = 0.0;
       for(int i = 0; i < MaxLimit; i++)
           if(d > Low[i] && d < High[i])
               a++;
               CrossBarsNum[int((d-d1)/0.0001),0] = a;
               CrossBarsNum[int((d-d1)/0.0001),1] = d;
     } 
   FileWrite(handle, CrossBarsNum[11,1], d, d1, d2, a, ArraySize(CrossBarsNum));
   //FileWriteArray(handle, CrossBarsNum, 0, WHOLE_ARRAY);
   FileClose(handle);
   return(0);
变量d、d1、d2完全工作
 
Azat0t:
谢谢,我修正了错误,但还是没有结果:数组没有被填充。这能和什么联系起来呢? 变量d、d1、d2正好可以工作
你的数组大小 在第一维中总是为零。我没有在任何地方看到ArrayResize()。
 
Azat0t:
谢谢,我修正了错误,但还是没有结果:数组没有被填充。这可能是什么原因呢? 变量d、d1、d2正好可以工作

不要忘了把

#property strict
修复所有的错误,也许一切都会好起来的。学习使用调试器。随着一步步的执行,所有问题都被揭示出来。
原因: