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

 

明白了,改了。

   uint n=0;

错误已经消失。谢谢你。

 
Sergey Voytsekhovsky:

明白了,改了。

错误已经消失。谢谢你。

这些不是错误,是警告。

关于交易、自动交易系统和策略测试的论坛

新手对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论

Artyom Trishkin, 2019.05.20 15:16

变量n 和 period_find 的类型是什么 最重要的事情,并没有显示...

试试吧。

for(n=0; n<(int)period_find; n++)

一般来说,你为什么要在OnTick()处理程序级别声明一个循环变量?

你可以这样做。

for(int n=0; n<(int)period_find; n++)

你可以从OnTick()中删除n声明--我们不需要它。


 
Artyom Trishkin:

这些不是错误,是警告。


很好,我会解决这个问题。

如果你不介意我这么说,请给我一个提示,在这种情况下,我怎样才能得到创建箭头的价格值。假设我已经有了他们的索引。???

 

现在是以不同的方式在骂人。

'n' - 未声明的标识符 Test_iCustom.mq5 82 48

可能是因为n被用在了循环之外,作为一个找到的索引?
 
         for(int n=0; n<(int)period_find; n++)
            {
               if(Buf_Arrow_Buy[n]!=EMPTY_VALUE)break;
            }
         Last_Arrow_Buy_volume = Buf_Arrow_Buy[n];
         Last_Arrow_Buy_index  = n;
 
Sergey Voytsekhovsky:

很好,我会解决这个问题。

如果你不介意我这么说,请给我一个提示,我怎样才能得到创建箭头的价格值。假设我已经有了他们的索引。???

iOpen(),或CopyOpen(),或CopyRates(),如果一次获得几个价格的话。

在我看来,在该指标中,箭头被放置在图表上的条形图的开盘价。

Документация по MQL5: Доступ к таймсериям и индикаторам / iOpen
Документация по MQL5: Доступ к таймсериям и индикаторам / iOpen
  • www.mql5.com
Значение цены открытия бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError(). Функция всегда возвращает актуальные данные, для этого она при каждом вызове делает запрос к таймсерии по указанным символу/периоду. Это означает...
 
Artyom Trishkin:

iOpen(),或CopyOpen(),或CopyRates(),如果一次获得多个价格。

在我看来,该指标在图表中的开盘价处设置了箭头。

是的,那里是这么说的。

SetArrow(prefix+"ChartArrowUP_"+TimeToString(time[i]),InpColorBullishArrow,time[i],open[i],(char)241,ANCHOR_TOP,InpArrowSize);

我将尝试iOpen()

而代替n的是我添加了另一个变量,或者可以这样:?

   int n=0;
   
   if (CopyBuffer(CrossAD, 1, 0, period_find, Buf_Arrow_Buy) != period_find)
      {  
         Print("НЕ удалось правильно скопировать данные из 1-го буфера индикатора iCrossAD, error code %d",GetLastError());
         return;
      }
         for(n=0; n<(int)period_find; n++)
            {
               if(Buf_Arrow_Buy[n]!=EMPTY_VALUE)break;
            }
         Last_Arrow_Buy_volume = Buf_Arrow_Buy[n];
         Last_Arrow_Buy_index  = n;
         Print("Last_Arrow_Buy_volume = ",Last_Arrow_Buy_volume,", Last_Arrow_Buy_index = ",Last_Arrow_Buy_index);
 
Sergey Voytsekhovsky:

循环变量的范围 只限于循环体。在休息前分配所需的值。

//+------------------------------------------------------------------+
for(int i=0; i<(int)period_find; i++)
  {
   if(Buf_Arrow_Buy[i]!=EMPTY_VALUE)
     {
      Last_Arrow_Buy_volume = Buf_Arrow_Buy[i];
      Last_Arrow_Buy_index  = i;
      break;
     }
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

循环变量的范围 只限于循环体。在休息前分配所需的值。

明白了,两边都能用,没有警告。

请告诉我,是在循环体中 计算更合适,还是把计算从循环中拿出来更好?

 
Sergey Voytsekhovsky:

明白了,两边都能用,没有警告。

请告诉我什么更合适,是将计算放在循环的主体中,然后再断开;还是将计算从循环中取出来更好?

哪些计算方法?

原因: