任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 252

 
ALXIMIKS:
看看 这篇文章,它并不像听起来那么简单,一般来说,它是相当有用的。

我看了一下。我需要一个星期的时间来详细研究。但更糟糕的是,我找不到任何与我的任务有关的地方。我不给指标着色,也不以任何方式修改它们。我只想在最后n个柱子上找到高点和低点。在RSI_Extremums_Sample.mq4 有一丝相似之处 ,但我不能做那个代码。有许多不必要的东西,指标的绘制....而且我不需要它...
 
lottamer:

我看了看。我需要一个星期来详细研究它。但更糟糕的是,我找不到任何与我的任务有关的地方。我不给指标上色,也不以任何方式修改它们。我只想在最后n个柱子上找到最大值和最小值。在RSI_Extremums_Sample.mq4 有一丝相似之处 ,但我不能处理这个代码。它太多余了,指标DRAWNS ....而且我不需要它...


3173
artmedia70 27.10.2013 15:42#
Forexman77:

是否可以用 "ArrayMaximum "函数来计算一个自定义指标的最近最大值?

还是我需要其他功能来实现?

我曾这样试过。

而且什么都没有出来。大师们,你们能告诉我怎么做吗?

   for (i=2; i<nBars; i++) {                    
      double a=iCustom(NULL, 0, "EMAF",0,0,i+1);
      double b=iCustom(NULL, 0, "EMAF",0,0,i);
      double c=iCustom(NULL, 0, "EMAF",0,0,i-1);
      if ((a-b)*(b-c)<0) {
         if (b<c) {                                
            // Нашли донышко
            }
         if (b>c) {                           
            // Нашли пичок
            }
         }
      }   
要在EA中搜索。不是在一个指标中。

 
lottamer:

我唯一不明白的是,如何计算MACD指标的极值,而不是计算N个时期的价格极值?

我想我需要把关键区块中的HIGH和LOW改为MACD...但我不明白......我所有的胡闹尝试都以无效告终。

我知道我需要创建一个MACD阵列...

双MACDBuffer[]。

我也在其他专家顾问系统中看到过这样的字符串

但我不能只在另一个上测量...

请告知如何做到这一点?


文章.
 

在Kim的文章中发现了类似的内容

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 17.05.2008                                                     |
//|  Описание : Возвращает значение максимального элемента массива.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayMax(double& x[]) {
  if (ArraySize(x)>0) return(x[ArrayMaximum(x)]);
  else {
    Print("ArrayMax(): Массив пуст!");
    return(0);
  }
}

问题:我如何创建一个指标值的数组?

 
lottamer:

在Kim的文章中发现了类似的内容

问题:如何创建一个指标值的数组?

我重新读了问的内容,我一开始就搞错了 (

为了获得指标数据的缓冲区,你可以

1) 运行一个循环,收集缓冲区 内的iMACD

2)从MACD中获取源代码,那里有一个缓冲区。

int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd buffer
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- done
   return(0);
  }
 
ALXIMIKS:

重新读了一下问题,一开始就弄错了(

要获得一个指标数据的缓冲区,你可以。

1) 运行一个循环,收集缓冲区内的iMACD值

2)从缓冲区所在的MACD中获取源代码


我如何将缓冲区可视化,否则我不明白该如何处理....

Print(MACDBuffer[1]); ? ? 它打印的是0......为什么?理论上它应该是第一个bar.... 的值。

还有一件事...当有一个直接的函数iMACD时,为什么要用MA计算MACD?

 
lottamer:


我怎样才能使缓冲区可视化,否则我不知道该怎么做....。

Print(MACDBuffer[1]); ? ? 它打印的是0...为什么?它应该是第一条的值....。

还有一件事...为什么要用MA计算MACD,因为有一个直接的函数iMACD?


请告诉我你需要什么。

但它应该更清楚,这样即使是一个哑巴也能理解。

 
ALXIMIKS:


请告诉我你想要什么。

但要以清晰的方式,让哑巴也能理解。

我需要确定MACD指标 在给定条数下的最小值(如图片上)和最大值。(本例中为20)。

我找到了为价格做这件事的代码,并愚蠢地试图用MACD替换HIGH LOW。但没有任何效果....。



 
artmedia70:
赋予一个好的故事是DC的工作。他们很懒惰,总是责怪主持人。


谢谢你!
 
lottamer:

我需要确定给定条数的最小(如图所示)和最大MACD指标值。(本例中为20)。

我找到了一个对价格进行处理的代码,并愚蠢地尝试用MACD替换HIGH LOW。但没有任何效果....。

在自定义MACD的末端插入。
   int max,min,maxlast,minlast;
   max = ArrayMaximum(MacdBuffer,20,1);
   min = ArrayMinimum(MacdBuffer,20,1);
   if (max!=maxlast){
      ObjectDelete  ("highline");   
      ObjectCreate  ("highline",1,WindowOnDropped( ) ,0,MacdBuffer[max],0,0);
   }
   if (min!=minlast){
      ObjectDelete  ("lowline");   
      ObjectCreate  ("lowline",1,WindowOnDropped( ) ,0,MacdBuffer[min],0,0);
   }

PS.虽然这更正确,也更好。

   int max,min;
   static double maxlast,minlast;
   max = ArrayMaximum(MacdBuffer,20,1);
   min = ArrayMinimum(MacdBuffer,20,1);
   if (MacdBuffer[max]!=maxlast){
      maxlast=MacdBuffer[max];
      ObjectDelete  ("highline");   
      ObjectCreate ("highline",1,WindowOnDropped( ) ,0,MacdBuffer[max],0,0);
   }
   if (MacdBuffer[min]!=minlast){
      minlast=MacdBuffer[min];
      ObjectDelete  ("lowline");   
      ObjectCreate ("lowline",1,WindowOnDropped( ) ,0,MacdBuffer[min],0,0);
   }