新的MetaTrader 4客户终端387和MetaTrader 4数据中心构建387 - 页 4

 
AlexSTAL:

我删除了这些信件,但我完全明白,没有这些信件,什么是优化......

用最少的代码清楚地说明你所害怕的东西,但在现实中没有再现......

这是一个完全无意义的对话...我的所有指标都没有要求我在每一个刻度上重新初始化缓冲区...

这就是为什么我试图了解我们正在谈论的内容....。


对Zhunko说:我以后会试着理解它的。


我写道,我只有一个计算,多么清楚啊。

1)当一个新的酒吧出现时。

2) 当价格离开已经计算好的柱状部分的边界时(对于高点或低点)。

3)计算出三个或四个最后的横梁。

我们在通信中讨论过这个问题。你说它是清晰的....还是我白写了?

如果在每个tick 上都要重新初始化,即用零填充缓冲区,那么就必须在每个tick上重新计算。这将导致以下情况。现在,Putnika在一个终端的几个图表上有多达100个ZUP的实例。即使在一个快速的市场中,终端的速度也不会很慢。而如果我们必须在每个刻度上重新计算,同时激活的指标数量将减少10倍。而如果对整个可用的历史进行计算,计算机将只能处理指标的一个实例。

难道这还不够吗?

 
nen:

如果在每个tick上都要重新初始化,即用零来填充缓冲区,那就必须在每个tick上重新计算。这将包括以下内容。 现在,Putnika在一个终端的几个图表上有多达100个ZUP的实例。即使在一个快速的市场中,终端的速度也不会很慢。而如果我们必须在每个刻度上重新计算,同时激活的指标数量将减少10倍。而如果对整个可用的历史进行计算,计算机将只能处理指标的一个实例。

哪里写的?你可以先检查一下,然后才会害怕。
 
nen:


多么清晰啊!我写道,我只有计算。

1)当一个新的酒吧出现时

2) 当价格离开已经计算好的柱状部分时(超过高点或低点)。

3)最后三个或四个小节的计算。

我们在通信中讨论过这个问题。你说它是清晰的....还是我白写了?

如果在每个tick上都要重新初始化,即用零填充缓冲区,那么就必须在每个tick上重新 计算。这将导致以下情况。 现在,Putnika在一个终端的几个图表上有多达100个ZUP的实例。即使在一个快速的市场中,终端的速度也不会很慢。而如果我们必须在每个刻度上重新计算,同时激活的指标数量将减少10倍。而如果对整个可用的历史进行计算,计算机将只能处理指标的一个实例。

这还不够吗?

但愿如此,但愿如此...没有这样的问题!Zhunko 有一个完全不同的问题。在你引起恐慌之前,你需要自己检查一下。我检查了上面的几个帖子,甚至张贴了代码
 
Rosh:
它在哪里说的?你可以先检查一下,然后才会害怕。

+10000

在每一个案例中,都应该有一个专业的方法....。

 
start()
 {
  if(glowBar<=iLow(NULL, gtf, 0) && ghighBar>=iHigh(NULL, gtf, 0) && gtimelast==iTime(NULL, gtf, 0)) return (0);

  glowBar=iLow(NULL, gtf, 0); ghighBar=iHigh(NULL, gtf, 0);                  // обновляем сразу, а не после длительного расчета
...// здесь код основного расчета.

  gcurrentBars=iBars(NULL, gtf);       // обновляем в конце, чтобы не накапливались непосчитанные бары за время расчета
                                        // и не срабатывал полный пересчет на следующем тике в случае длительного расчета
 }

Полный код секции старт


