文章 "用 MQL5 语言编写的 20 种交易信号" - 页 3

 

这里我有一个实际问题。

为什么每次调用 CopyBuffer() 时都要检查指标句柄是否残缺?在我的 EA 中,我曾执行过一次该程序(在检查数据同步 后,随着第一个刻度线的到来),后来我开始收到错误4807: 指标句柄出错。 CSymTotal=7。收到的句柄是一个数组:

      for (int i=0;i<CSymTotal;i++)
      {
      H_Ind[i]=iSAR(CSymList[i],PSARTF,PSARStep,PSARMax);
      }
打印检查显示,所有七个 H_Ind[0.6]的值分别为 10...15,即不同于-1。句柄似乎有效,但在响应 CopyBuffer(H_Ind[0-6]...) 时,我得到 CopyBuffer=-1,LastError=4807(!!!)有时正常,有时出错。

在我按照本文介绍的方法进行检查后 目前一切正常

   if(H_Ind[CSymListItem]==INVALID_HANDLE)//--- 如果句柄无效
     {
      //--- создадим его снова                                                      
      H_Ind[CSymListItem]=iSAR(CSymList[CSymListItem],PSARTF,PSARStep,PSARMax);
      //--- 退出函数
      return(0);
     }
   else
     {
      cb=CopyBuffer(H_Ind[CSymListItem],0,0,BarsCheck,PSARBuffer);
...

目前一切正常。神秘...

我不明白我到底犯了什么错....。最重要的是,为什么每次使用 CopyBuffer() 并再次创建句柄都要检查句柄的有效性?难道不是一直保存到智能交易系统完成工作为止吗?是一般情况下必须这样做,还是只是为了示例方便?

Документация по MQL5: Получение рыночной информации / SymbolIsSynchronized
Документация по MQL5: Получение рыночной информации / SymbolIsSynchronized
  • www.mql5.com
Получение рыночной информации / SymbolIsSynchronized - Документация по MQL5
 
pronych:

这里我有一个实际问题。

为什么每次调用 CopyBuffer() 时都要检查指标句柄是否残缺?在我的 EA 中,我曾执行过一次该程序(在检查数据同步 后,随着第一个刻度线的到来),后来我开始收到错误4807: 指标句柄出错。 CSymTotal=7。收到的句柄是一个数组:

打印检查显示,所有七个 H_Ind[0.6]的值分别为 10...15,即不同于-1。句柄似乎有效,但在响应 CopyBuffer(H_Ind[0-6]...) 时,我得到 CopyBuffer=-1,LastError=4807(!!!)有时正常,有时出错。

在我按照本文介绍的方法进行检查后 目前一切正常

目前一切正常。神秘...

我不明白我到底犯了什么错....。最重要的是,为什么每次使用 CopyBuffer() 并再次创建句柄都要检查句柄的有效性?难道不是一直保存到智能交易系统完成工作为止吗?这到底是必要的,还是只是为了示例方便?

在我的示例中,条件是这样的:如果句柄有效,我们继续复制数据。如果无效,我们再次创建指标并退出该函数,因为指标的计算需要时间。复制时也是如此,在复制过程中,指标可能会重新计算,因此CopyBuffer() 返回-1,一旦数据准备就绪,函数就会执行其工作, 这就是为什么有必要检查这一切
 

一般来说,这个问题的表述应该更宽泛一些:

CopyBuffer() 之前和之后,应引入哪些检查、条件或延迟,以确保在最高速度条件下(在一个循环中)在七个(十个)仪器上获得我现在需要的 400(0) 指标值?

因为,return(0) = "啊,好吧,现在不行,也许下次能行......"。

在这里,顺便说一下,Copy 的其余部分就在它旁边......

PS.也许已经离题了。好吧,这个问题不是问作者的,而是问每一个能说明问题的人......

 
sergey1294:
在我的示例中,条件是这样的:如果句柄有效,我们继续复制数据。如果无效,我们重新创建指标并退出该函数,因为指标的计算 需要时间。复制也是一样,在复制过程中,指标可能会重新计算,所以CopyBuffer()返回-1,一旦数据准备就绪,函数就会执行其工作,这就是 为什么有必要检查这一切

是的,谢尔盖,我明白了。我无意对这篇文章或作者造成任何影响。这篇文章非常出色。这不是抱怨,而是试图找到答案。这只是我找到的最接近这一主题的讨论。你想知道更准确的答案,不是吗?)

