Array out of range in Need of help - ページ 14

 
Dark Kchlyzov:

公式からMT4をインストールし、試運転をしたかった。

午後MT4端末のインストールに問題があったサイトより4版をダウンロードし、インストールを開始しましたが、インストール終了後、MT5ターミナルが表示されます。MT4を正確にインストールするにはどうしたらいいですか?

回答:できません旧バージョンのサポートは終了しています。MT5 をご利用ください。

You can do it


 

全使用期間でのテスト

2016.01.01以降のAUDUSD

EURUSD 2011.01.01以降

2011.01.01以降のGBPUSD

中古と

 for(int i = 1;  ;i++)

и

 for(int i = 1; i<ArrayRange(Bar_data_D1,0) ;i++)
エラーログは添付されません
ファイル:
AUDUSD.log  305 kb
EURUSD.log  612 kb
GBPUSD.log  612 kb
 

解決策

 for(int i = 1; i<ArrayRange(Bar_data_D1,0) ;i++)
   {
   if(Bar_data_D1 [i][2]!=Bar_data_D1 [i+1][2]&&Bar_data_D1 [i][2] < Low_D1_Level)
      {Min_D_Level = Bar_data_D1 [i][2];
      break;}
      
   if(Bar_data_D1 [i][2]==Bar_data_D1 [i+1][2])
      {Min_D_Level = Low_D1_Level;
      break;}
    } 
 

インジケータを作成、全て正しく描画されているようです


 
MakarFX:

解決方法

投稿の最初のページに戻る !

2020.12.14 14:23:44.222 Expert Test_Level AUDUSD,H1: 削除しました。

2020.12.14 14:23:44.234 Expert Test_Level AUDUSD,H1: ロードに成功しました。

2020.12.14 14:23:44.365 TestGenerator: 現在のスプレッド 20 が使用されています。

2020.12.14 14:23:45.263 2020.01.24 00:00:00 Test_Level テストを開始しました。

2020.12.14 14:24:29.044 2020.02.10 00:05:00 Test_Level AUDUSD,H1: 'Test_Level.mq4' (39,40) の配列は範囲外です。

2020.12.14 14:24:29.044 2020.02.10 00:05:00 EAの重大なエラーのためテストパス停止

2020.12.14 14:24:29.044 AUDUSD,H1: 245717 tick events (265 bars, 9638212 bar states) processed in 0:00:43.781 (total time 0:00:44.766)

不要なものをすべて削除し、関数を本体に移動し、あなたの解決策を追加し、再び'Test_Level.mq4' (39,40) で配列が範囲外になりました -:)

オールオッケー

で、実際に範囲外の配列が ここにあります。


//+------------------------------------------------------------------+
//|                                                   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   "3.0"
#property strict
double    Bar_data_D1 [][6]; // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров D1
double    Low_D1_Level;      // Возвращает значение минимальной цены бара  D1
double    Min_D_Level ;      // ближайшей минимальный  D уровень
int       A_C_R;             // возвращает количество скопированных баров D1
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   DestroyObject();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
 A_C_R = ArrayCopyRates(Bar_data_D1,_Symbol,PERIOD_D1); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров
 Low_D1_Level   = iLow (_Symbol,PERIOD_D1,1);           // Возвращает значение минимальной цены бара  D1
 
 //--- Min_D_Leve V 1.2
 for(int i = 1; i<ArrayRange(Bar_data_D1,0) ;i++)
    {
     if(Bar_data_D1 [i][2] != Bar_data_D1 [i+1][2] && Bar_data_D1 [i][2] < Low_D1_Level)
       {
        Min_D_Level = Bar_data_D1 [i][2];break;
       }
      
     if(Bar_data_D1 [i][2] == Bar_data_D1 [i+1][2])
       {
        Min_D_Level = Low_D1_Level;break;
       }
    }
/* 
 //--- Min_D_Leve V 1.0 
 //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);
      }
   } 
   Comment(" A_C_R возвращает количество скопированных баров D1 = ",A_C_R); 
}
//+------------------------------------------------------------------+
//|        функция удаление всех объектов созданных советником
//+------------------------------------------------------------------+
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 удалён >>");}


   }
}

 
Dark Kchlyzov:

投稿の最初のページから戻る !


不要なものをすべて削除し、関数を本体に移動し、あなたのソリューションを追加し、再び'Test_Level.mq4' (39,40) で範囲外の配列 -:) を追加しました。

端末のエラー

上の投稿からコードをコピーして、テストを実行しました。

ログはこちら

ファイル:
AUDUSD.log  7368 kb
 
これから別のブローカー、つまり別の端末で試してみます。
 
10年後のアルパリ、間違いはない
ファイル:
Alpari_AUDUSD.log  15491 kb
 
MakarFX:

端末のエラー

上の投稿からコードをコピーして、テストを実行しました。

これがそのログです。

以下、ニュースです。

そして、2020年1月1日のAUDUSDからの可視化実行で

おそらく、違いはないでしょう。

 

ブローカーは誰ですか?

使用する端末は?