エラー、バグ、質問 - ページ 1437

 
Документация по MQL5: Математические функции / MathIsValidNumber
Документация по MQL5: Математические функции / MathIsValidNumber
  • www.mql5.com
Математические функции / MathIsValidNumber - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
MQL5のコードに対してよりアグレッシブなオプティマイザを使用するため、動作が異なっています。
 
Ilyas:
MathIsValidNumber
ありがとうございます、知りませんでした
 
Ilyas:
MQL5コードのオプティマイザがよりアグレッシブになっているため、挙動が異なっています。
また、MT4はよりスマートで、「integral constant overflow」の警告を出しましたが、MT5は無言でした。
 
Ilya Malev:

1.MT4とMT5で、このコードが異なる結果を導くのはなぜですか(MT4ではより論理的)?

ドキュメントを 読む

MQL4でEMPTY_VALUEは どういう意味ですか?

Прочие константы - Документация на MQL4
  • docs.mql4.com
Прочие константы - Документация на MQL4
 
Сергей Таболин:

以下の行(初回アクセス時)に「out of range」エラーが出るのはなぜか、教えてください。

Declare - 宣言されたが、誰がバッファ buf_ldn[ldn] を埋めるのか?
 
Сергей Таболин:

最初にアクセスしたときのpr_openとpr_closeの値を見てください。
 
Сергей Таболин:

が、その穴埋めなんですね。

それとも、何か見落としているのでしょうか?

配列を宣言したが、配列のサイズが 指定されていない ...

静的な例int buf_lup[1000], buf_ldn[20000];

 
Сергей Таболин:

が、その穴埋めなんですね。

それとも、何か見落としているのでしょうか?

いいえ、アレイフィルではありません。また、ldn = 0;の場合、[ ]に0を入れることで、配列の要素を0個、つまり1個もないと宣言したことになります。MQL5で配列:MQL5プログラミングの基礎」の記事を読む。
 
Сергей Таболин:

が、その穴埋めなんですね。

それとも、何か見落としているのでしょうか?

配列を埋める前に、配列のサイズを設定する必要があります。(ArrayRezise)。簡単な例です。

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                              Copyright © 2015, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property script_show_inputs
input bool show_error=true; // true - выполнить с ишибкой
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int buf_ldn[]; // объявили динамический массив.
   Print("Размер массива buf_ldn[]=",ArraySize(buf_ldn)); // выведем на печать размер массива
   if(show_error)
     {
      //--- попытка присвоить значение элементу массива с индексом "0" вызовет ошибку:
      //--- Test (EURUSD,M15)   array out of range in 'Test.mq5' (22,14)
      buf_ldn[0]=1;
     }
   else
     {
      //--- установим новый размер массива:
      ArrayResize(buf_ldn,1);
      //--- попытка присвоить значение элементу массива с индексом "0" НЕ вызовет ошибку:
      buf_ldn[0]=1;
      //--- выведем на печать размер массива и значение элемента с индексом "0"
      Print("Размер массива buf_ldn[]=",ArraySize(buf_ldn),", элемент с индексом ""0"" имеет значение:",buf_ldn[0]);
     }
  }
//+------------------------------------------------------------------+
ファイル:
Test.mq5  2 kb