新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 737

 
Alexey Viktorov:
NewsArr数组 在第二维中的维度 是多少?

不幸的是,我不明白。什么是第二维度?

啊,我想我明白了:NewsArr的值为0、1、2和3。这个?

这必须是:字符串NewsArr[4][1000]。

 
novichok2018:

不幸的是,我不明白。什么是第二维度?

啊,我想我明白了:NewsArr的值为0、1、2和3。这个?

这必须是:字符串NewsArr[4][1000]

第一维和 第二维

但这可能是错误的答案。
 
Alexey Viktorov:

第一维和 第二维

但你一定是回答错了什么。

我在哪里可以找到第二维的维度?

还是第一维的维度是4,第二维的维度是1000?
 
novichok2018:

那么你在哪里寻找第二维度的维度呢?

还是第一个维度是4,第二个维度是1000?

是的,但这个帖子里有些东西是混乱的

关于交易、自动交易系统和策略测试的论坛

新手对MQL4的任何问题,对算法和代码的帮助和讨论

novichok2018, 2019.01.16 15:52

可能是一个愚蠢的问题,因为没有人回答,但还如何处理EA在编译后停止和恢复的问题?

平台给出的信息是:数组超出范围(284,17)。

第284行:NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh);第17位用NomNews打开一个方括号,它由0全局启动

我把0改为1,但无济于事。
if(NomNews==300)break; 300这一行改成了360000,但没有 用。

我编译了它--它在几分钟内工作正常。那该怎么做呢?

当第二维度的值的数量为1000和

if(NomNews==300)break;
在第二维中不可能有数组超限。


 
psyman:

我没有锚点,只有垂直运动,我把水平的一次设置在屏幕的宽度上。从另一边算起,这不是一个问题,但令人惊讶的是,同一个动作在不同的职能部门有不同的表现。


还有一个问题--如果我想把Bid作为标签文本输出,我应该用哪个函数来做最合适--OnChartEvent还是OnCalculate?

OBJ_LABEL有一个锚点,即使你没有设置它。 默认情况下,它是左上角。Bid是在OnCalculate中改变的,你可以在那里改变标签中的文字。

 
Alexey Viktorov:

是的,但这个信息中有一些令人困惑的地方

当第二维度的值的数量为1000和

在第二维中不能有一个数组超出范围。


不,似乎没有混淆。以下是复制的信息: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array out of range in 'OnNews_M5_EURUSD.mq4' (284,17)。

我在上面展示了第284行。
 
novichok2018:

不,我不认为我有什么错。以下是复制的信息: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array out of range in 'OnNews_M5_EURUSD.mq4' (284,17)。

我在上面展示了第284行。

17号位置用NomNews打开一个方括号,0 全局启动。

所以,你有一个零维数组的第二维单元尺寸...

 
Artyom Trishkin:

所以你的数组单元在第二维的大小是零...

这里是NomNews的所在地。

datetime TimeNewsFunck(int nomf)

{

string s=NewsArr[0][nomf]。

string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2),":",StringSubstr(s,14,4) )。

return((datetime)(StringToTime(time)+GMTplus*3600))

}

//345678901234567890////////////////////////////////////////////////////////////////////////////////

空白更新新闻()。

{

string TEXT=ReadCBOE()。

int sh = StringFind(TEXT, "pageStartAt>")+12;

int sh2= StringFind(TEXT,"</tbody>")。

TEXT=StringSubstr(TEXT,sh,sh2-sh)。


sh=0。

while(!IsStopped())

{

sh = StringFind(TEXT, "event_timestamp",sh)+17;

sh2= StringFind(TEXT, "onclick",sh)-2;

if(sh<17 || sh2<0)break;

NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh)。


sh = StringFind(TEXT,flagCur,sh)+10;

sh2= sh+3。

if(sh<10 || sh2<3)break;

NewsArr[1][NomNews]=StringSubstr(TEXT,sh,sh2-sh)。

如果(OnlySymbolNews && StringFind(ValStr,NewsArr[1][NomNews])<0)继续。


sh = StringFind(TEXT, "title",sh)+7;

sh2= StringFind(TEXT, "Volatility",sh)-1;

如果(sh<7 || sh2<0)休息。

NewsArr[2][NomNews]=StringSubstr(TEXT,sh,sh2-sh)。

if(StringFind(NewsArr[2][NomNews], "High")>=0 && !HighNews)继续。

if(StringFind(NewsArr[2][NomNews], "Moderate")>=0 && ! MidleNews)继续。

if(StringFind(NewsArr[2][NomNews], "Low")>=0 && !LowNews)继续。


sh=StringFind(TEXT, "left event",sh)+12;

int sh1=StringFind(TEXT, "Speaks",sh);

sh2=StringFind(TEXT,"<",sh)。

if(sh<12 || sh2<0)break;

if(sh1<0 || sh1>sh2)NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh2-sh)。

否则NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh1-sh)。


NomNews++。

if(NomNews==300)break;

}

}

值从0到300。全局设置为4?

 
novichok2018:


值从0到300。我应该把它全局设置为4吗?

它仍然在12分钟时给出一个信息。

 
novichok2018:

在运行到第12分钟时仍然给出了一个信息。

从这些可以看出,NomNews进入While循环时已经处于大于999的状态。那么你需要找出造成这种情况的原因,并在某处重置这个变量。

要检查这一点,请将其写在循环的开头。

if(NomNews > 999)
{
   Print(NomNews);
   break;
}
原因: