我对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的值)
答案 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
的方式?我想您一定有严重错误。