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

 
Artyom Trishkin:
帮助部分告诉你它是用来做什么的。而且,是的,由用户输入的参数不能以编程方式改变,这是正确的。至少可以有属于用户的东西 :)

如果你真的想,你可以)

 
Vitaly Muzichenko:

如果你真的想,你可以)

当然,你可以,如果你重新分配它。但用户输入的值将保持不变。
 

我经常遇到一个问题。编译器在代码上出现了 "变量已定义 "的错误。

if (n<10)
 {
  int a=10;
 }
else
 {
  int a=5;
 }

https://docs.mql4.com/ru/basis/variables/local 上的参考指南说。

在块内声明的变量(在内部层面)具有的范围

如果区块被嵌套,并且外部区块中的标识符与内部区块中的标识符具有相同的名称,那么外部区块的标识符是 "不可见"(隐藏)的,直到内部区块完成

但即使是同一本参考书中的例子也不能编译,同样出现了 "变量已定义 "的错误。

int i=5;      // локальная переменная функции
     {
      int i=10;  // переменная функции 
      Print("В блоке i = ",i); // результат  i = 10;
     }
   Print("Вне блока i = ",i);  // результат  i = 5;

循环的问题也一样。

int i=10;
for (int i=1;i<10;i++) ...

我们怎样才能绕过这个问题,使目录例子的编译不出现 "变量已定义 "的错误?

 
The_Sheikh:

我经常遇到一个问题。编译器在代码上出现了 "变量已定义 "的错误。

https://docs.mql4.com/ru/basis/variables/local 上的参考指南说。

在块内声明的变量(在内部层面)具有的范围

如果区块被嵌套,并且外部区块中的标识符与内部区块中的标识符具有相同的名称,那么外部区块的标识符是 "不可见"(隐藏)的,直到内部区块完成

但即使是同一本参考书中的例子也不能编译,同样出现了 "变量已定义 "的错误。

循环的问题也一样。

我们怎样才能绕过这个问题,使目录例子的编译不出现 "变量已定义 "的错误?

#属性严格
 
The_Sheikh:

我怎样才能绕过这个问题,让目录实例在编译时不出现 "变量已定义 "的错误?

并非所有参考书中的例子都能长期正确工作

在你的例子中,通过范围--单个运算符内的可见性是本地的,它肯定应该这样工作。

void OnStart()
  {
   for(int i=0;i<10;i++)
     {
      double x=i;
     }

   for(int i=0;i<10;i++)
     {
      double x=i;
     }
  }

for语句 中的可见性是局部的,当你退出它时,i和x变量将丢失。

 

试图寻找Peak Repainter指标的最后一个峰值,由EA处理。

   GV_trendD1 = StringConcatenate(GVn," дневной тренд");
   if (!GlobalVariableCheck(GV_trendD1))
      {
      double   fUP,fDN;

      for (int f=0; f<=400 && !IsStopped(); f++)
         {
         fUP = iCustom(NULL,PERIOD_D1,"Used\\# Peak Repainter",0,f);
         if (fUP>=15) {GlobalVariableSet(GV_trendD1,1);break;}
         else {fDN = iCustom(NULL,PERIOD_D1,"Used\\# Peak Repainter",1,f); if (fDN>=15) {GlobalVariableSet(GV_trendD1,-1);break;}}
         }
      }

其结果是,1被写入全局变量,尽管它实际上应该是-1。

有什么问题吗?有了密码?用指标?

该指标在使用时有默认设置。

附加的文件:
 
Alexey G. Smolyakov:

试图寻找Peak Repainter指标的最后一个峰值,由EA处理。

其结果是,1被写入全局变量,尽管它实际上应该是-1。

有什么问题吗?有了密码?用指标?

该指标在使用时有一个默认设置。

为什么指标的名称 是这样的?

iCustom(NULL,PERIOD_D1,"Used\\# Peak Repainter",0,f);
 
Artyom Trishkin:

为什么用这个指标的名字

我只是把不同的EA的指标放在不同的目录里。而且我稍微重命名,以便它们被分组。

这个名字有什么影响吗?

 
Alexey G. Smolyakov:

我只是把不同的EA的指标放在不同的目录里。而且我稍微重命名它们,以便将它们归为一组。

这个名字有什么影响吗?

是的,所有对МТ4文件的访问都是在MQL4文件夹内进行的,出于安全原因,从该文件夹外的专家顾问/脚本/指示器的退出被排除在外。

 
Igor Makanu:

影响,所有对MT4文件的访问都发生在MQL4文件夹内,出于安全原因,从该文件夹外的EA/脚本/指标的退出被排除。

MQL4文件夹Indicators/Used的完整路径。似乎在文件夹外没有出口。但这是一个反常现象--其他专家顾问系统在类似的文件夹中使用其指标时没有问题。但这个指标的问题是什么--我不明白。我翻阅了它的代码,但我没有足够的知识和经验来理解它。我怀疑它只计算最后一个小节或类似的东西。
原因: