오류, 버그, 질문 - 페이지 1658

 
Alexey Volchanskiy :

질문에 관계없이 모든 함수를 호출하는 것은 스택에 있는 변수(이 경우 nType)에 액세스하는 것보다 항상 느립니다.

이러한 명백함에도 불구하고 문제는 함수의 인라인에 관한 것이었습니다. 저것들. OrderType() 컴파일 타임이 order.type과 같은 것으로 대체되지 않습니까?

개인적으로 두 번째 경우와 마찬가지로 항상 이러한 MQL 함수 호출 을 캐시합니다.

측정에서 알 수 있듯이 이것은 중복됩니다.

 
Sergei Vladimirov :

이러한 명백함에도 불구하고 문제는 함수의 인라인에 관한 것이었습니다. 저것들. OrderType() 컴파일 타임이 order.type과 같은 것으로 대체되지 않습니까?

측정에서 알 수 있듯이 이것은 불필요합니다.

arrays 의 내부 구현으로 판단하면 동일한 ArraySize가 인라인되어야 합니다. 늘 이렇게 써요 (측정 안해)

대신에

 for ( int i = 0 ; i < ArraySize (Array); i++)

하다

 const int Amount = ArraySize (Array);

for ( int i = 0 ; i < Amount; i++)
성능면에서 최근에 나는이 사실에 놀랐습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

열거 형을 순차적으로 반복하는 방법은 무엇입니까?

fxsaber , 2016.08.22 09:13

정적 배열에 추가되었습니다. 스위치보다 거의 3배 빠르게 작동하기 시작했습니다! 쓰레기통에서 그런 스위치 . 팁 고마워!
따라서 컴파일러 최적화에 의존하지 않고 항상 가장 작은 함수 호출을 통해 "도움"하고 가능한 논리적인 경우 const 및 static을 사용하는 것이 더 나은 것 같습니다.
 
Sergei Vladimirov :

이러한 명백함에도 불구하고 문제는 함수의 인라인에 관한 것이었습니다. 저것들. OrderType() 컴파일 타임이 order.type과 같은 것으로 대체되지 않습니까?

측정에서 알 수 있듯이 이것은 중복됩니다.

그들은 스스로 다음과 같이 썼습니다.

직접 확인했습니다. 두 번째 코드는 4배 더 빠르게 실행됩니다. 모든 것이 명확하고 질문이 제거됩니다.

 
Sergei Vladimirov :
직접 확인했습니다. 두 번째 코드는 4배 더 빠르게 실행됩니다. 모든 것이 명확하고 질문이 제거됩니다.
프로파일링/디버깅 모드 에서만 측정하지 마십시오. 인라인이 전혀 없습니다. 릴리스 변형만 있어야 합니다.
 
Inv Андрей Иващенко :

안녕하세요!

장교님, 어디서 벌레를 잡아야 하는지 말씀해 주시겠습니까?

다중 통화 고문. 첫 번째 거래 후 테스터는 중지됩니다.

내가 찾을 수없는 코드 오류가 발생합니다.

예, 테스터는 시작 날짜 2016.05.01부터 정상적으로 작동하고 있습니다. 이 날짜를 변경하면 테스터가 중지되고 오류가 발생하며 로그는 아래와 같습니다.

도와주세요, 제발!

나는 스스로 대답한다.

이것은 테스트 버그입니다. 지금은 EA가 작동하는 모든 기호에 대해 기술 표시기 의 핸들을 OnInit에 추가해야 합니다.

 
Alexey Volchanskiy :

그들은 스스로 다음과 같이 썼습니다.

직접 확인했습니다. 두 번째 코드는 4배 더 빠르게 실행됩니다. 모든 것이 명확하고 질문이 제거됩니다.

다음 댓글에서 숫자를 썼습니다. 단일 작업의 이득은 1나노초입니다. 2년의 기간과 수천 번의 실행을 통해 전략을 최적화할 때 1ns를 절약하는 것이 합리적일 수 있습니다. 그러나 실제 거래에서 ...
 
A100 :

빌드 1398에서 'EX5 loading failed' 오류가 남아 있었습니다(해당 예제와 관련이 없는 것 같습니다).

수정된 빌드 1400에서 유사한 경우의 오류가 이제 '순수 가상 함수 호출'로 재현됩니다. 노코멘트는 괜찮습니다

 //Script1.mq5
typedef void (*fn)();
#import "Script2.ex5"
         void g( fn );
#import
void h() /*export*/ {} //если export без комментария - нормально
void OnStart () { g( h ); }
 //Script2.mq5
#property library
typedef void (*fn)();
void g( fn f ) export { f(); }
 

모호성을 해결하기 위해 ::를 사용할 수 없음


#import "Script1.ex5"
         void g();
#import "Script2.ex5"
         void g();
#import
typedef void (*fn)();
void OnStart ()
{
        Script1::g(); //нормально
        Script2::g(); //нормально
        fn f = Script1::g; //Error
}
 
Inv Андрей Иващенко :

나는 스스로 대답한다.

이것은 테스트 버그입니다. 지금은 EA가 작동하는 모든 기호에 대해 기술 표시기 의 핸들을 OnInit에 추가해야 합니다.

게다가 새로운 막대의 첫 번째 틱만 받았을 때 문제가 발생하는 것 같은데, 테스터는 말 그대로 "막혀서" 또 1막이 뒤처진다. 즉 전문가는 막대가 없다고 생각한다. 아직 시각화에 실제로 나타나지 않고 몇 초 후에 막대가 나타납니다. M1 테스트의 경우 두 번째 눈금에 올바른 값이 표시됩니다(제가 올바르게 이해했다면), 개발자가 이 성가신 문제를 수정하기를 바랍니다. 한시라도 빨리...

덧셈:

이 순간을 피하기 위해 이제 새 막대의 첫 번째 눈금을 인위적으로 건너뛸 필요가 있습니다...

 
RTS-9.16 BCS-MetaTrader5에서 CTRL+F5를 사용하여 Expert Advisor를 디버깅하는 것은 불가능합니다. 테스터 쓰기
Tester  Leverage 1 : 1 set error