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) abort, file=lrp_last_7.mq5, line=299<br / translate="no">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テスターの機能なのですが、間接的にこのテーマと関係があるので、このスレッドで公開することにしました。 不可視の最適化タブを表示するには、最適化するパラメータがないフルブルートフォースを選択する必要があります。 おっと、この結果を得るにはどうすればいいのか悩んでいました )) 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 MT5では、MT4と異なり、EAの実行時や変更時にEAの入力パラメータを記録しません。そのため、Terminalで何が実行されていたかをログから知ることはできません。 本機能は、このような状況を改善することができます。 #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 SZZ 残念ながら、スクリプトには使えません。MT4自体はスクリプトの入力パラメータを表示しますが、MT5にはありません。 Artyom Trishkin 2019.09.15 17:41 #1406 このトピックに関係のないコメントは、「MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッション」に移動しました。 fxsaber 2019.09.18 20:33 #1407 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム MetaTrader 5 Strategy Tester: バグ、不具合、改善のための提案 fxsaber, 2019.09.18 22:32 最新のMT5 Testerの設定を取得する。 #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 ResourceSaveの 特徴 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 Testerで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千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
みんな、これはとても便利なものなんだ。
致命的な エラーが発生した場合に実行を中断し、デストラクタは呼び出されない(申し訳ないが、少なくともこの方法では)。標準的な類似品や例外がない場合、少なくとも何らかの代替品が必要。
ログメッセージを表示します。
MT5テスターの機能なのですが、間接的にこのテーマと関係があるので、このスレッドで公開することにしました。
不可視の最適化タブを表示するには、最適化するパラメータがないフルブルートフォースを選択する必要があります。
おっと、この結果を得るにはどうすればいいのか悩んでいました ))
関数ポインタのテンプレートは、リターンパラメータのオーバーロードという観点では機能しないのですか?
:
もしそうなら。
これがあるんです。
関数ポインタのテンプレートは、リターンパラメータのオーバーロードという観点では機能しないのですか?
C++で動くのか?このような質問のための特別なトピックが あります。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
ライブラリ: エキスパート
fxsaber, 2019.09.12 06:17
MT5では、MT4と異なり、EAの実行時や変更時にEAの入力パラメータを記録しません。そのため、Terminalで何が実行されていたかをログから知ることはできません。
本機能は、このような状況を改善することができます。
応用編
結果
SZZ 残念ながら、スクリプトには使えません。MT4自体はスクリプトの入力パラメータを表示しますが、MT5にはありません。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
MetaTrader 5 Strategy Tester: バグ、不具合、改善のための提案
fxsaber, 2019.09.18 22:32
最新のMT5 Testerの設定を取得する。
応用編
結果
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
スクリプト:バランスグラフHTML
fxsaber, 2019.09.19 09:56
テキストファイルからMQHへの変換。
ソースにテキストデータを挿入できるようにする
#include <..\Files\Graph.mqh>
アプリケーション