mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 152 1...145146147148149150151152153154155156157158159...247 새 코멘트 fxsaber 2019.12.05 10:11 #1511 Slava : 그는 존재합니까? 정말 있나요? 어떤 방법으로? 어떻게 번식할 수 있습니까? 네비게이터의 즐겨찾기 에 스크립트를 배치합니다. void OnStart () {} 잘못된 버전 컴파일 void OnStart () {} 123 터미널을 다시 시작하고 즐겨찾기에서 스크립트 편집을 선택하십시오. Ilyas 2019.12.05 12:34 #1512 Vladimir Simakov : 개발자. 설명이 필요합니다. 무엇을 믿어야 할까요? 문서 또는 구현? 지금까지는 정의되지 않은 동작이 얻어졌습니다. @fxsaber , 공식 설명 전에 사용을 권하지 않습니다. 갑자기 가져 와서 고칠 것입니다. 문서가 오래되었습니다. 수정하겠습니다. 표현식으로 정적 변수를 초기화하지 않는 것이 좋습니다. 가능하면 상수를 사용하십시오. 왜냐하면 상수가 아닌 표현식을 사용할 때 컴파일러는 다음 코드를 생성합니다. //--- исходная функция int func( int value ) { static int myStaticVar= value ; myStaticVar += value; return (myStaticVar); } //--- то, что будет сгенерировано bool __Implicit_myStaticVar_initialized= false ; int __Implicit_myStaticVar= 0 ; //--- исходная функция int func( int value ) { if (!__Implicit_myStaticVar_initialized) { __Implicit_myStaticVar_initialized= true ; __Implicit_myStaticVar= value ; } __Implicit_myStaticVar += value; return (__Implicit_myStaticVar); } 각 호출마다 __Implicit_myStaticVar_initialized 플래그를 확인하는 오버헤드가 발생합니다. 상수가 있는 변형의 경우 다음 코드를 얻습니다. //--- исходная функция int func( int value ) { static int myStaticVar= 10 ; myStaticVar += value ; return (myStaticVar); } //--- то, что будет сгенерировано int __Implicit_myStaticVar= 10 ; int func( int value ) { __Implicit_myStaticVar += value ; return (__Implicit_myStaticVar); } 오버헤드가 없다 fxsaber 2019.12.05 12:52 #1513 Ilyas : 감사합니다. 이제 오버헤드가 명확해졌습니다. fxsaber 2019.12.11 05:48 #1514 비정규화된 가격 값 을 사용자 지정 기호에 쉽게 쓸 수 있습니다. 아래는 간단한 검사입니다. bool IsNorm( const double Price ) { return ( NormalizeDouble (Price, _Digits ) == Price); } #define TOSTRING(A) #A + " = " + DoubleToString (A, 16 ) + " " #define PRINT(A) Print (TOSTRING(A) + TOSTRING( NormalizeDouble (A, _Digits ))) #define ISNORM(A) if (!IsNorm(A)) PRINT(A); void OnTick () { MqlTick Tick; if ( SymbolInfoTick ( _Symbol , Tick)) { ISNORM(Tick.bid) ISNORM(Tick.ask) ISNORM(Tick.last) } } 결과 2019.12 . 11 06 : 46 : 56.458 2019.10 . 09 23 : 59 : 00 Tick.last = 1.8151900000000002 NormalizeDouble (Tick.last, _Digits ) = 1.8151900000000000 2019.12 . 11 06 : 46 : 56.458 2019.10 . 09 23 : 59 : 11 Tick.bid = 1.8151100000000003 NormalizeDouble (Tick.bid, _Digits ) = 1.8151100000000001 2019.12 . 11 06 : 46 : 56.458 2019.10 . 09 23 : 59 : 11 Tick.ask = 1.8153800000000003 NormalizeDouble (Tick.ask, _Digits ) = 1.8153800000000001 2019.12 . 11 06 : 46 : 56.458 2019.10 . 09 23 : 59 : 17 Tick.bid = 1.8151200000000002 NormalizeDouble (Tick.bid, _Digits ) = 1.8151199999999999 2019.12 . 11 06 : 46 : 56.458 2019.10 . 09 23 : 59 : 17 Tick.ask = 1.8153800000000003 NormalizeDouble (Tick.ask, _Digits ) = 1.8153800000000001 Artyom Trishkin 2019.12.11 16:39 #1515 이 주제와 관련이 없는 댓글은 " MQL5 MT5 MetaTrader 5 초보자의 질문 "으로 이동되었습니다. Artyom Trishkin 2019.12.11 19:11 #1516 RickD : ... 질문이 다릅니다. 아마도 MQL5에 정리해야 할 버그가 있고, 초보자를 위한 주제로 옮기는 것은 상황에 대한 빠른 분석에 기여하지 않을 것입니다. 스레드 제목을 읽으십시오. [삭제] 2019.12.11 20:28 #1517 Artyom Trishkin : 스레드 제목을 읽으십시오. 그리고 그 모순을 어디서 보았습니까? 설명된 상황 은 언어의 기능이자 버그일 수 있습니다. 이것이 바로 알아낼 필요가 있었던 것입니다. Artyom Trishkin 2019.12.11 20:53 #1518 RickD : 그리고 그 모순을 어디서 보았습니까? 설명된 상황 은 언어의 기능이자 버그일 수 있습니다. 이것이 바로 알아낼 필요가 있었던 것입니다. 아니요. 첫째, 그것은 버그나 기능으로 판명되었습니다. 그 다음에는 금식이며 기능일 뿐입니다. 테마 - 전용 프로 기능. Roman 2019.12.11 21:52 #1519 @Ilyas @Slava @Renat Fatkhullin mql은 함수에 대한 문서화되지 않은 키워드를 지원합니다. __inline __forceinline 그것들을 사용하는 것이 의미가 있습니까? 그렇다면 컴파일러는 어떤 경우에 이를 수락합니까? Roffild 2019.12.13 01:44 #1520 ArrayReverse 도움말에서: ArraySetAsSeries() 함수 는 배열 요소를 물리적으로 이동하지 않고 인덱싱 방향을 거꾸로 뒤집어 요소에 대한 액세스를 시계열 처럼 구성합니다 . ArrayReverse() 함수는 배열이 "반전"되는 방식으로 배열의 요소를 물리적으로 이동합니다. 그러나 이 코드는 그렇지 않음을 증명합니다. MqlRates rt[]; CopyRates ( Symbol (), 0 , 0 , 5 , rt); ArraySetAsSeries (rt, true ); ArrayResize (rt, 6 ); // добавляет элемент в конец массива //ArraySetAsSeries(rt, true); for ( int x = 0 ; x < ArraySize (rt); x++) { Print (rt[x].time); } Print ( "=================" );(EURUSD,H1) 2019.12 . 13 02 : 00 : 00 (EURUSD,H1) 2019.12 . 13 01 : 00 : 00 (EURUSD,H1) 2019.12 . 13 00 : 00 : 00 (EURUSD,H1) 2019.12 . 12 23 : 00 : 00 (EURUSD,H1) 2019.12 . 12 22 : 00 : 00 (EURUSD,H1) 1970.01 . 01 00 : 00 : 00 - последний элемент (EURUSD,H1) ================= MqlRates rt[]; CopyRates ( Symbol (), 0 , 0 , 5 , rt); //ArraySetAsSeries(rt, true); ArrayResize (rt, 6 ); // добавляет элемент в конец массива ArraySetAsSeries (rt, true ); for ( int x = 0 ; x < ArraySize (rt); x++) { Print (rt[x].time); } Print ( "=================" );(EURUSD,H1) 1970.01 . 01 00 : 09 : 19 - последний элемент (EURUSD,H1) 2019.12 . 13 02 : 00 : 00 (EURUSD,H1) 2019.12 . 13 01 : 00 : 00 (EURUSD,H1) 2019.12 . 13 00 : 00 : 00 (EURUSD,H1) 2019.12 . 12 23 : 00 : 00 (EURUSD,H1) 2019.12 . 12 22 : 00 : 00 (EURUSD,H1) ================= 1...145146147148149150151152153154155156157158159...247 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
그는 존재합니까? 정말 있나요? 어떤 방법으로?
어떻게 번식할 수 있습니까?
네비게이터의 즐겨찾기 에 스크립트를 배치합니다.
잘못된 버전 컴파일
터미널을 다시 시작하고 즐겨찾기에서 스크립트 편집을 선택하십시오.
개발자. 설명이 필요합니다. 무엇을 믿어야 할까요? 문서 또는 구현? 지금까지는 정의되지 않은 동작이 얻어졌습니다.
@fxsaber , 공식 설명 전에 사용을 권하지 않습니다. 갑자기 가져 와서 고칠 것입니다.
문서가 오래되었습니다. 수정하겠습니다.
표현식으로 정적 변수를 초기화하지 않는 것이 좋습니다. 가능하면 상수를 사용하십시오.
왜냐하면 상수가 아닌 표현식을 사용할 때 컴파일러는 다음 코드를 생성합니다.
각 호출마다 __Implicit_myStaticVar_initialized 플래그를 확인하는 오버헤드가 발생합니다.
상수가 있는 변형의 경우 다음 코드를 얻습니다.
오버헤드가 없다
감사합니다. 이제 오버헤드가 명확해졌습니다.
결과
... 질문이 다릅니다. 아마도 MQL5에 정리해야 할 버그가 있고, 초보자를 위한 주제로 옮기는 것은 상황에 대한 빠른 분석에 기여하지 않을 것입니다.
스레드 제목을 읽으십시오.
스레드 제목을 읽으십시오.
그리고 그 모순을 어디서 보았습니까? 설명된 상황 은 언어의 기능이자 버그일 수 있습니다. 이것이 바로 알아낼 필요가 있었던 것입니다.
그리고 그 모순을 어디서 보았습니까? 설명된 상황 은 언어의 기능이자 버그일 수 있습니다. 이것이 바로 알아낼 필요가 있었던 것입니다.
아니요. 첫째, 그것은 버그나 기능으로 판명되었습니다. 그 다음에는 금식이며 기능일 뿐입니다. 테마 - 전용 프로 기능.
@Ilyas @Slava @Renat Fatkhullin
mql은 함수에 대한 문서화되지 않은 키워드를 지원합니다.
그것들을 사용하는 것이 의미가 있습니까?
그렇다면 컴파일러는 어떤 경우에 이를 수락합니까?
ArrayReverse 도움말에서:
ArraySetAsSeries() 함수 는 배열 요소를 물리적으로 이동하지 않고 인덱싱 방향을 거꾸로 뒤집어 요소에 대한 액세스를 시계열 처럼 구성합니다 . ArrayReverse() 함수는 배열이 "반전"되는 방식으로 배열의 요소를 물리적으로 이동합니다.
그러나 이 코드는 그렇지 않음을 증명합니다.