mql4 언어의 기능, 미묘함 및 작업 방법 - 페이지 30

 
Nauris Zukas :

안녕하세요!
"for" 루프에서 "double"을 사용하는 올바른 방법은 무엇입니까? 도움말에서 "더블"의 사용에 대한 금지는 없는 것 같습니다.

간단히 말해서 "이중"은 각 반복 후에 Expression3을 정규화하지 않기 때문에 " for " 루프에서 사용하지 않는 것이 좋습니다. 이것은 적어도 2가지 문제를 일으킬 수 있습니다:
1) 반복 횟수가 정확하지 않습니다.
2) 연산자에서 계산에 Expression3을 사용하면 잘못된 결과가 나타납니다.

Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
. Все повторяется, пока выражение2 не станет ложным. Если оно ложно, цикл заканчивается и управление передается следующему оператору. ВыражениеЗ вычисляется после каждой итерации. могут отсутствовать, однако разделяющие их точки с запятыми (;) опускать нельзя. Если опущено...
 
Nauris Zukas :

감사합니다. 왜 이런 일이 발생하는지 이해합니다. 그래서 정규화를 시도했습니다. 나는 성공하지 못했다. Alexey Viktorov 변종도 상황을 수정하지 않았으며 값은 비정규화 상태로 유지됩니다. 그래서 질문이 남습니다. 루프에서 "이중"을 사용하고 항상 정확한 반복 횟수를 얻을 수 있습니까?

정수를 얻으려면 원하는 거듭 제곱에 10을 곱하십시오. 처음에는 나도 고통을 겪었습니다. 잠깐, 가격을 정수로 가져오고 정수로 작업하거나 정수로 반올림(반올림)하는 작업도 했습니다. 오류가 적고 가독성이 좋습니다.

일반적으로 한 프로그래머가 거래소에서 보고를 받은 후 말했듯이 특정 용량의 숫자가 정수가 아닌 실수로 표시되는 이유를 이해하지 못합니다. 이것은 논리적으로 옳지 않습니다.

 
Valeriy Yastremskiy :

정수를 얻으려면 원하는 거듭 제곱에 10을 곱하십시오. 처음에는 나도 고통을 겪었습니다. 잠깐, 가격을 정수로 가져오고 정수로 작업하거나 정수로 반올림(반올림)하는 작업도 했습니다. 오류가 적고 가독성이 좋습니다.

일반적으로 한 프로그래머가 거래소에서 보고를 받은 후 말했듯이 특정 용량의 숫자가 정수가 아닌 실수로 표시되는 이유를 이해하지 못합니다. 이것은 논리적으로 옳지 않습니다.

고마워, 나는 구식 방식으로 int를 사용한 다음 두 배로 나눌 것이다. ;)

 
Nauris Zukas :

감사합니다. 그러나 귀하의 예에서도 올바른 결과를 얻지 못했습니다. printf에서 정규화가 일어나지 않는 것을 볼 수 있습니다:

죄송합니다, 확인했어야 합니다. 그래서 "나는 최고를 원했지만 항상 그랬다"는 것이 밝혀졌습니다.

결과

 2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 1.0 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 1.2 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 1.4 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 1.6 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 1.8 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 2.0 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 2.2 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 2.4 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 2.6 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 2.8 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       MaxPass: 10 count: 10 i: 3.0

올바른 코드

 /********************Script program start function*******************/
double expr1= 1.0 ;
double expr2= 2.8 ;
double step= 0.2 ;
double i;
int count= 0 ;
void OnStart ()
 {
   for (i=expr1; i<=expr2; i= NormalizeDouble (i+step, 1 ) )
   {
    count++;
     Print ( " i: " , DoubleToString (i, 1 ), " step: " , DoubleToString (step, 1 ));
   }
   int MaxPass=( int ) NormalizeDouble (((expr2-expr1)/step), 0 )+ 1 ;
   Print ( " MaxPass: " , MaxPass, " count: " , count, " i: " , i);
 } /*******************************************************************/
 
Alexey Viktorov :

올바른 코드

step=0.04 로 설정하지 않도록 주의하세요 ;)

 
Andrey Khatimlianskii :

step=0.04 로 설정하지 않도록 주의하세요 ;)

이 조언은 두뇌를 사용하는 방법을 모르는 사람들에게만 해당됩니다.)))

 
Alexey Viktorov :

죄송합니다, 확인했어야 합니다. 그래서 "나는 최고를 원했지만 항상 그랬다"는 것이 밝혀졌습니다.

결과

올바른 코드

 i= NormalizeDouble (i+step, 1 )

아, 고마워! 나는 그것에 대해 스스로 생각하지 않았다. 이것은 프로그래밍 초보자를 돕는 미묘함입니다! ;)

 
구조 배열 을 정렬하는 방법을 찾고 있습니다. 작업 옵션이 있는 사람이 있습니까?
 
Vladimir Pastushak :
구조 배열 을 정렬하는 방법을 찾고 있습니다. 작업 옵션이 있는 사람이 있습니까?

https://www.mql5.com/ru/forum/170952/page134#comment_11532251

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2019.04.19
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
fxsaber :

https://www.mql5.com/en/forum/170952/page134#comment_11532251

작동하지 않습니다...