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

 
Alexandr Sokolov:

我的指标中有一段代码在MQL5中没有被执行

问题是,如果价格= =STO_LOWHIGH ,一切都能正常工作,但如果价格== STO_CLOSECLOSE,该函数只赋值给静态变量

...绕过循环

但这个完全相同的函数在MQL4中可以正常工作。

 
Alexandr Sokolov:

但同样的功能在MQL4中可以正常工作

然后我们需要指定哪些数组High[] Close[] 。

如果它们来自mql4,它们在mql5中是不可用的,如果它们是自定义...我不能提出任何建议。

 
Alexandr Sokolov:

我想通过Low/High和Close/Close在K周期内获得通常的maxHigh和minLow随机指标

在初始化期间Low/High工作正常,但Close/Close不正常

CopyBuffer()获得的 数组中找到fmax()或fmin()更容易。

 
Alexey Viktorov:

那么我们需要明确High[] Close[]是什么数组

如果它们来自mql4,它们在mql5中是不可用的,如果它们是自定义...我不能做任何假设。

以下是MQL5中这些缓冲区的内容

int count = rates_total - prev_calculated, copied = 0; if(count < (int)kperiod + (int)dperiod + (int)slowing) {count = (int)kperiod + (int)dperiod + (int)slowing;};
   if(mode == m1 && price == STO_LOWHIGH) {copied = CopyOpen(_Symbol,PERIOD_CURRENT,0,count,Open); if(copied != count) return(0);};
   if(price == STO_LOWHIGH) {copied = CopyHigh(_Symbol,PERIOD_CURRENT,0,count,High); if(copied != count) return(0);};
   if(price == STO_LOWHIGH) {copied = CopyLow(_Symbol,PERIOD_CURRENT,0,count,Low); if(copied != count) return(0);};
   copied = CopyClose(_Symbol,PERIOD_CURRENT,0,count,Close); if(copied != count) return(0);
 
Alexey Viktorov:

从CopyBuffer()获得的数组中找到fmax()或fmin()更容易。

我需要的不是整个缓冲区的数值,而是一个时期内的K
否则如何实现,考虑到我需要在考虑到减速期的情况下复制数据?

 
Alexandr Sokolov:

我不需要整个缓冲区的数值,而是在K
否则,考虑到我需要在考虑到减速期的情况下复制数据,我该如何实现?

昨天我做了同样的事情,只是用了高位和低位数组

   for(i = limit; i < rates_total; i++)
    {
     UpperBuf[i] = high[ArrayMaximum(high, i-period, period)];
     LowerBuf[i] = low[ArrayMinimum(low, i-period, period)];
     MidBuf[i] = (UpperBuf[i]+LowerBuf[i])/2;
    }

没有时间序列的翻转。所以,正如mql5中规定的那样,左边是零条。

此外,还可以复制指标缓冲区,而不是整个缓冲区,只复制指定栏的指定数量。而我错误地推荐了fmax()和fmin()。我的意思是ArrayMaximum()。

 
Alexandr Sokolov:

我想在一个由低点/高点和收盘/收盘组成的周期K内获得正常的最高点和最低点随机指标。

在初始化过程中,低/高可以正常工作,但关/闭不能正常工作。

有一些标准的时间序列函数

Maximum=iHigh(_Symbol,_Period,iHighest(_Symbol,_Period,MODE_HIGH,num,startbar));
Minimum=iLow(_Symbol,_Period,iLowest(_Symbol,_Period,MODE_LOW,num,startbar));
 
Taras Slobodyanik:

有关于时间序列的标准函数

建议从头开始阅读,以获得好的建议。从第一个问题的位置和其余的讨论。

 
Alexey Viktorov:

建议从头开始阅读,以获得好的建议。从第一个问题的位置和其余的讨论。

似乎从一开始--这个人就在通过时间序列来寻找最小/最大。
没有它也是可以做到的。

void KValues(int i)
  {
   if (price == STO_LOWHIGH)
      {
      vhigh=iHigh(_Symbol,_Period,iHighest(_Symbol,_Period,MODE_HIGH,kperiod,i));
      vlow=iLow(_Symbol,_Period,iLowest(_Symbol,_Period,MODE_LOW,kperiod,i));
      }
   else
      {
      vhigh=iClose(_Symbol,_Period,iHighest(_Symbol,_Period,MODE_CLOSE,kperiod,i));
      vlow=iClose(_Symbol,_Period,iLowest(_Symbol,_Period,MODE_CLOSE,kperiod,i));
      }
  }
(没有检查)。
 
Taras Slobodyanik:

似乎从一开始就看出来了--这个人在翻阅时间序列,寻找最小/最大。
你可以不这样做。

(没有检查)。

他想要的是随机的价值。

虽然...我自己已经很困惑,它需要什么。它看起来像随机条件,但它复制了条形。