mt5 전략 테스터 틱 - 페이지 9

 
WhooDoo22 :

안녕하세요 MQL5 커뮤니티 여러분,

테스터에서 전략을 실행할 때 이와 같은 숫자를 만난 사람이 있습니까? -1.000000000006551e-005 및 1.000000000006551e-005(예, 0이 11개입니다). 특정 이중 형식 유형이어야 하지만 어떤 이중 형식 유형이 있습니까?

또한 예, ok, ok, 표준 int 데이터 유형의 최소값은 -2 147 483 648이고 최대값은 2 147 483 647인 MQL5 문서를 읽고 있습니다. 그러면 물론 다음과 같은 unsigned int 데이터 유형이 있습니다. 최소값은 0이고 최대값은 4 294 967 295 BUT ;) 최소값이 마이너스 -4 294 967 295 이고 최대값이 0 인 int 데이터 유형이 없습니다. int가 있을 것이라고 생각했습니다. 이러한 최소값과 최대값을 갖는 데이터 유형이지만 그것이 있는 그대로입니다. 이전 문은 추가 데이터 유형에도 적용될 수 있습니다.

고맙습니다

0.00001은 1과 동일하며 e-5는 지수 형식입니다. 끝에 있는 추가 숫자인 6551은 0.00000000000000006551과 동일하며 이것이 double 을 비교하는 데 문제가 있는 이유입니다. . . 당신은 이것을 읽을 필요가 있고, 당신이 필요하다면 약간의 조사를 할 필요가 있습니다. 그래서 당신은 무슨 일이 일어나고 있는지 이해합니다: Can price != price ?
Can price != price ? - MQL4 forum
  • www.mql5.com
Can price != price ? - MQL4 forum
 
RaptorUK :
0.00001은 1과 동일하며 e-5는 지수 형식입니다. 끝에 있는 추가 숫자인 6551은 0.00000000000000006551과 동일하며 이것이 double 을 비교하는 데 문제가 있는 이유입니다. . . 당신은 이것을 읽을 필요가 있고, 당신이 필요하다면 약간의 조사를 할 필요가 있습니다. 그래서 당신은 무슨 일이 일어나고 있는지 이해합니다: Can price != price ?

사이먼,

많은 의무를 지고 있습니다. 저는 스레드를 읽고 있으며 이중 비교를 위한 관련된 mql4 스레드 포스터의 일반적인 솔루션은 올바른 값을 반환하기 위해 이러한 이중을 적절하게 반올림하는 방법을 발견하고 활용하는 것이라고 믿습니다. 이에 대해 뭐라고 합니까?

고맙습니다

 
WhooDoo22 :

사이먼,

많은 의무를 지고 있습니다. 저는 스레드를 읽고 있으며 이중 비교를 위한 관련된 mql4 스레드 포스터의 일반적인 솔루션은 올바른 값을 반환하기 위해 이러한 이중을 적절하게 반올림하는 방법을 발견하고 활용하는 것이라고 믿습니다. 이에 대해 뭐라고 합니까?

고맙습니다

위의 게시물 컨텍스트에서 복식 비교는 중요 하지 않습니다. 단순히 복식을 비교할 수 없는 이유를 이해하는 것이 중요합니다.
 
RaptorUK :
위의 게시물 컨텍스트에서 복식 비교는 중요하지 않습니다. 단순히 복식을 비교할 수 없는 이유를 이해하는 것이 중요합니다.

왜요? 가격 값이 4자리 및 5자리 형식으로 반환된다고 생각하기 때문입니다(2자리 및 3자리의 가격 값을 반환하는 USDJPY와 같은 예외는 제외). 나는 이것을 필요 이상으로 오래 끌고 싶지 않기 때문에 그것을 한 번만 분해하려고 노력할 것입니다.

