我想请些帮助:我想将规则集成到我的EA中,但是我无法正确地创建阵列。规则将是“如果较高TF上RSI的SMA高于/低于blabla。 ..“
这是我的代码:
double MA;
double RSIBuf[];
double MaBuf[];
ArrayResize(RSIBuf,0);
int counted_bars=IndicatorCounted();
int limit = Bars-counted_bars-1;
for(int i=limit; i>=0; i--)
{
RSIBuf[i] = (iRSI(NULL,higherTF,RSIPeriod,0,i));
MaBuf[i] = iMAOnArray(RSIBuf,higherTF,RSI_SMA,0,0,i);
}
MA = MaBuf[0];
...(无关的代码行)
direction Trend=NEUTRAL;
if(MA>RSI_Up ) Trend=UP;
MT4在RSIBuf []行上表示其错误
我在哪里弄错了?
非常感谢您的努力
wicha
答案 0 :(得分:0)
行ArrayResize(RSIBuf,0)
为数组RSIBuf []分配了0的大小,这是没有意义的,因为该数组的大小必须为> 0,在您的情况下为至少= limit。
因此在循环中,当您尝试为RSIBuf [i]分配值时,超出了范围,因为i大于0(i以i = limit开头)
根据MQL4文档,第二个参数应为new_size,然后0是无效值:
int ArrayResize(
void& array[], // array passed by reference
int new_size, // new array size
int reserve_size=0 // reserve size value (excess)
);
答案 1 :(得分:0)
通常最好通过时间序列访问来递增和递增计数,而不是递减。 条[0]是当前条,条[1]是上一条,依此类推。该视频完美地说明了这一点。 https://www.youtube.com/watch?v=JQgfm4v6dhs