私たちのファンページに参加してください
- ビュー:
- 199
- 評価:
- パブリッシュ済み:
-
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
どのプログラマーも自分のロガーを持っている。私はPythonのロギング・モジュールにヒントを得て、MQL5用に自作した。
このクラスは最もシンプルだ。階層もローテーターもフォーマッターもない。シンプルでどんなプロジェクトにも便利です。
インストール
- CDKLogger.mqhをMQLIncludeフォルダにコピーする。
- CDKLoggerクラスをインポートする。
#include <DKStdLib\Logger\CDKLogger.mqh 使用法
CDKLogger logger; // MyLoggerName」名とINFOレベルでロガーを初期化する。 logger.Init("MyLoggerName", INFO); // デフォルトのロガーフォーマット「%name%:[%level%] %message%」を独自のものに変更することができます。 // 任意のパターンの組み合わせを使用 logger.Format = "%YYYY%-%MM%-%DD% %hh%:%mm%-%ss% - %name%:[%level%] %message%"; もし、サブスティンギングだけでメッセージをフィルタリングしたい場合は、 // STEP 2、 // FilterInListを埋める // 2.1.FilterIntListにsubstingsを追加する。 logger.FilterInList.Add("Including-Substring-#1"); logger.FilterInList.Add("Including-Substring-#2"); // 2.2.文字列を"; "区切りで分割し、すべての部分文字列を1行でFilterInListに追加する。 logger.FilterInFromStringWithSep("Including-Substring-#3;Including-Substring-#4", ";"); // STEP3.OUTメッセージを部分文字列でフィルタリングし、それ以外は残す、 // FilterOutListを埋める // 3.1.FilterOutListに部分文字列を追加する logger.FilterOutList.Add("Excluding-Substring-#1"); logger.FilterOutList.Add("Excluding-Substring-#2"); // 3.2.文字列を"; "区切りで分割し、すべての部分文字列を1行でFilterOutListに追加する。 logger.FilterOutFromStringWithSep("Excluding-Substring-#3;Excluding-Substring-#4", ";"); // フィルター・インを使用する。 // ロギング logger.Debug("Debug: Including-Substring-#1", false); // アラートなしのデバッグ logger.Info("Info: Including-Substring-#1", true); // アラートダイアログ付き情報 logger.Warn("Warn: Including-Substring-#1"); logger.Error("Error: Including-Substring-#1: Excluding-Substring-#1"); // FilterOutListのためスキップされる logger.Critical("Critical: Including-Substring-#1"); logger.Assert(true, "Log msg if true", INFO, // OKの場合 "Log msg if false", ERROR, // 失敗した場合 true); // アラートも表示 logger.Assert(true, "Same msg for true & false", INFO, // OKならログレベル ERROR, // 失敗した場合のログレベル false); // 警告なし
実行結果として以下のメッセージがログに出力されます:
未解決の問題
私はよくこの方法でクラスを使う:
logger.Debug(StringFormat("%s/%d: My message: PARAM1=%f", __FUNCTION__, __LINE__, my_param));
しかし、ここで問題が発生しました。StringFormat関数は、ロギング・レベルがメッセージを出力する必要がない場合でも、毎回文字列を解析します。
もしデバッグ・メッセージをたくさん出力する必要があるのなら、条件によって出力をラップする必要がある:
if(DEBUG >= logger.Level) logger.Debug(StringFormat("%s/%d: My message: PARAM1=%f", __FUNCTION__, __LINE__, my_param));
これを行う最善の方法はStringFormatを使用することですが、残念ながらMQL5は Debug、Info、Errorなどの関数に動的な数の関数パラメータを渡すことをサポートしていません。
このようなことができる方法があれば、ぜひ教えてください。
MetaQuotes Ltdによって英語から翻訳されました。
元のコード: https://www.mql5.com/en/code/52741
Ascending Sort A Struct Array By A Field Example
これは、構造体リストをフィールドで昇順にソートする例です。上記のアルゴリズムは、使用目的に応じて調べてカスタマイズすることができますが、これは最も基本的な例であり、構造体の配列内の配置を解決する方向でもあります。 この例で使用されているアルゴリズムは、クイックソートとマージソートです。
Bollinger Bands Crossover Signals
インジケータの説明 - ボリンジャーバンドクロスオーバーシグナル 名前:ボリンジャーバンドクロスオーバーシグナルバージョン:1.1著者:BENALI リンク: https://www.mql5.com/en/users/dahmi_benali
TimeServerDaylightSavings
サーバーのタイムゾーンとサマータイムモードを見積もり履歴から経験的に検出する時間関連機能
Custom crosshair cursor with synchronization
価格と(サーバー/ローカル)時間を表示するカスタム十字インジケーターを同期。