USDCHF의 입찰 가격은 현재 0.92909이고 가장 먼 MetaTrader5가 이 가격 값을 계산한다고 생각합니다. 이 값은 소수점 오른쪽으로 16자리입니다. 이 경우 USDCHF의 가격 0.92909 00000000000 계산에 마지막 숫자 9 뒤에 11자리가 추가됩니다. . double을 단순히 비교할 수 없는 이유는 가격의 소수점 오른쪽 나머지 자리(터미널에서 읽을 수 있는 자리가 아니라 터미널에서 읽을 수 없는 자리)가 불평등 문제를 일으키기 때문이라고 생각합니다.

고맙습니다

 
WhooDoo22 :

왜요? 가격 값이 4자리 및 5자리 형식으로 반환된다고 생각하기 때문입니다(2자리 및 3자리의 가격 값을 반환하는 USDJPY와 같은 예외는 제외). 나는 이것을 필요 이상으로 오래 끌고 싶지 않기 때문에 그것을 한 번만 분해하려고 노력할 것입니다.

USDCHF의 입찰 가격은 현재 0.92909이고 가장 먼 MetaTrader5가 이 가격 값을 계산한다고 생각합니다. 이 값은 소수점 오른쪽으로 16자리입니다. 이 경우 USDCHF의 가격 0.92909 계산에 마지막 9자리 뒤에 11자리가 추가됩니다. 00000000000 . Double을 단순하게 비교할 수 없는 이유는 가격의 소수점 오른쪽 나머지 자리(터미널에서 읽을 수 있는 자리가 아니라 터미널에서 읽을 수 없는 자리)가 불평등 문제를 일으키기 때문이라고 생각합니다.

고맙습니다

double의 문제는 이진 표현에서 비롯됩니다. 정확한 이진 표현이 없는 double이 있으므로 1.000000000006551e-005와 같은 결과를 얻습니다. 나는 여기에 자세한 설명 을 입력하지 않습니다. 관심이 있다면 예를 들어 이것을 읽을 수 있습니다.
Double-precision floating-point format - Wikipedia, the free encyclopedia
Double-precision floating-point format - Wikipedia, the free encyclopedia
  • en.wikipedia.org
