mql5:On计算每个柱形的收盘价差

时间:2019-03-18 13:56:30

标签: mql5

我对mql5还是很陌生,正在尝试创建一个指标,我想要的很简单,但是我似乎从中丢失了一些东西。

我想按分钟比较2个柱的收盘价,如果它大于某个值,它会将指标加1(数组?)

所以说

A-1柱收于1.555

A条收于1.455

每个0.01都应在条形指示器上加1,因此应该有一个值为10的条形。

#property copyright "Copyright 2011, MetaQuotes Software Corp." 
#property link      "https://www.mql5.com" 
#property version   "1.00" 
  
#property indicator_separate_window 
#property indicator_buffers 4 
#property indicator_plots   1 
//--- plot Bars 
#property indicator_label1  "Bars" 
#property indicator_type1   DRAW_BARS 
#property indicator_color1  clrGreen 
#property indicator_style1  STYLE_SOLID 
#property indicator_width1  5

#property indicator_maximum 5
#property indicator_minimum 0.000


//--- input parameter 
input int      pip=100;         // Number of pip  
//--- An indicator buffer for the plot 
double         LineBuffer[]; 

//+------------------------------------------------------------------+ 
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- Binding an array and an indicator buffer 
   SetIndexBuffer(1,LineBuffer,INDICATOR_DATA); 
//--- Initializing the generator of pseudo-random numbers 

//--- 
   return(INIT_SUCCEEDED); 
  } 
//+------------------------------------------------------------------+ 
//| Custom indicator iteration function                              | 
//+------------------------------------------------------------------+ 
int OnCalculate(const int rates_total, 
                const int prev_calculated, 
                const datetime &time[], 
                const double &open[], 
                const double &high[], 
                const double &low[], 
                const double &close[], 
                const long &tick_volume[], 
                const long &volume[], 
                const int &spread[]) 
  { 

  
//--- Block for calculating indicator values 
   for(int i=0;i<rates_total;i++) 
     { 
      if(i>= 1 && (close[i] - close[i-1] >= pip*_Point))
      {
      LineBuffer[i]=1;
      }
     } 
  
//--- return value of prev_calculated for next call
   return(rates_total); 
  } 

但是,当我测试它时,似乎close [i]被称为每个刻度而不是每个小节,并且我似乎无法获得LineBuffer指示器来显示close [i]和close [i- 1](因此我将其固定为1以获得一个指标,该指标的差异大于称为pip的值)

1 个答案:

答案 0 :(得分:0)

为什么需要4个缓冲区?

调用“ SetIndexBuffer”时,应从零开始一一分配缓冲区ID。

实际上,它被称为每个小节,因为您从bar#0循环到rates_total,如果需要一次调用它,请比较prev_calculated' or use datetime lastCandleClosed and check whether时间[ rates_total-1]> lastCandleClosed'以运行新的条形逻辑。

通过close[i-1]时如何管理呼叫i=0的方式?我想您一定有严重错误。