MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1294

 
ANDREY :

모두에게 좋은 하루!

mql4에서 mql5로 전환하려고 합니다.

문제. 왜 현재 가격과 변수 Hay 값 간의 차이가 숫자 <1이어야 합니까( mql4에서와 같이) mql5는 내가 이해할 수 없는 표현식을 계산하고 표시합니다(예: 2.99999999 -( 빼기)05 .

mql5가 주어진 값의 차이를 올바르게 계산하도록 하는 방법은 무엇입니까? NormalizeDouble() 로 모든 값을 정규화했지만 위의 값은

변함없이 표시됩니다. 두 값 모두 doble 유형이기 때문에 이것은 나에게 이상합니다.

도움을 주셔서 감사합니다.


2.99999999 -(빼기)05 = 2.99999999 / 100000 = 0.0000299999999. 그것이 수학에서 하는 방식입니다.

-(빼기)05는 10의 5승으로 나눕니다.

 
IndependentMK :

다시 안녕.
초보자 질문에주의하십시오.
코드의 오류를 지적해야 하기 때문에 테스터에서 EA는 주문을 열지 않습니다 ...
동시에 컴파일러는 오류 및 경고를 발행하지 않으며 로그는 유사합니다. 오류가 없습니다 ...

조건 중 하나가 충족되지 않아 열리지 않습니다.

이것은

 while (MA_Smoth_B > MA_Smoth_S)

또는

 if (MA_Simpl_B_Op < MA_Simpl_S_Op && MA_Simpl_B_Cl > MA_Simpl_S_Cl)

두 개의 플러시로 주석을 달고 // 그것이 어느 것인지 확인하십시오. 그래야 오류를 찾을 수 있습니다.

 
Александр :

2.99999999 -(빼기)05 = 2.99999999 / 100000 = 0.0000299999999. 그것이 수학에서 하는 방식입니다.

-(빼기)05는 10의 5승으로 나눕니다.

답변 해주셔서 감사합니다. 그런데 왜 프로그램은 1.33671이라는 가격 값과 Hay 1.33664(0.00007이 되어야 함)의 가격 값 사이의 차이를 표현식 대신 계산하고 대신 표현식을 출력하지 않는 이유는 무엇입니까?

동시에 값이 1.33664인 Hay 변수 대신 상수 1.33664(   SymbolInfoDouble(Symbol(),SYMBOL_BID) - 1.33664 ) 그런 다음 프로그램은 이러한 값 간의 실제 차이, 즉 0.00007을 계산합니다. 실제로 코드에서 변수 Hay 는 이전 틱의 주문 시가 값, 이중 유형 값 1.33664 를 받습니다.  

힌트 미리 감사드립니다

 
ANDREY :

답변 해주셔서 감사합니다. 그런데 왜 프로그램은 1.33671이라는 가격 값과 Hay 1.33664(0.00007이 되어야 함)의 가격 값 사이의 차이를 표현식 대신 계산하고 대신 표현식을 출력하지 않는 이유는 무엇입니까?

힌트 미리 감사드립니다

DoubleToString() . 그리고 그것은 MQL5에 관한 것이 아니라 로그에 대한 실제 값의 잘못된 출력에 관한 것입니다. 이는 MQL4에도 동일하게 적용됩니다.

Документация по MQL5: Преобразование данных / DoubleToString
Документация по MQL5: Преобразование данных / DoubleToString
  • www.mql5.com
[in]  Формат точности. Если значение digits лежит в диапазоне от 0 до 16, то будет получено строковое представление числа с указанным количество знаков после запятой. Если значение digits лежит в диапазоне от -1 до -16, то...
 
Artyom Trishkin :

DoubleToString() . 그리고 그것은 MQL5에 관한 것이 아니라 로그에 대한 실제 값의 잘못된 출력에 관한 것입니다. 이는 MQL4에도 동일하게 적용됩니다.

이해했다. 고맙습니다. 이전에는 이러한 문제가 발생하지 않았습니다. 이제 알았어.

지금까지 내 코드와 관련하여 정밀도 형식이 무엇인지 정확히 이해하지 못했습니다. 이것이 소수점 이하 자릿수 인 것 같습니다.
그러나 MT4에서 정확히 동일한 코드(OrderSend 제외)에서 내 기억이 도움이 된다면 Print 기능은 항상 두 가격 값 사이의 차이의 실제 값, 즉 1(0.00000)보다 작은 5자리 숫자를 표시했습니다. 0 이후.

 
ANDREY :

이해했다. 고맙습니다. 이전에는 이러한 문제가 발생하지 않았습니다. 이제 알았어.

지금까지 내 코드와 관련하여 정밀도 형식이 무엇인지 정확히 이해하지 못했습니다. 이것이 소수점 이하 자릿수 인 것 같습니다.
그러나 MT4에서 정확히 동일한 코드(OrderSend 제외)에서 내 기억이 도움이 된다면 Print 기능은 항상 두 가격 값 사이의 차이의 실제 값, 즉 1(0.00000)보다 작은 5자리 숫자를 표시했습니다. 0 이후.

실제 데이터 값이 어디에나 표시됩니다. 실수를 나타내는 형식이 다를 뿐입니다. 출력 형식이 터미널에 지정되지 않은 경우 더 편리한 형식이 결정됩니다. 당연히 이것은 숫자를 나타내는 모든 형식을 알고 있다고 가정합니다.

모든 것이 설명서에 있습니다.

 
Artyom Trishkin :

실제 데이터 값이 어디에나 표시됩니다. 실수를 나타내는 다른 형식입니다 . 출력 형식이 터미널에 지정되지 않은 경우 더 편리한 형식이 결정됩니다. 당연히 이것은 숫자를 나타내는 모든 형식을 알고 있다고 가정합니다.

모든 것이 설명서에 있습니다.

즉, MT4와 MT5는 실수를 나타내는 형식이 다른가요?
그리고 mql5 도움말에서 이 문제를 처리하기 위해 정확히 무엇을 읽어야 합니까?

도와 주셔서 감사합니다

 
Michail_David :
안녕하세요 전문가 여러분. 지표를 조정하는 데 도움이 필요합니다. 지표의 본질은 다음과 같습니다. 이전 막대에 대한 가격 인상 금액을 계산합니다. 별표 막대는 0으로 간주됩니다. 즉, 시가와 종가가 동일합니다. 컴파일시에는 에러가 안나는데 테스트를 해보면 문자의 80번째 20번째 줄에 에러가 납니다. 또한 신호선을 비스듬하게 그립니다. 하지만 이것이 메인 버퍼의 잘못된 계산에 대한 이유라고 생각합니다. 수정을 도와주세요.

확인. 선택받은 소수만이 여기에서 도움을 받는 것 같습니다.

 
Michail_David :

확인. 선택받은 소수만이 여기에서 도움을 받는 것 같습니다.

이렇게 시도

 //--- typical price and its moving average
   for (i= 0 ; i<rates_total - 1 ; i++)
     {
      ExtTempBuffer[i] = NormalizeDouble ((close[i]-open[i])/ Point (), 2 );
 
Vitaly Muzichenko :

이렇게 시도

고마워요, 비탈리. 그러나 여전히 테스트할 때 ExtTempBuffer[i] = NormalizeDouble ((close[i]-open[i])/Point(),2); 요소 [i}에서.