也许我们应该把它放在一个单独的主题里?

 
pronych:

也许可以把它放在一个单独的主题中?

https://www.mql5.com/ru/forum/1880。

在这里,把它放在主题中。谢尔盖,我为超出文章范围而道歉。我会很高兴的......) ))

ДО и ПОСЛЕ CopyBuffer(..)
ДО и ПОСЛЕ CopyBuffer(..)
  • www.mql5.com
Какие проверки, условия, или задержки надо внести ДО и ПОСЛЕ CopyBuffer(), для того, чтоб, ГАРАНТИРОВАННО получить те 400(0) значений индикатора, которые необходимы сейчас(!
 
我们非常喜欢这篇文章。到目前为止,我们已经利用视觉向导软件创建了 10 个使用这些信号的专家顾问。您可以在这里看到它们: http://www.molanis.com/products/expert-advisor-visual-wizard/expert-advisors-mt5
Expert Advisors for MT5 - Examples
  • Molanis Marketing
  • www.molanis.com
Please note that these Expert Advisors were created for educational purposes and do not constitute any financial advice. Before using the following EAs, please take into account the following: THE DOWNLOAD FILES ARE IN MOL5 FORMAT (MOLANIS 5 FORMAT - A .MOL5 FILE FOR THE EA VISUAL WIZARD). TO OBTAIN THE EA FOR MT5, DOWNLOAD THE STRATEGY...
 
我曾尝试下载一些 EA,但没有成功。
 

希望有人能给出 20 种理财 方法 !!!!!!

 

这篇文章的想法非常好。但你忘记了 OOP 和一般编程的概念:简明。在你的函数中,有硬编码的指标、当前符号、当前周期、指标参数。想法是好的,但没有完全实现,离完美还差得很远。例如--我想检查指标线 的交叉情况,每条线 都来自不同的时间框架和不同的符号--这是其一。其二,如果终端暂时失去了与服务器的连接,错过了您正在处理的三个条形图,您的功能会发生什么情况?有信号,但错过了输入。应使用 CHARGE 搜索信号。然后检查信号是否已被处理。可能会有很多交叉点,您自己也会感到惊讶。只需将参数(指标编号、符号、时间范围、搜索开始时间、搜索结束时间、指标线......)传递给函数即可。- 这样,您的系统就会变得更加灵活,而 Expert Advisor 也能看到人类无法看到的东西--不同符号和不同时间框架的交叉线。这比这里给出的功能要好得多。您还需要弄清变量命名的概念--您的变量太少,而且名称毫无意义--但这是另一个话题。这就是所谓的编程风格。每个人都有自己的风格。但我发现您正在慢慢接近我在 MT4 中尝试使用的概念,这非常令人鼓舞。

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов - Документация по MQL5
 
1CMaster:

这篇文章的想法非常好。但你忘了 OOP 和一般编程的概念:简明。在你的函数中,有硬编码的指标、当前符号、当前周期、指标参数。想法是好的,但没有完全实现,离完美还差得很远。例如--我想检查指标线 的交叉情况,每条线 都来自不同的时间框架和不同的符号--这是其一。其二,如果终端暂时失去了与服务器的连接,错过了您正在处理的三个条形图,您的功能会发生什么情况?有信号,但错过了输入。应使用 CHARGE 搜索信号。然后检查信号是否已被处理。可能会有很多交叉点,您自己也会感到惊讶。只需将参数(指标编号、符号、时间范围、搜索开始时间、搜索结束时间、指标线......)传递给函数即可。- 这样,您的系统就会变得更加灵活,而 Expert Advisor 也能看到人类无法看到的东西--不同符号和不同时间框架的交叉线。这比这里给出的功能要好得多。您还需要弄清变量命名的概念--您的变量太少,而且名称毫无意义--但这是另一个话题。这就是所谓的编程风格。每个人都有自己的风格。但我发现他们正在慢慢接近我在 MT4 中尝试使用的概念,这非常令人鼓舞。

这篇文章是根据技术任务撰写的,如果您想检查交叉点,谁会阻止您这样做呢?