阵列超出范围,需要帮助 - 页 4 1234567891011...17 新评论 Tretyakov Rostyslav 2020.12.09 19:55 #31 Dark Kchlyzov:似乎没有错误,但它在日志中。 你原来是对的,由于缺乏接近最低限度的 从2002年开始运行,到2016年一切正常。 Dark Kchlyzov 2020.12.10 05:12 #32 MakarFX:你最初是对的,因为缺乏一个接近最低限度的从2002年开始运行,到2016年一切正常。 澳元兑美元2020年同样的事情。从循环中删除2个表达有一个错误,如果我们离开它就没有错误,只是在那一天我们不重新划线。 你有同样的支票吗? 奇怪的是,循环几乎总是在1001条时中断(也许是阵列的限制?) 2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level AUDUSD,H1: array out of range in 'Test_Level.mq4' (51,59)。 2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level AUDUSD,H1: i = 1001 Bar_data_D1 [i][2] = 0.77324 2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level AUDUSD,H1: i = 1000 Bar_data_D1 [i][2] = 0.76934 2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level AUDUSD,H1: i = 999 Bar_data_D1 [i][2] = 0.76907 2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level AUDUSD,H1: i = 998 Bar_data_D1 [i][2] = 0.76963 2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level AUDUSD,H1: i = 997 Bar_data_D1 [i][2] = 0.7548 //+------------------------------------------------------------------+ //| Test_Level.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict double Bar_data_D1 [][6]; // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров D1 double Low_D1_Level; // Возвращает значение минимальной цены бара D1 double Min_D_Level ; // ближайшей минимальный D уровень datetime Time_Day; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { Level(); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { On_Timer(); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Функция Level //+------------------------------------------------------------------+ void Level() { ArrayCopyRates(Bar_data_D1,_Symbol,PERIOD_D1); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров Low_D1_Level = iLow (_Symbol,PERIOD_D1,1); // Возвращает значение минимальной цены бара D1 //--- Min_D_Leve //for(int i = 1; i<ArrayRange(Bar_data_D1,0) ;i++) for(int i = 1; ;i++) { Print(" i = ",i," Bar_data_D1 [i][2] = ",Bar_data_D1 [i][2]); if(Bar_data_D1 [i][2]>=0) { if( Bar_data_D1 [i][2] < Low_D1_Level) { Min_D_Level = Bar_data_D1 [i][2];break; } } } //+-------------------------Low_D1_Level----------------------------+ if(ObjectFind("Low_D1")!=Low_D1_Level) { ObjectDelete("Low_D1"); if(ObjectFind("Low_D1")!=0) { ObjectCreate("Low_D1",OBJ_HLINE, 0, Time[0],Low_D1_Level); ObjectSet("Low_D1", OBJPROP_COLOR, clrMaroon); ObjectSet("Low_D1", OBJPROP_WIDTH, 1); } } if(ObjectFind("Low_D1_label")!=Low_D1_Level) { ObjectDelete("Low_D1_label"); if(ObjectFind("Low_D1_label") != 0) { ObjectCreate("Low_D1_label", OBJ_TEXT, 0, Time[13], Low_D1_Level); ObjectSetText("Low_D1_label", "Low_D1: " + DoubleToStr(Low_D1_Level,_Digits), 8,"Verdana", Brown); } } //+-------------------------Min_D_Level----------------------------+ if(ObjectFind("Min_D")!= Min_D_Level) { ObjectDelete("Min_D"); if(ObjectFind("Min_D")!=0) { ObjectCreate("Min_D",OBJ_HLINE, 0, Time[0],Min_D_Level); ObjectSet("Min_D", OBJPROP_COLOR, clrMaroon); ObjectSet("Min_D", OBJPROP_WIDTH, 1); } } if(ObjectFind("Min_D_label")!=Min_D_Level) { ObjectDelete("Min_D_label"); if(ObjectFind("Min_D_label") != 0) { ObjectCreate("Min_D_label", OBJ_TEXT, 0, Time[30], Min_D_Level); ObjectSetText("Min_D_label", "Min_D: " + DoubleToStr(Min_D_Level,_Digits), 8,"Verdana", Brown); } } } //+------------------------------------------------------------------+ //| функция удаление всех объектов созданных советником //+------------------------------------------------------------------+ void DestroyObject() { int tot=ObjectsTotal(); for( int i=tot; i>=0; i--) { if(ObjectName(i)=="Low_MN1"){ObjectDelete(0,"Low_MN1");Print("<< Объект Low_MN удалён >>");} if(ObjectName(i)=="Low_MN1_label"){ObjectDelete(0,"Low_MN1_label");Print("<< Объект Low_MN1_label удалён >>");} if(ObjectName(i)=="Min_D"){ObjectDelete(0,"Min_D");Print("<< Объект Min_D удалён >>");} if(ObjectName(i)=="Min_D_label"){ObjectDelete(0,"Min_D_label");Print("<< Объект Min_D_label удалён >>");} } } //+-------------------------------------------------------------------------+ // функция Timer //+-------------------------------------------------------------------------+ void On_Timer() { if(Day()!= Time_Day) { Level(); Time_Day = Day(); } } Overview of Copy functions Finding the maximum and Reading price, volume, spread, Dark Kchlyzov 2020.12.10 05:32 #33 Aleksei Stepanenko:有一个问题。为什么你要从第一个元素开始循环,而不是从零开始? 如果Low_D1_Level是前一天的水平,那么Min_D_Level应该从Low_D1_Level 中寻找,它等于i=1 ,还是我搞错了? Tretyakov Rostyslav 2020.12.10 07:18 #34 Dark Kchlyzov:奇怪的是,循环几乎总是在1001条时中断(也许是阵列的限制?) 并非总是 2020.12.10 08:16:47.604 EURUSD,H1: 265 tick events (265 bars, 13782 bar states) processed in 0:00:53.781 (total time 0:00:55.813) 2020.12.10 08:16:47.604 2016.12.16 00:00:00 Testing pass stopped due to a critical error in the EA 2020.12.10 08:16:47.604 2016.12.16 00:00:00 Array EURUSD,H1: array out of range in 'Array.mq4' (51,59) 2020.12.10 08:16:47.604 2016.12.16 00:00:00 Array EURUSD,H1: i = 1011 Bar_data_D1 [i][2] = 1.32667 2020.12.10 08:16:47.604 2016.12.16 00:00:00 Array EURUSD,H1: i = 1010 Bar_data_D1 [i][2] = 1.32642 2020.12.10 08:16:47.604 2016.12.16 00:00:00 Array EURUSD,H1: i = 1009 Bar_data_D1 [i][2] = 1.32857 2020.12.10 08:16:47.604 2016.12.16 00:00:00 Array EURUSD,H1: i = 1008 Bar_data_D1 [i][2] = 1.335 2020.12.10 08:16:47.604 2016.12.16 00:00:00 Array EURUSD,H1: i = 1007 Bar_data_D1 [i][2] = 1.34244 2020.12.10 08:16:47.604 2016.12.16 00:00:00 Array EURUSD,H1: i = 1006 Bar_data_D1 [i][2] = 1.3414 2020.12.10 08:16:47.604 2016.12.16 00:00:00 Array EURUSD,H1: i = 1005 Bar_data_D1 [i][2] = 1.34815 2020.12.10 08:16:47.604 2016.12.16 00:00:00 Array EURUSD,H1: i = 1004 Bar_data_D1 [i][2] = 1.35409 2020.12.10 08:16:47.604 2016.12.16 00:00:00 Array EURUSD,H1: i = 1003 Bar_data_D1 [i][2] = 1.35726 Tretyakov Rostyslav 2020.12.10 07:24 #35 澳元兑美元对我来说不是这样的 2020.12.10 08:22:28.794 AUDUSD,H1: 121 tick events (121 bars, 3166 bar states) processed in 0:00:00.000 (total time 0:00:02.016) 2020.12.10 08:22:28.794 2020.03.10 00:00:00 Testing pass stopped due to a critical error in the EA 2020.12.10 08:22:28.794 2020.03.10 00:00:00 Array AUDUSD,H1: array out of range in 'Array.mq4' (51,59) 2020.12.10 08:22:28.794 2020.03.10 00:00:00 Array AUDUSD,H1: i = 1049 Bar_data_D1 [i][2] = 0.71997 2020.12.10 08:22:28.794 2020.03.10 00:00:00 Array AUDUSD,H1: i = 1048 Bar_data_D1 [i][2] = 0.71453 2020.12.10 08:22:28.794 2020.03.10 00:00:00 Array AUDUSD,H1: i = 1047 Bar_data_D1 [i][2] = 0.71557 2020.12.10 08:22:28.794 2020.03.10 00:00:00 Array AUDUSD,H1: i = 1046 Bar_data_D1 [i][2] = 0.7117599999999999 2020.12.10 08:22:28.794 2020.03.10 00:00:00 Array AUDUSD,H1: i = 1045 Bar_data_D1 [i][2] = 0.7108 2020.12.10 08:22:28.794 2020.03.10 00:00:00 Array AUDUSD,H1: i = 1044 Bar_data_D1 [i][2] = 0.71086 2020.12.10 08:22:28.794 2020.03.10 00:00:00 Array AUDUSD,H1: i = 1043 Bar_data_D1 [i][2] = 0.7160300000000001 2020.12.10 08:22:28.794 2020.03.10 00:00:00 Array AUDUSD,H1: i = 1042 Bar_data_D1 [i][2] = 0.7281 2020.12.10 08:22:28.794 2020.03.10 00:00:00 Array AUDUSD,H1: i = 1041 Bar_data_D1 [i][2] = 0.73392 Tretyakov Rostyslav 2020.12.10 08:12 #36 Dark Kchlyzov: 我不确定,但我认为你需要插入以下内容 if(Bar_data_D1 [i][2]==EMPTY_VALUE)Bar_data_D1 [i][2]=Low_D1_Level; Dark Kchlyzov 2020.12.10 10:34 #37 MakarFX:我不确定,但我认为你需要放一些东西,如 像一个指标? EMPTY_VALUE 指标缓冲区 中的空值 Dark Kchlyzov 2020.12.10 10:45 #38 Dark Kchlyzov: 有点像一个指标? EMPTY_VALUE 指标缓冲区 中的空值 现在是研究结构的时候了 如何以及在何处正确声明MqlRates Bar_data_D1[i].high; Максимум свечи Bar_data_D1[i].low; Минимум свечи 如果你有时间,而且不是太麻烦,你可以这样做(代码中的例子)。 C++代码中充满了信息,但MQL4并没有对什么是什么给出明确的解释。 Tretyakov Rostyslav 2020.12.10 11:45 #39 Dark Kchlyzov: 如果我有时间,而且不是太麻烦的话,我可以(代码中的例子)。 对不起,我不是一个程序员,我只是好奇。 你可以使用 NULL 来代替EMPTY_VALUE 。 Ihor Herasko 2020.12.10 12:54 #40 Dark Kchlyzov:现在是研究结构的时候了如何以及在何处正确声明MqlRates如果你有时间,而且不是太麻烦的话(代码中的例子)。我有很多关于C++的资料,但MQL4对我来说,唉,没有明确的解释什么是什么。 我甚至不知道还有什么可以补充的。原则上,我已经给出了主要的例子。这就是代码。这就是为什么我建议你告诉我,什么是不清楚的。 1234567891011...17 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
似乎没有错误,但它在日志中。
你原来是对的,由于缺乏接近最低限度的
从2002年开始运行,到2016年一切正常。
你最初是对的,因为缺乏一个接近最低限度的
从2002年开始运行,到2016年一切正常。
澳元兑美元2020年同样的事情。从循环中删除2个表达有一个错误,如果我们离开它就没有错误,只是在那一天我们不重新划线。
你有同样的支票吗?
奇怪的是,循环几乎总是在1001条时中断(也许是阵列的限制?)
2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level AUDUSD,H1: array out of range in 'Test_Level.mq4' (51,59)。
2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level AUDUSD,H1: i = 1001 Bar_data_D1 [i][2] = 0.77324
2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level AUDUSD,H1: i = 1000 Bar_data_D1 [i][2] = 0.76934
2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level AUDUSD,H1: i = 999 Bar_data_D1 [i][2] = 0.76907
2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level AUDUSD,H1: i = 998 Bar_data_D1 [i][2] = 0.76963
2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level AUDUSD,H1: i = 997 Bar_data_D1 [i][2] = 0.7548
有一个问题。为什么你要从第一个元素开始循环,而不是从零开始?
如果Low_D1_Level是前一天的水平,那么Min_D_Level应该从Low_D1_Level 中寻找,它等于i=1 ,还是我搞错了?
奇怪的是,循环几乎总是在1001条时中断(也许是阵列的限制?)
并非总是
澳元兑美元对我来说不是这样的
我不确定,但我认为你需要插入以下内容
我不确定,但我认为你需要放一些东西,如
像一个指标?
EMPTY_VALUE
指标缓冲区 中的空值
有点像一个指标?
EMPTY_VALUE
指标缓冲区 中的空值
现在是研究结构的时候了
如何以及在何处正确声明MqlRates
如果你有时间,而且不是太麻烦,你可以这样做(代码中的例子)。
C++代码中充满了信息,但MQL4并没有对什么是什么给出明确的解释。
Dark Kchlyzov:
如果我有时间,而且不是太麻烦的话,我可以(代码中的例子)。
对不起,我不是一个程序员,我只是好奇。
你可以使用 NULL 来代替EMPTY_VALUE 。
现在是研究结构的时候了
如何以及在何处正确声明MqlRates
如果你有时间,而且不是太麻烦的话(代码中的例子)。
我有很多关于C++的资料,但MQL4对我来说,唉,没有明确的解释什么是什么。
我甚至不知道还有什么可以补充的。原则上,我已经给出了主要的例子。这就是代码。这就是为什么我建议你告诉我,什么是不清楚的。