//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int i, j;

   gtf=Period();
   gRecalculation=1;

   while(gRecalculation>0)
     {
      if(gcurrentBars<iBars(NULL, gtf)-1)
        {
         Print("Время полного пересчета = ",TimeToStr(Time[0],TIME_DATE|TIME_MINUTES));
         glowBar=0; ghighBar=0; gtimelast=0; gsave_wr0=0;
         ArrayInitialize(gsave_tLast,0);ArrayInitialize(gsave_hl,0);ArrayInitialize(gsave_lastlow,0);ArrayInitialize(gsave_lasthigh,0);
         ArrayInitialize(gt_hi,0);ArrayInitialize(gt_li,0);ArrayInitialize(gt_end,0);

         gTheExternalBar=false; 
         history=true;
//      if(_PrimarySelectionOfExtremums==2 || _PrimarySelectionOfExtremums==3) delete_objects();
         delete_objects();
         g_addnewextremum=true;
         gbar=iBars(NULL, gtf);

         ArrayInitialize(gtime_gbar,0); ArrayInitialize(gL2LTime,0); ArrayInitialize(gL2HTime,0); 

         ArrayInitialize(LowestBuffer1,0);ArrayInitialize(HighestBuffer1,0);
         ArrayInitialize(LowestBuffer2,0);ArrayInitialize(HighestBuffer2,0); 
         ArrayInitialize(LowestBuffer3,0);ArrayInitialize(HighestBuffer3,0); 
         ArrayInitialize(LowestBuffer4,0);ArrayInitialize(HighestBuffer4,0); 

         ArrayInitialize(last_h,0);ArrayInitialize(last_l,0);ArrayInitialize(last_t,0);

         ArrayInitialize(tL1,0);ArrayInitialize(tL2,0);ArrayInitialize(tL3,0);ArrayInitialize(tL4,0);ArrayInitialize(tL5,0);
         ArrayInitialize(tL6,0);ArrayInitialize(tL7,0);ArrayInitialize(tL8,0);ArrayInitialize(tL9,0);ArrayInitialize(tL10,0);
         ArrayInitialize(tL11,0);

         ArrayInitialize(cL1,0);ArrayInitialize(cL2,0);ArrayInitialize(cL3,0);ArrayInitialize(cL4,0);ArrayInitialize(cL5,0);
         ArrayInitialize(cL6,0);ArrayInitialize(cL7,0);ArrayInitialize(cL8,0);ArrayInitialize(cL9,0);ArrayInitialize(cL10,0);
         ArrayInitialize(cL11,0);
         ArrayInitialize(cH1,0);ArrayInitialize(cH2,0);ArrayInitialize(cH3,0);ArrayInitialize(cH4,0);ArrayInitialize(cH5,0);
         ArrayInitialize(cH6,0);ArrayInitialize(cH7,0);ArrayInitialize(cH8,0);ArrayInitialize(cH9,0);ArrayInitialize(cH10,0);
         ArrayInitialize(cH11,0);
         if(filterZigZag==1)
           {
            ArrayResize(cLz1,gbar);ArrayResize(cHz1,gbar);ArrayResize(tLz1,gbar);

            ArrayInitialize(tLz1,0);ArrayInitialize(tLz2,0);ArrayInitialize(tLz3,0);ArrayInitialize(tLz4,0);ArrayInitialize(tLz5,0);
            ArrayInitialize(tLz6,0);ArrayInitialize(tLz7,0);ArrayInitialize(tLz8,0);ArrayInitialize(tLz9,0);ArrayInitialize(tLz10,0);
            ArrayInitialize(tLz11,0);

            ArrayInitialize(cLz1,0);ArrayInitialize(cLz2,0);ArrayInitialize(cLz3,0);ArrayInitialize(cLz4,0);ArrayInitialize(cLz5,0);
            ArrayInitialize(cLz6,0);ArrayInitialize(cLz7,0);ArrayInitialize(cLz8,0);ArrayInitialize(cLz9,0);ArrayInitialize(cLz10,0);
            ArrayInitialize(cLz11,0);
            ArrayInitialize(cHz1,0);ArrayInitialize(cHz2,0);ArrayInitialize(cHz3,0);ArrayInitialize(cHz4,0);ArrayInitialize(cHz5,0);
            ArrayInitialize(cHz6,0);ArrayInitialize(cHz7,0);ArrayInitialize(cHz8,0);ArrayInitialize(cHz9,0);ArrayInitialize(cHz10,0);
            ArrayInitialize(cHz11,0);
           }
Print("");
        }
      else
        {
         if(_PrimarySelectionOfExtremums<2)
           {
            gbar=iBarShift(NULL, gtf, gtime_gbar[0], true)+2;
           }
        }

      if(_PrimarySelectionOfExtremums==4 && gtimelast==iTime(NULL, gtf, 0)) return(0);
      if(tL1[0]>0)
        {
         if(glowBar<=iLow(NULL, gtf, 0) && ghighBar>=iHigh(NULL, gtf, 0) && gtimelast==iTime(NULL, gtf, 0)) return (0);
         if(gtimelast<iTime(NULL, gtf, 0) &&(_PrimarySelectionOfExtremums==2 || _PrimarySelectionOfExtremums==3))
           {
            gTheExternalBar=false; delete_objects();
           }
        }
      glowBar=iLow(NULL, gtf, 0); ghighBar=iHigh(NULL, gtf, 0);                  // обновляем сразу, а не после длительного расчета

      // Поиск экстремумов для первого уровня
      glevel=0;
      SamplingCreationExtremums();

      if(history)
        {

         if(ShowPrimaryLevel==0)
           {
            VisiblePrimarySelections(cL1, cH1, tL1, cLz1, cHz1, tLz1, LowestBuffer1, HighestBuffer1); // визуализация
           }

         // Создание следующих уровней и визуализация
         SelectionArrayForNextLevels();
         gtimelast=iTime(NULL, gtf, 0); // эта переменная используется в промежуточных расчетах, поэтому ее обновляем после расчетов
         history=false;

//*
         // Обрезка массивов
         if(QuantityExtremums>0)
           {
            for(i=1;i<11;i++)
             {
              int k=ScrapOfArrays(i);
              if(k!=0) Print("размер массива уровня ",i-1," = ",k);
              if(k==0) break;
//              if(ScrapOfArrays(i)==0) break;
             }
          }
//*/
        }
      else
        {
         WriteNewExtremums(cL1, cH1, tL1, cLz1, cHz1, tLz1);

         // Создание следующих уровней и визуализация
         SelectionArrayForNextLevels();

         gtimelast=iTime(NULL, gtf, 0); // эта переменная используется в промежуточных расчетах, поэтому ее обновляем после расчетов
        }
      if(gRecalculation>0) gRecalculation--;
     }

   gcurrentBars=iBars(NULL, gtf);       // обновляем в конце, чтобы не накапливались непосчитанные бары за время расчета
                                        // и не срабатывал полный пересчет на следующем тике в случае длительного расчета

Err(371);

   return(0);
  }
//+------------------------------------------------------------------+

一小段代码。而在我所有的指标中,有一些变化是差不多的。

请注意,我有一个相当大的区域,缓冲区被重新初始化了。所有的ArrayInitialize函数 都只是从事这种重新初始化的工作。但它只在需要时发生,而不是被迫。

 

我已经在第一页写了,为开发者解释第6点的含义

终端:再次读取历史数据时,为自定义指标 增加了缓冲区初始化。

目前还没有收到他们的解释。而我们在这里创造了一杯水里的风暴。但这也不仅仅是在这里。我已经警告所有使用我的指标的人,在下载build 387之前要等待。

 
讨论已经结束。
 
Zhunko:

弄清了复杂的原因,为什么不工作了。再见,优化 :-(

现在每打一次勾,我都要重新填充缓冲区。照顾到了...

没有变化--没有初始化!至少要考虑一下!

我不在缓冲区中读取历史数据。我只在子窗口中使用它们进行垂直扫描。为什么我需要一直填充它们?只有三种情况下需要覆盖它们(第一次运行、缩放、图表转换)。现在的情况是,MT4几乎不能移动,还有一个刹车。


没有变化,没有初始化。这就对了。只有在历史数据被覆盖 后才会进行初始化。这在以前就有设想,只是没有如愿。在正常情况下,当条形图后(或连接失败后的几个条形图),不存在缓冲区初始化。
 

2个终端:在计算自定义指标 时固定了报价计数器的计算。

对历史数据中变化数量的估计存在错误。由于大量的变化,数据被错误地重新 计算,但没有重新计算。这尤其影响到ZigZag指标,当数据发生巨大变化时,但ZigZag没有被重新计算。

 
VBAG:

那很好啊!开发商并没有放弃第四个项目,而是在支持它,甚至完善它。这一点从建造编号387就可以看出。

我最后看到的是--229。一下子就到了387(也许是连接了一个协处理器? 咦......)!酷!

最主要的是要尊重外科医生的主要戒律--"不要伤害!"。

MetaTrader 4平台是许多组件的集合 - 服务器,数据中心,报价和新闻的馈线,客户终端,经理和管理员终端,API,使用API编写的标准附加组件等。这些组件以不同的方式发展。

因此,目前所有的组件都被赋予了380的编号,使构建的编号相等。纯粹是一种整容手术。