오류, 버그, 질문 - 페이지 1437

 
Документация по MQL5: Математические функции / MathIsValidNumber
Документация по MQL5: Математические функции / MathIsValidNumber
  • www.mql5.com
Математические функции / MathIsValidNumber - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
MQL5 코드에 대한 보다 적극적인 옵티마이저로 인해 동작이 다릅니다.
 
Ilyas :
MathIsValidNumber
고마워, 몰랐어
 
Ilyas :
MQL5 코드에 대한 보다 적극적인 옵티마이저로 인해 동작이 다릅니다.
그리고 MT4는 더 똑똑한 것으로 판명되어 "통합 상수 오버플로" 경고를 발행한 반면 MT5는 침묵했습니다.
 
Ilya Malev :

1. 이 코드가 MT4와 MT5에서 다른 결과를 초래하는 이유는 무엇입니까(MT4에서 더 논리적임)?

문서 읽기

MQL4의 EMPTY_VALUE 는 무엇입니까?

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

다음 줄이 "범위를 벗어남"(첫 번째 호출에서) 오류가 발생하는 이유를 알려주십시오.

발표 - 발표되었지만 누가 buf_ldn[ldn] 버퍼를 채울 것인가?
 
Сергей Таболин :

pr_open 및 pr_close가 처음 액세스될 때 어떤 값을 갖는지 확인하십시오.
 
Сергей Таболин :

결국 이것은 채우기입니다.

아니면 내가 놓친 것이 있습니까?

배열을 선언했지만 배열 의 크기를 지정하지 않았습니다...

정적 예 int buf_lup[1000], buf_ldn[20000];

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

결국 이것은 채우기입니다.

아니면 내가 놓친 것이 있습니까?

아니요, 이것은 배열을 채우는 것이 아닙니다. 또한 ldn = 0이면; 그런 다음 [ ]에 0을 대입하여 배열에 0개의 요소를 선언했습니다. 단 하나의 요소도 없습니다. MQL5 프로그래밍 기본 사항 - 배열 문서에서 배열에 대해 읽어보십시오.
 
Сергей Таболин :

결국 이것은 채우기입니다.

아니면 내가 놓친 것이 있습니까?

채우기 전에 배열의 크기를 설정해야 합니다. (배열 크기 조정). 간단한 예:

 //+------------------------------------------------------------------+
//|                                                         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