Double-precision floating-point format is a computer number format that occupies 8 bytes (64 bits) in computer memory and represents a wide dynamic range of values by using floating point. Computers with 32-bit storage locations use two memory locations to store a 64-bit double-precision number (a single storage location can hold a...
 
WhooDoo22 :

왜요?

본질적으로 링크를 제공한 스레드의 첫 번째 페이지에 모두 설명되어 있습니다. 1.57373의 값은 실제로 1.5737300000000001의 이중 값으로 유지될 수 있는 반면 NormalizeDouble(1.57373, 5)은 1.5737299999999999의 이중 값을 생성할 수 있습니다. . . 이것이 이중 값이 저장되는 방식이며 부동 소수점 숫자(부동 소수점 숫자 조회, 읽기 및 이해)이며 보유된 값은 보유하고 있다고 생각하는 값과 정확히 동일하지 않은 경우가 많습니다.

따라서 귀하의 의견은 두 배의 빼기를 보여주고 그 차이를 1.0000000000xyz -e5로 볼 수 있습니다. 이것은 이것이 double이 부동 소수점 숫자 로 저장되는 방식이기 때문입니다.

Articles - Understanding Floating Point Number Representation - Cprogramming.com
Articles - Understanding Floating Point Number Representation - Cprogramming.com
  • www.cprogramming.com
Floating point representations vary from machine to machine, as I've implied. Fortunately one is by far the most common these days: the IEEE-754 standard. This standard is prevalent enough that it's worthwhile to look at it in depth; chances are good you'd be able to use this information on your platform (look for ieee754.h). An IEEE-754...
 
angevoyageur :
double의 문제는 이진 표현에서 비롯됩니다. 정확한 이진 표현이 없는 double이 있으므로 1.000000000006551e-005와 같은 결과를 얻습니다. 나는 여기에 자세한 설명 을 입력하지 않습니다. 관심이 있다면 예를 들어 이것을 읽을 수 있습니다.

1.000000000006551e-005의 소수점 오른쪽 16번째 자리는 e-005입니다.

1.000000000006551e-005는 소수점 오른쪽의 16번째 자리가 정수가 아니라 e-005이기 때문에 정확한 이진 표현이 없다는 말씀이신가요?


"여기에 자세한 설명은 넣지 않겠습니다."

왜 안 돼? 자세한 설명을 쓰고 싶다면 꼭 그렇게 하세요.


"관심이 있다면 예를 들어 이것을 읽을 수 있습니다."

읽기 시작했습니다.

고맙습니다

Double-precision floating-point format - Wikipedia, the free encyclopedia
Double-precision floating-point format - Wikipedia, the free encyclopedia
  • en.wikipedia.org
Double-precision floating-point format is a computer number format that occupies 8 bytes (64 bits) in computer memory and represents a wide dynamic range of values by using floating point. Computers with 32-bit storage locations use two memory locations to store a 64-bit double-precision number (a single storage location can hold a...
 
WhooDoo22 :


"여기에 자세한 설명은 넣지 않겠습니다."

왜 안 돼? 자세한 설명을 쓰고 싶다면 꼭 그렇게 하세요.


제대로 코딩하려면 알아야 할 기본적인 기본 사항에 대해 토론한 것을 기억하십니까? 부동 소수점 숫자는 그 중 하나입니다. . . DYOR , 거기에는 많은 정보가 있습니다. 찾고, 읽고, 이해하면 코딩을 조금 더 잘할 수 있습니다.
DYOR
DYOR
  • acronyms.thefreedictionary.com
What does DYOR stand for?
 
WhooDoo22 :

1.000000000006551e-005의 소수점 오른쪽 16번째 자리는 e-005입니다.

1.000000000006551e-005는 소수점 오른쪽의 16번째 자리가 정수가 아니라 e-005이기 때문에 정확한 이진 표현이 없다는 말씀이신가요?


아니요. 제 링크 및/또는 RaptorUK 중 하나를 읽으면 더 명확해집니다. 그렇지 않은 경우 다시 읽으십시오 :-D

1.000000000006551e-005는 단순히 0.00001000000000006551에 대한 또 다른 표기법입니다.

 
RaptorUK :

본질적으로 링크를 제공한 스레드의 첫 번째 페이지에 모두 설명되어 있습니다. 1.57373의 값은 실제로 1.5737300000000001의 이중 값으로 유지될 수 있는 반면 NormalizeDouble(1.57373, 5)은 1.5737299999999999의 이중 값을 생성할 수 있습니다. . . 이것이 이중 값이 저장되는 방식이며 부동 소수점 숫자(부동 소수점 숫자 조회, 읽기 및 이해)이며 보유된 값이 보유하고 있다고 생각하는 값과 정확히 동일하지 않은 경우가 많습니다.

따라서 귀하의 의견은 두 배의 빼기를 보여주고 그 차이를 1.0000000000xyz -e5로 볼 수 있습니다. 이것은 이것이 double이 부동 소수점 숫자 로 저장되는 방식이기 때문입니다.

1.57373(무시)

1.5737300000000001

1.5737299999999999

"가장 가까운 5번째 자리로 반올림된 두 값이 모두 같습니다"

가장 가까운 5번째로 반올림된 두 값은 모두 1.57373입니다.


"하지만 직접 비교는 같지 않다"

네, 차이가 있기 때문입니다.


"이것이 이중 값이 저장되는 방식입니다"

1.5737300000000001과 같은 Double 값은 1.57373으로 저장됩니다(normalize double이 사용되는 경우 가정). normalize double을 사용하지 않으면 double 값 1.5737300000000001이 이 값 형식을 유지합니다. 맞습니까?


"그리고 종종 보유 가치는 보유하고 있다고 생각하는 가치와 정확히 동일하지 않습니다."

내 마지막 진술도 이 진술에 응답합니다.


알려주신 링크 읽어보겠습니다. 감사합니다.

고맙습니다