mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 141 1...134135136137138139140141142143144145146147148...247 새 코멘트 [삭제] 2019.08.19 11:24 #1401 얘들 아, 매우 필요한 것 : #define abort(ANY) do { printf ( "abort, file=%s, line=%i" , __FILE__ , __LINE__ ); Alert ( 1 /( uint ) MathAbs ( 0 ));} while ( false ) 치명적인 오류가 발생한 경우 실행을 중단하고 소멸자가 호출되지 않습니다(죄송하지만 최소한 그런 방식으로). 글쎄, 표준 아날로그 및 예외가없는 경우 최소한 몇 가지 대안. 로그 메시지: 2019.08.19 21:28:14.364 lrp_last_7(m_GBPCHF,M1) 중단, 파일=lrp_last_7.mq5, 줄=299 2019.08.19 21:28:14.364 lrp_last_7 (m_GBPCHF,M1) 'lrp_last_7.mq5' (299,2)에서 영분할 Konstantin 2019.08.19 12:07 #1402 fxsaber : MT5 테스터의 특징이지만, 주제와 간접적인 관련이 있기 때문에 이 스레드에 공개하기로 결정했습니다. 보이지 않는 최적화 탭으로 이동하려면 최적화된 매개변수가 없는 상태에서 전체 검색을 선택해야 합니다. ATP, 이 결과를 얻는 방법에 대해 모두 의아해함)) Vasiliy Sokolov 2019.09.10 09:44 #1403 함수 포인터의 템플릿이 반환 매개변수 오버로딩 측면에서 작동하지 않습니까? template < typename Out > typedef Out (*Func0)( void ); int Select( void ) { return 10 ; } void OnStart () { Func0< int > f = Select; } : '<' - unexpected token TestObj.mq5 24 9 '>' - name expected TestObj.mq5 24 13 그렇다면: void OnStart () { Func0 f = Select; } 우리는 이것을 가지고 있습니다: 'Select' - cannot resolve function address TestObj.mq5 15 14 'Select' - type mismatch TestObj.mq5 15 14 A100 2019.09.10 17:00 #1404 Vasiliy Sokolov : 함수 포인터의 템플릿이 반환 매개변수 오버로딩 측면에서 작동하지 않습니까? C++에서 작동합니까? 이와 같은 질문에 대한 전용 스레드 가 있습니다. fxsaber 2019.09.12 04:17 #1405 거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼 도서관: 전문가 fxsaber , 2019.09.12 06:17 MT4와 달리 MT5는 실행되거나 변경될 때 Expert Advisors의 입력 매개변수를 기록하지 않습니다. 따라서 로그에서 터미널에서 시작된 것이 무엇인지 확인하는 것은 불가능합니다. 유사한 기능이 이 상황을 수정할 수 있습니다. #include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003 // Выводит данные запущенного советника string EAToString( const long Chart_ID = 0 ) { string Names[]; MqlParam Params[]; const int Flag = EXPERT::Parameters(Chart_ID, Params, Names); const int Size = ArraySize (Names); string Str = "Expert " + Params[ 0 ].string_value + ", expertmode = " + ( string )Flag; for ( int i = 0 ; i < Size; i++) Str += "\n" + Names[i] + " = " + Params[i + 1 ].string_value; return (Str); } 애플리케이션 input int inInput1 = 1 ; input int inInput2 = 2 ; int OnInit () { Print (EAToString()); return ( INIT_FAILED ); } 결과 Test8 (EURUSD,M1) Expert Experts\Test8.ex5, expertmode = 4 Test8 (EURUSD,M1) inInput1 = 1 Test8 (EURUSD,M1) inInput2 = 2 ZY 불행히도 for 스크립트는 작동하지 않습니다. MT4 자체는 스크립트 입력 매개변수를 출력하지만 MT5는 출력하지 않습니다. Artyom Trishkin 2019.09.15 17:41 #1406 이 주제와 관련이 없는 댓글은 " MQL4 및 MQL5에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 "으로 이동되었습니다. fxsaber 2019.09.18 20:33 #1407 거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼 MetaTrader 5 전략 테스터: 오류, 버그, 개선 제안 fxsaber , 2019.09.18 22:32 최신 MT5 테스터 설정 가져오기. #include <WinAPI\fileapi.mqh> #include <WinAPI\handleapi.mqh> // Получает имя файла настроек последнего запуска MT5-Тестера. string GetTesterINIFileName( ulong &Size ) { string Str = NULL ; const string Path = :: TerminalInfoString ( TERMINAL_PATH )+ "\\MQL5\\Profiles\\Tester\\" ; FIND_DATAW FindData; const HANDLE handle = kernel32::FindFirstFileW(Path + "*.ini" , FindData); if (handle != INVALID_HANDLE ) { ulong MaxTime = 0 ; Size = 0 ; do { const ulong TempTime = (( ulong )FindData.ftLastWriteTime.dwHighDateTime << 32 ) + FindData.ftLastWriteTime.dwLowDateTime; if (TempTime > MaxTime) { MaxTime = TempTime; Str = :: ShortArrayToString (FindData.cFileName); Size = (( ulong )FindData.nFileSizeHigh << 32 ) + FindData.nFileSizeLow;; } } while (kernel32::FindNextFileW(handle, FindData)); kernel32::FindClose(handle); } return ((Str == NULL ) ? NULL : Path + Str); } #define GENERIC_READ 0x80000000 #define SHARE_READ 1 #define OPEN_EXISTING 3 // Получает настройки последнего запуска MT5-Тестера. string GetTesterINI( void ) { string Str = NULL ; ulong Size; const string FileName = GetTesterINIFileName(Size); if (FileName != NULL ) { const HANDLE handle = kernel32::CreateFileW(FileName, GENERIC_READ, SHARE_READ, 0 , OPEN_EXISTING, 0 , 0 ); if (handle != INVALID_HANDLE ) { uint Read; ushort Buffer[]; :: ArrayResize (Buffer, ( int )Size / sizeof ( ushort )); if (kernel32::ReadFile(handle, Buffer, ( int )Size, Read, 0 )) Str = :: ShortArrayToString (Buffer); kernel32::CloseHandle(handle); } } return (Str); } 애플리케이션 // Советник при запуске одиночного прогона возвращает свои настройки. input int inInput1 = 1 ; input int inInput2 = 2 ; int OnInit () { if ( MQLInfoInteger ( MQL_TESTER ) && ! MQLInfoInteger ( MQL_OPTIMIZATION )) Print (GetTesterINI()); return ( INIT_FAILED ); } 결과 2019.04 . 01 00 : 00 : 00 ;Одиночный тест советника: Test9, EURUSD M1, цены открытия, 2019.04 . 01 - 2019.09 . 18 2019.04 . 01 00 : 00 : 00 [Tester] 2019.04 . 01 00 : 00 : 00 Expert=Test9.ex5 2019.04 . 01 00 : 00 : 00 Symbol =EURUSD 2019.04 . 01 00 : 00 : 00 Period =M1 2019.04 . 01 00 : 00 : 00 Optimization= 0 2019.04 . 01 00 : 00 : 00 Model= 2 2019.04 . 01 00 : 00 : 00 FromDate= 2019.04 . 01 2019.04 . 01 00 : 00 : 00 ToDate= 2019.09 . 18 2019.04 . 01 00 : 00 : 00 ForwardMode= 0 2019.04 . 01 00 : 00 : 00 Deposit= 10000 2019.04 . 01 00 : 00 : 00 Currency=EUR 2019.04 . 01 00 : 00 : 00 ProfitInPips= 1 2019.04 . 01 00 : 00 : 00 Leverage= 100 2019.04 . 01 00 : 00 : 00 ExecutionMode= 0 2019.04 . 01 00 : 00 : 00 OptimizationCriterion= 6 2019.04 . 01 00 : 00 : 00 Visual= 0 2019.04 . 01 00 : 00 : 00 [TesterInputs] 2019.04 . 01 00 : 00 : 00 inInput1= 123 || 1 || 1 || 10 ||N 2019.04 . 01 00 : 00 : 00 inInput2= 2 || 2 || 1 || 20 ||N fxsaber 2019.09.19 08:06 #1408 거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼 스크립트: 균형 그래프 HTML fxsaber , 2019.09.19 09:56 텍스트 파일을 MQH로 변환하는 변환기. void ChangeString( string &Str ) { StringReplace (Str, "\\", "\\\\"); StringReplace (Str, "\"", "\\\""); Str = "\"" + Str + "\\r\\n\" + " + "\n"; return ; } bool TextFileToMQH( const string FileNameIn, const string FileNameOut ) { const int handleIn = FileOpen (FileNameIn, FILE_READ | FILE_TXT | FILE_ANSI ); bool Res = (handleIn != INVALID_HANDLE ); if (Res) { const int handleOut = FileOpen (FileNameOut, FILE_WRITE | FILE_TXT | FILE_ANSI ); if (Res = (handleOut != INVALID_HANDLE )) { FileWriteString (handleOut, " string StrMQH = \n"); while (! FileIsEnding (handleIn)) { string Str = FileReadString (handleIn); ChangeString(Str); FileWriteString (handleOut, Str); } FileWriteString (handleOut, " NULL ;\n"); FileClose (handleOut); } FileClose (handleIn); } return (Res); } void OnStart () { TextFileToMQH("Graph.txt", "Graph.mqh"); } 소스에 텍스트 데이터를 삽입할 수 있습니다. #include <..\Files\Graph.mqh> fxsaber 2019.09.27 05:56 #1409 리소스 저장 기능 const string ResourceNameFull = ObjectGetString ( 0 , Name, OBJPROP_BMPFILE ); ResourceSave (ResourceNameFull, "test.bmp" ); // false const string ResourceNameShort = StringSubstr (ResourceNameFull, StringFind (ResourceNameFull, "::" )); ResourceSave (ResourceNameShort, "test.bmp" ); // true fxsaber 2019.09.27 07:34 #1410 ResourceSave 는 테스터에서 작동하지 않습니다. 아래 대안. // Сохраняет ресурс в BMP-формате. bool ResourceSaveBMP( const string ResourceName, const string FileName ) { struct BMPFILEHEADER { short Type; uint Size; short Reserved1; short Reserved2; uint OffBits; }; struct BMPINFOHEADER { uint Size; uint Width; uint Height; short Planes; short BitCount; int Compression; uint SizeImage; int XPelsPerMeter; int YPelsPerMeter; int ClrUsed; int ClrImportant; void Set( void ) { this .Size = sizeof ( this ); this .Planes = 1 ; this .BitCount = 32 ; this .SizeImage = this .Width * this .Height * ( this .BitCount >> 3 ); return ; } }; struct BMPHEADER { BMPFILEHEADER File; BMPINFOHEADER Info; void Set( void ) { this .Info.Set(); this .File.Type = 19778 ; this .File.OffBits = sizeof ( this ); this .File.Size = this .Info.SizeImage + this .File.OffBits; return ; } } BMPHeader = { 0 }; uint Data[]; bool Res = ResourceReadImage (ResourceName, Data, BMPHeader.Info.Width, BMPHeader.Info.Height); if (Res) { const int handle = FileOpen (FileName, FILE_WRITE | FILE_BIN ); if (Res = (handle != INVALID_HANDLE )) { BMPHeader.Set(); uint Picture[]; const uint Size = ArrayResize (Picture, ArraySize (Data)); for ( uint i = 0 ; i < Size; i += BMPHeader.Info.Width) ArrayCopy (Picture, Data, i, Size - i - BMPHeader.Info.Width, BMPHeader.Info.Width); FileWriteStruct (handle, BMPHeader); FileWriteArray (handle, Picture); FileClose (handle); } } return (Res); } 애플리케이션 ResourceSave (ResourceName, "test.bmp" ); ResourceSaveBMP(ResourceName, "test2.bmp" ); 1...134135136137138139140141142143144145146147148...247 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
얘들 아, 매우 필요한 것 :
치명적인 오류가 발생한 경우 실행을 중단하고 소멸자가 호출되지 않습니다(죄송하지만 최소한 그런 방식으로). 글쎄, 표준 아날로그 및 예외가없는 경우 최소한 몇 가지 대안.
로그 메시지:
2019.08.19 21:28:14.364 lrp_last_7 (m_GBPCHF,M1) 'lrp_last_7.mq5' (299,2)에서 영분할
MT5 테스터의 특징이지만, 주제와 간접적인 관련이 있기 때문에 이 스레드에 공개하기로 결정했습니다.
보이지 않는 최적화 탭으로 이동하려면 최적화된 매개변수가 없는 상태에서 전체 검색을 선택해야 합니다.
ATP, 이 결과를 얻는 방법에 대해 모두 의아해함))
함수 포인터의 템플릿이 반환 매개변수 오버로딩 측면에서 작동하지 않습니까?
:
그렇다면:
우리는 이것을 가지고 있습니다:
함수 포인터의 템플릿이 반환 매개변수 오버로딩 측면에서 작동하지 않습니까?
C++에서 작동합니까? 이와 같은 질문에 대한 전용 스레드 가 있습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
도서관: 전문가
fxsaber , 2019.09.12 06:17
MT4와 달리 MT5는 실행되거나 변경될 때 Expert Advisors의 입력 매개변수를 기록하지 않습니다. 따라서 로그에서 터미널에서 시작된 것이 무엇인지 확인하는 것은 불가능합니다.
유사한 기능이 이 상황을 수정할 수 있습니다.
애플리케이션
결과
ZY 불행히도 for 스크립트는 작동하지 않습니다. MT4 자체는 스크립트 입력 매개변수를 출력하지만 MT5는 출력하지 않습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
MetaTrader 5 전략 테스터: 오류, 버그, 개선 제안
fxsaber , 2019.09.18 22:32
최신 MT5 테스터 설정 가져오기.
애플리케이션
결과
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
스크립트: 균형 그래프 HTML
fxsaber , 2019.09.19 09:56
텍스트 파일을 MQH로 변환하는 변환기.
소스에 텍스트 데이터를 삽입할 수 있습니다.
#include <..\Files\Graph.mqh>
애플리케이션