MQL4 문서에 대한 토론 - 페이지 16

 
Yurixx :

그리고 double의 normalization이 필요할 때 명확한 설명을 해주시면 감사하겠습니다.

정확히는 여기에 명백한 오해가 있습니다. 이 기능에 대한 도움말에는 이 기능이 절대적으로 쓸모가 없는 예가 있습니다.

더블 NormalizeDouble( 이중 값, 정수 숫자)
부동 소수점 값을 지정된 정밀도로 반올림합니다. Double 유형의 정규화된 값을 반환합니다.
계산된 StopLoss 및 TakeProfit 값과 보류 중인 주문의 공개 가격은 사전 정의된 Digits 변수에 값이 저장되는 정밀도로 정규화되어야 합니다.
매개변수:
- 부동 소수점 값.
숫자 - 소수점 이하 자릿수(0-8)의 정밀도 형식입니다.
견본:
 이중 var1=0.123456789;
  인쇄(DoubleToStr(NormalizeDouble(var1,5),5));
  // 출력: 0.12346

이 이중 전환은 처음 보았을 때 나를 크게 혼란스럽게 했습니다. 실제로 로그에 Expert Advisors를 표시할 때는 다음을 수행하는 것으로 충분합니다.

 인쇄( DoubleToStr(var1, 5) );
아마도 일종의 거래 기능이 있는 예가 훨씬 더 유익할 것입니다. 정규화가 정말로 필요한 곳입니다. 여기에서 stdlib.mq4의 CompareDoubles() 함수를 사용한 예제도 매우 유익할 것입니다(초보자가 거의 변함없이 밟는 갈퀴).

// Функция корректного сравнения двух переменных типа double из библиотеки stdlib.mq4
bool CompareDoubles ( double number1 , double number2 )
{
   if ( NormalizeDouble ( number1 - number2 , 8 ) == 0 ) return ( true ) ;
   else return ( false ) ; 
}
Renat , 옵션이 아닌 이유는 무엇입니까?
 
그런 술이 지나고 나니, 오랫동안 괴로워하던 제 질문을 드리고 싶습니다. 다음은 예제 코드입니다.
 int start ()
  {
   double haOpen , haHigh , haLow , haClose ;
   if ( Bars <= 10 ) return ( 0 ) ;
   ExtCountedBars = IndicatorCounted () ;
//---- check for possible errors
   if ( ExtCountedBars < 0 ) return ( - 1 ) ;
첫 번째 return(0)과 두 번째 return(-1)의 근본적인 차이점은 무엇입니까?
이것이 지표(또는 Expert Advisor)의 실행에 어떤 영향을 줍니까?
음수 값이 반환되면 어떻게 됩니까?
그리고 다음과 같이 쓸 수 있습니까?
 void start ()
{
  //
  //...
  //
  return ;
}
 
근본적인 차이는 없으므로 반환된 값은 터미널에서 (현재) 분석되지 않습니다. 사실, 이것은 프로그래머 자신이 이 경우 start() 함수의 비표준 종료(값 빼기 1)가 있음을 이해하는 데 도움이 되는 표기법 스타일입니다.
 
PSmith :
그리고 다음과 같이 쓸 수 있습니까?
 void start ()
{
  //
  //...
  //
  return ;
}

예를 들어, 이것은 내가 최근에 정확히 쓰고 있는 것입니다. :) 게다가 최종 반환도 전혀 사용하지 않습니다. 문서 어딘가에 void 유형의 함수에서 최종 반환이 필요하지 않은 것으로 보입니다.
 
그리고 여기에 또 다른 질문이 있습니다. 왜 함수가
이중 iVolume ( 문자열 기호, int timeframe, int shift)
double 유형의 값을 반환합니까?
 
처음에는 두 배가 아니었지만 어느 시점에서 갑자기 int 유형 이 볼륨을 저장하는 데 항상 적합하지 않다는 것이 밝혀졌습니다(예: 매우 변동성이 큰 상품의 경우 월간 기간을 사용). 이 경우 오버플로 오류가 발생하는 것은 어렵지 않습니다.
 

문서(데이터 유형)에서: 정수 상수는 -2147483648에서 2147483647 사이의 값을 가정할 수 있습니다. 2002년 7월, EURUSD: 역사상 월별 최대 틱 수, 670000. 이 최대 틱 볼륨으로도 오버플로하는 데 3000개월이 걸립니다. 250년. 반면에 볼륨은 더 커질 수 있으므로 이론적으로 달성할 수 없는 수치는 아닙니다...

 
Mathemat :

문서(데이터 유형)에서: 정수 상수는 -2147483648에서 2147483647 사이의 값을 가정할 수 있습니다. 2002년 7월, EURUSD: 역사상 월별 최대 틱 수, 670000 250년. 반면에 볼륨은 더 커질 수 있으므로 이론적으로 달성할 수 없는 수치는 아닙니다...


나는 똑같은 질문을 했고 똑같은 대답을 얻었다. 믿기 어렵더라도. 하지만 주식시장의 시세를 MT4에 넣으면...
 
같은 달 제작: _DJI - 42228720! 응...
 

Rosh , 귀하의 침묵을 올바르게 이해한다면 어떤 경우에 어떤 표현식/변수 정규화가 필요한지 명확한 공식이 없습니다. 그렇다면 더 간단한 질문에 답할 수 있습니다. 형식의 계산된 값을 정규화해야 합니까?

정수 StLS=25;
이중 prc = 묻기 + StLs*Point;

아니면 실험을 통해 스스로 알아내야 합니까?