MT4에서 MT5로 옮기는 문제. 또는 더 정확하게는 MT5에서 일부 알고리즘의 오류 없는 실행이 불가능합니다. - 페이지 10 1...3456789101112 새 코멘트 Igor Makanu 2019.07.31 13:05 #91 Vict : 이상하지만 전에는 할 생각이 없었습니다. 메모리 할당 과 같은 많은 오류 검사를 제거합니다. 옵션이 아닌 경우 어드바이저가 차트에서 제거되지만 프로그램의 아무 곳에서나 다음 틱 전에 "OS로 나가기"만 하면 됩니다. 대부분의 경우 현재 틱의 데이터 액세스 불가능성과 관련된 기능을 안전하게 호출해야 하는 곳이 "공백"이 되도록 매크로의 모든 것을 우아하게 래핑할 수 있습니다. void OnStart () { for ( int i= 0 ;i< 10 ;i++) { double o=Open(i); if (o> 0.0 ) printf ( "%d : %f" ,i,o); else { printf ( "Error № %d " ,( int )o); return ; } } } //+------------------------------------------------------------------+ double Open( int shift) { ResetLastError (); double result= iOpen ( NULL , 0 ,shift); int err= GetLastError (); if (err> 0 ) result=-err; return (result); } //+------------------------------------------------------------------+ 코드의 가독성을 위해 다음과 같이 작성하고 싶습니다. void OnStart () { for ( int i= 0 ;i< 10 ;i++) { double o=Try( Open(i), "Текст сообщения" ); printf ( "%d : %f" ,i,o); } } 이 시도는 실제로 실패할 경우 "OS를 종료"하고 래핑하는 매크로에 있습니까? [삭제] 2019.07.31 13:41 #92 Igor Makanu : 이 시도는 실제로 실패할 경우 "OS를 종료"하고 래핑하는 매크로에 있습니까? #define Try(VAR, EXPR, MES) \ VAR = EXPR; \ if (VAR <= 0.0 ) { \ printf ( "Error: %s " , MES); \ return ; \ } double o; Try(o, Open(i), "something goes wrong" ); 아니다? 나는 종종 함수의 시작 부분에 모든 종류의 미니 매크로를 작성하고 마지막에는 정의를 취소합니다. 물론 동작이 자주 반복되면 의미가 없습니다. #define MYERR_HANDLER(INDEX) \ { \ Alert ( __FILE__ , " " , __LINE__ , "-" , INDEX, ": error" ); \ this .state = obst_error; \ return obev_no_event; \ } 그리고 낙태에 관해서는 당신이 헛된 것이므로 약간의 실수는 있지만 완벽합니다. Igor Makanu 2019.07.31 13:46 #93 Vict : 아니다? 예! 그러나 이상적으로는 대신 다음을 원합니다. double o; Try(o, Open(i), "something goes wrong" ); 그래서: double o = Try(Open(i), "something goes wrong" ); Open() 함수의 서명을 변경해야 하는 경우 질문이 아닙니다... 하지만 이 형식으로 내가 정말 원하는 것을 얻을 수 있습니다! ;) ---------------------- 추신: 옵션으로, 전역적으로 선언된변수 Tryerror 또는 bool Tryresult도 적합합니다. 이 호출이 오류로 종료되면 OnTick() 본문을 종료하는 한 줄의 "안전한 호출"이 목표입니다. [삭제] 2019.07.31 13:52 #94 Igor Makanu : 그래서: 나는 이것이 프로에서도 가능한지 의심스럽습니다(예외를 던질 수 있지만 반환은 불가능합니다). 그러나 모든 일이 일어날 수 있습니다. 아마도 누군가가 놀랄 것입니다 ... [삭제] 2019.07.31 14:26 #95 글쎄, 즉석 : Try( double , o, Open(i), "something goes wrong" ); 아마도 이것이이 상황에서 최대입니다. [삭제] 2019.07.31 14:47 #96 난 바보야, 어쩌면 double Try_helper; #define Try(EXPR, MES) \ Try_helper = EXPR; \ if (Try_helper <= 0.0 ) { \ printf ( "Error: %s " , MES); \ return ; \ } double o = Try(Open(i), "something goes wrong" ); 컴파일되지 않았지만 작동해야 합니다. Igor Makanu 2019.07.31 15:01 #97 Vict : 난 완전히 멍청해, 어쩌면 컴파일되지 않았지만 작동해야 합니다. 사탄은 기계다!!! 획득!!! 테스트 및 시뮬레이션된 오류( shift>5 ) double Try_helper; #define Try(EXPR, MES) \ Try_helper = EXPR; \ if (Try_helper <= 0.0 ) { \ printf ( "Error: %s " , MES); \ return ; \ } void OnStart () { for ( int i= 0 ;i< 10 ;i++) { double o = Try(Open(i), "something goes wrong" ); printf ( "%d : %f" ,i,o); } } //+------------------------------------------------------------------+ double Open( int shift) { ResetLastError (); double result= iOpen ( NULL , 0 ,shift); int err= GetLastError ()> 0 ; if (err> 0 ) result=-err; if (shift> 5 ) result = - 999 ; return (result); } //+------------------------------------------------------------------+ 2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 0 : 1.115010 2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 1 : 1.114670 2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 2 : 1.114590 2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 3 : 1.114400 2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 4 : 1.115240 2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 5 : 1.115450 2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 오류: 문제가 발생했습니다. 시원한! 매크로 코드는 정말 간단했습니다. 감사하다! 당신은 확실히 마술사입니다! ;) [삭제] 2019.07.31 16:24 #98 건강하게 이용하시기 바랍니다. 위의 매크로에는 한 가지 단점이 있습니다. 도우미의 유형이 하드코딩되어 있고, 문자열을 반환하는 함수를 전달한 다음 두 개의 매크로를 만들지 않고 Try를 두 배로 늘릴 수 없습니다. 나는 스포츠에 관심이 있었습니다. 이 문제를 해결하는 방법(모든 유형에 대해 하나의 매크로 작성. 옵션이 없는 µl에서, C ++에서, 비록 거기에서 실제로 필요하지는 않지만 여전히)? 아무도 자신의 버전을 제공하고 싶어하지 않습니까? Igor Makanu 2019.07.31 16:56 #99 Vict : 건강하게 이용하시기 바랍니다. 위의 매크로에는 한 가지 단점이 있습니다. 도우미 유형이 고정되어 있으므로 문자열을 반환하는 함수를 Try에 전달할 수 없습니다. 왜 안 돼? 아무도 + 기호를 취소하지 않았습니다! 이제 매크로를 사용할 계획이므로 다음과 같이 빗질했습니다. int _GetLastError; double _Try_helper; string _Try_FUNCSIG; #define Try(FUNC,MSG, EXCEPT) _Try_helper=FUNC; if (_GetLastError> 0 ){ printf ( "%s : error № %d %s " ,_Try_FUNCSIG,_GetLastError,MSG);EXCEPT;} //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart () { for ( int i= 0 ;i< 10 ;i++) { double o = Try(Open(i), "something goes wrong" +Txt(), return ); printf ( "%d : %f" ,i,o); } } //+------------------------------------------------------------------+ double Open( int shift) { _Try_FUNCSIG= __FUNCSIG__ ; ResetLastError (); double result= iOpen ( NULL , 0 ,shift); _GetLastError= GetLastError (); if (shift> 5 )_GetLastError= 999 ; return (result); } //+------------------------------------------------------------------+ string Txt() { return ( " Txt " ); 이제 EXCEPT 매크로 매개변수는 예외 조치이며 리턴과 마찬가지로 잘 작동합니다. - 로그에 인쇄하기로 결정했지만 OnTick() 본문을 떠나지 않은 경우 2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 0 : 1.113350 2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 1 : 1.114180 2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 2 : 1.115110 2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 3 : 1.115010 2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 4 : 1.114670 2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 5 : 1.114590 2019.07.31 19:01:28.353 tst1 (EURUSD,H1) double Open(int) : 오류 번호 999 뭔가 잘못되었습니다 Txt The problem of transferring C-Trader (Watch out Freedom 오류, 버그, 질문 [삭제] 2019.07.31 17:37 #100 Igor Makanu : 글쎄, 나는 이것을 다음과 같이 사용하려고 한다. string f( int ) { return "hello world" ;} double f( double ) { return 35 ;} int main() { double d = Try(f( 0 .), "double error" ); string s = Try(f( 0 ), "stirng error" ); cout << s << "-" << d << endl; // hello world-35 return 0 ; } 여기 사람들이 도박을 하지 않는 것. 그래도 template < typename T> T Try_helper; #define Try(EXPR, MES) \ Try_helper<decltype(EXPR)> = EXPR; \ if (Try_helper<decltype(EXPR)> == decltype(EXPR){}) {\ printf ( "%s\n" , MES); \ return 1 ; \ } 1...3456789101112 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
이상하지만 전에는 할 생각이 없었습니다.
메모리 할당 과 같은 많은 오류 검사를 제거합니다.
옵션이 아닌 경우 어드바이저가 차트에서 제거되지만 프로그램의 아무 곳에서나 다음 틱 전에 "OS로 나가기"만 하면 됩니다.
대부분의 경우 현재 틱의 데이터 액세스 불가능성과 관련된 기능을 안전하게 호출해야 하는 곳이 "공백"이 되도록 매크로의 모든 것을 우아하게 래핑할 수 있습니다.
코드의 가독성을 위해 다음과 같이 작성하고 싶습니다.
이 시도는 실제로 실패할 경우 "OS를 종료"하고 래핑하는 매크로에 있습니까?
이 시도는 실제로 실패할 경우 "OS를 종료"하고 래핑하는 매크로에 있습니까?
아니다?
나는 종종 함수의 시작 부분에 모든 종류의 미니 매크로를 작성하고 마지막에는 정의를 취소합니다. 물론 동작이 자주 반복되면 의미가 없습니다.
그리고 낙태에 관해서는 당신이 헛된 것이므로 약간의 실수는 있지만 완벽합니다.
아니다?
예!
그러나 이상적으로는 대신 다음을 원합니다.
그래서:
Open() 함수의 서명을 변경해야 하는 경우 질문이 아닙니다... 하지만 이 형식으로 내가 정말 원하는 것을 얻을 수 있습니다! ;)
----------------------
추신: 옵션으로, 전역적으로 선언된변수 Tryerror 또는 bool Tryresult도 적합합니다. 이 호출이 오류로 종료되면 OnTick() 본문을 종료하는 한 줄의 "안전한 호출"이 목표입니다.
그래서:
나는 이것이 프로에서도 가능한지 의심스럽습니다(예외를 던질 수 있지만 반환은 불가능합니다). 그러나 모든 일이 일어날 수 있습니다. 아마도 누군가가 놀랄 것입니다 ...
글쎄, 즉석 :
아마도 이것이이 상황에서 최대입니다.
난 바보야, 어쩌면
컴파일되지 않았지만 작동해야 합니다.
난 완전히 멍청해, 어쩌면
컴파일되지 않았지만 작동해야 합니다.
사탄은 기계다!!! 획득!!!
테스트 및 시뮬레이션된 오류( shift>5 )
2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 0 : 1.115010
2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 1 : 1.114670
2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 2 : 1.114590
2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 3 : 1.114400
2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 4 : 1.115240
2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 5 : 1.115450
2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 오류: 문제가 발생했습니다.
시원한! 매크로 코드는 정말 간단했습니다.
감사하다! 당신은 확실히 마술사입니다! ;)
건강하게 이용하시기 바랍니다.
위의 매크로에는 한 가지 단점이 있습니다. 도우미의 유형이 하드코딩되어 있고, 문자열을 반환하는 함수를 전달한 다음 두 개의 매크로를 만들지 않고 Try를 두 배로 늘릴 수 없습니다. 나는 스포츠에 관심이 있었습니다. 이 문제를 해결하는 방법(모든 유형에 대해 하나의 매크로 작성. 옵션이 없는 µl에서, C ++에서, 비록 거기에서 실제로 필요하지는 않지만 여전히)? 아무도 자신의 버전을 제공하고 싶어하지 않습니까?
건강하게 이용하시기 바랍니다.
위의 매크로에는 한 가지 단점이 있습니다. 도우미 유형이 고정되어 있으므로 문자열을 반환하는 함수를 Try에 전달할 수 없습니다.
왜 안 돼? 아무도 + 기호를 취소하지 않았습니다!
이제 매크로를 사용할 계획이므로 다음과 같이 빗질했습니다.
이제 EXCEPT 매크로 매개변수는 예외 조치이며 리턴과 마찬가지로 잘 작동합니다. - 로그에 인쇄하기로 결정했지만 OnTick() 본문을 떠나지 않은 경우
2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 0 : 1.113350
2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 1 : 1.114180
2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 2 : 1.115110
2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 3 : 1.115010
2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 4 : 1.114670
2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 5 : 1.114590
2019.07.31 19:01:28.353 tst1 (EURUSD,H1) double Open(int) : 오류 번호 999 뭔가 잘못되었습니다 Txt
글쎄, 나는 이것을 다음과 같이 사용하려고 한다.
여기 사람들이 도박을 하지 않는 것. 그래도