찻주전자의 질문 - 페이지 69

 
rlx :

모든 것이 오류 없이 올바르게 변환됩니다.

" MQL5 참조 / 언어 기본 / 데이터 유형 / 유형 캐스팅" 섹션에서는 두 가지 사항을 설명합니다.

1) long=>이중 변환은 정밀도 손실로 이어질 수 있습니다.

2) long 유형 대신 datetime 유형이 허용됩니다(8바이트 사용).

이론적으로 datetime => 이중 변환도 정밀도 손실로 이어질 수 있다는 결론에 도달했습니다. 그러나 나는 예를 들어 줄 수 없다.

rlx :

날짜를 표시기......또는 버퍼.... 에 이중 유형 으로 저장하지 않는 이유는 무엇입니까?

나는 많은 포인트를 추가했습니다. 그렇지 않으면 일종의 링크가 나타납니다.

"indicator buffers"(2개의 공백)라는 두 단어 사이에 추가 공백을 넣는 것이 더 쉽습니다.

 
Yedelkin :

" MQL5 Reference / Language Basics / Data Types / Type Casting " 섹션은 두 가지를 말합니다.

1) long=>이중 변환은 정밀도 손실로 이어질 수 있습니다.

2) long 유형 대신 datetime 유형이 허용됩니다(8바이트 사용).

이론적으로 datetime => 이중 변환도 정밀도 손실로 이어질 수 있다는 결론에 도달했습니다. 그러나 나는 예를 들어 줄 수 없다.

"indicator buffers"(2개의 공백)라는 두 단어 사이에 추가 공백을 넣는 것이 더 쉽습니다.

그리고 간단한 변형 테스트를 작성하십시오. 모든 것을 직접 볼 수 있습니다. 그리고 나중에 다른 사람들에게

 
Vladix :

그리고 간단한 변형 테스트를 작성하십시오. 모든 것을 직접 볼 수 있습니다. 그리고 나중에 다른 사람들에게

과연 답이 있을까?

"간단한 변환 테스트"는 이미 rlx에 의해 제공되었습니다. 제대로 작동하는 것 같습니다. 참조 자료를 기반으로 한 의심은 위에 요약되어 있습니다. 잘못된 날짜 시간 => 이중 변환의 예가 있는 경우 - 스튜디오로.

 
Yedelkin :

과연 답이 있을까?

"간단한 변환 테스트"는 이미 rlx에 의해 제공되었습니다. 제대로 작동하는 것 같습니다. 참조 자료를 기반으로 한 의심은 위에 요약되어 있습니다. 잘못된 날짜 시간 => 이중 변환의 예가 있는 경우 - 스튜디오로.

 void OnStart ()
  {   
   double vDbl = 1.7976931348623158 e+ 308 ;
   datetime vTime = ( datetime )vDbl;
   
   Print (( double )vTime);  
  }

2011.09.25 16:24:38 테스트 (EURUSD,H1) -9.223372036854776e+018

이것은 문제가 발생할 수 있는 예이지만 이것은 확실히 귀하의 경우가 아닙니다.

 
Vladix :

2011.09.25 16:24:38 테스트 (EURUSD,H1) -9.223372036854776e+018

이것은 문제가 발생할 수 있는 예이지만 이것은 확실히 귀하의 경우가 아닙니다.

고마워! 살고 배우십시오!
 
Vladix :

2011.09.25 16:24:38 테스트 (EURUSD,H1) -9.223372036854776e+018

이것은 문제가 발생할 수 있는 예이지만 이것은 확실히 귀하의 경우가 아닙니다.

20분 동안 유리 고추 냉이를 20분 동안 가루로 만드는 것과 같은 아주 정확한 예는 아닙니다.(이것은 당신에 관한 것이 아니라 이것을 이렇게 사용할 사람들에 관한 것입니다)

현재 날짜/시간 값은 1316816136 10자리, 이것은 40년 만에 나온 것이고, 이중 가수는 16자리,

따라서 이중 가수의 오버플로와 날짜 시간에서 이중으로의 잘못된 변환은 6*40=240년 후에 발생합니다.

나는 우리가 그것을 사용할 수 있다고 생각합니다.

 
Yedelkin :
고마워! 살고 배우십시오!

이제 여러분을 위한 예를 준비했습니다. 출력은 다음과 같습니다.

날짜/시간 유형이 12/31/3000 11:59:59 PM 이전에 정의되며 이것은 정수 32535215999 로 변환됩니다.

이중 유형은 1.7976931348623158 e+308 값까지 정의됩니다.

가능한 최대 날짜/시간 값을 두 배로 변환할 때 유효 자릿수에 대해 여전히 허용 가능한 여백이 있는 것으로 나타났습니다.

따라서 결론은 모든 경우에 올바르게 작동합니다.

우크라이나 :

20분 동안 유리 양 고추 냉이를 바보로 만드는 것과 같이 아주 정확한 예는 아닙니다.

최고의 비유는 아닙니다.

이것은 단지 레코드를 위해 유형을 캐스팅 할 때 값의 경계를 확인해야 하는 경우의 예일 뿐입니다. 그러나 다시 말하지만 이것은 사실이 아닙니다.

 

이전 계산을 잘못했습니다. 더 정확하게는 여기에서: 16번째가 있을 때 15자리의 mk가 사용되며 변환 오류가 있습니다.

   long i,l; double d;
   for (i= 0 ;i< 999999999999999 ;i+= 365 * 86400 ){d=( double )i;l=( long )d; if (i!=l) break ;}
   Print ( "до " ,( 1970 +i/( 365 * 86400 )), " года datetime в double преобразуется верно" );

최대 31711762 datetime이 두 배로 올바르게 변환됩니다.

3100만년까지 우리가 평화롭게 잠들도록 위협합니다.

 

ex5 라이브러리에서 가져온 함수 를 호출합니다.

설명을 부탁드립니다. 읽기 https://www.mql5.com/ru/docs/runtime/imports

시스템 라이브러리(DLL)는 운영 체제의 규칙에 따라 로드됩니다. 라이브러리가 이미 로드된 경우(예: 다른 Expert Advisor 및 병렬로 시작된 다른 클라이언트 터미널에서) 호출이 이미 로드된 라이브러리로 이동합니다.

ex5 라이브러리는 어떻게 로드되나요? 라이브러리가 이미 로드된 경우(예: 다른 Expert Advisor 및 병렬로 시작된 다른 클라이언트 터미널에서도)

테스트용 라이브러리 생성

lib.mq5

 #property library
int       i= 0 ;

int Get( void ) export { return (i++);}

lib.mq5를 lib.ex5로 컴파일

고문을 만들었습니다.

전문가.mq5

 #import "lib.ex5"
   int Get( void );
#import
void OnTick ()
  {
   Print (Get());
  }

컴파일됨.

EURUSD 전문가를 교수형에 처합니다.

인쇄물

0

하나

2

4

5

나는 GBPUSD에 전문가(추가)를 걸었다

인쇄물

6 --- EURUSD EA에서

0 --- GBPUSD EA에서.

7 --- EURUSD EA에서

1 --- GBPUSD EA에서.

8 --- EURUSD EA에서

2 --- GBPUSD EA에서.

저것들. lib.ex5 라이브러리의 인스턴스가 하나 더 GBPUSD Expert Advisor에 로드됩니다.

인쇄할 줄 아는 사람 있어?

6 --- EURUSD EA에서

7 --- GBPUSD EA에서.

8 --- EURUSD EA에서

9 --- GBPUSD EA에서.

10 --- EURUSD EA에서

11 --- GBPUSD EA에서.

MT5 기능만 사용

PS/// 아니면 어떻게든 구체적으로 .

///// 즉. 이 ex5 라이브러리를 한 번 로드해야 합니다.

Документация по MQL5: Программы MQL5 / Вызов импортируемых функций
Документация по MQL5: Программы MQL5 / Вызов импортируемых функций
  • www.mql5.com
Программы MQL5 / Вызов импортируемых функций - Документация по MQL5
 

안녕하세요. 말해 주세요. 주문과 거래에는 티켓이 있지만 포지션에는 티켓이 없는 이유는 무엇입니까?

그리고 티켓과 식별자의 차이점은 무엇입니까?