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

 
lottamer:

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

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


将你需要的MACD数据复制到massMACD[20]数组中,并在该数组中找到最小ArrayMinimum(massMACD);和
最大ArrayMaximum(massMACD);值。
 
ALXIMIKS:
在自定义macdac的末尾插入。

P.S. 虽然它更真实,更好。


如果是这样的话,它就不起作用了....

double MACDBuffer[];
double SignalBuffer[];

 
 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,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,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,9,0,MODE_SMA,i);
        //t=MACDBuffer[0];
        //Print(t*10000);
//---- done
  
  
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);
      Print(min,max);
   }
    return(0);
  }
 
artmedia70:
将你需要的MACD数据复制到数组massMACD[20],并在该数组中找到
最小值 ArrayMinimum(massMACD);和
最大 ArrayMaximum(massMACD); values.


很好。

唯一的问题是他们如何将数据复制到阵列中?

for(int i=1; i<20; i++)
      MACDBuffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);

还是像这样?

   MACDLineBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);
 
lottamer:


如果是这样的话,它就不起作用了....

自定义 MACD的最后。

导航器 ==>自定义指标==> MACD ==> PCM(鼠标右键) ==> 编辑 ==>

 
lottamer:


伟大的。

唯一的问题是他们如何将数据复制到阵列中?

还是像这样?


人,这是同一件事,只是调用iMACD 需要和它的源代码一样多的资源,这不是事实。

iMACD和所有的iCostums都返回一个数组成员的值,所以你需要循环浏览并将它们收集到一个缓冲区,以便进一步操作。

  MACDLineBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);

不对,因为你只得到一个值,而你需要20个,所以用一个循环。

for(int i=1; i<20; i++)
      MACDLineBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);

 
ALXIMIKS:

自定义 MACD的最后。

导航器 ==> 自定义指标 ==> MACD ==> PCM(鼠标右键) ==> 编辑 ==>

它的作用:)

只是它肯定做不到我需要它做的事,但我会试着利用它作为一个例子。

谢谢

 

让我们从头开始。

int start()
  {
  
    
for(int i=0; i<20; i++)
MACDBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);

这足以将20(19个什么)个指标值复制到一个数组中吗?

 
lottamer:

让我们从头开始。

把20(19什么的)个指标值复制到一个数组中就可以了吗?

我们要清楚,如果有人需要什么,而我知道什么--我很乐意尝试帮助那个人。

但我不会在他每次放屁后给他擦屁股。

是的,如果你声明静态数组 doubleMACDBuffer[20] 就够了 如果你声明动态数组 doubleMACDBuffer[] 就不够了。

artmedia70 告诉你

 
ALXIMIKS:

我们要清楚,如果有人需要什么,而我知道什么,我很乐意尝试帮助那个人。

但我不会在每次放完屁后给他擦屁股。

是的,如果你声明静态数组 doubleMACDBuffer[20] 就够了 如果你声明动态数组 doubleMACDBuffer[] 就不够。

artmedia70 告诉你


好吧,让我们把它变成静态的。

double MACDBuffer[20];

double min,max;
 
  
 int start()
  {
 
   for(int i=0; i<20; i++)
      MACDBuffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);

   min=ArrayMinimum(MACDBuffer);
   max=ArrayMaximum(MACDBuffer);
  
  Print(min,"____",max);

为什么打印19__0?

 
lottamer:


好吧,让它成为静态的。

为什么打印19__0?


因为它工作得很好。还有什么事吗?