無料でロボットをダウンロードする方法を見る
Twitter上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
ライブラリ

Simplest Logger class for MetaTrader 5 - MetaTrader 5のためのライブラリ

ビュー:
199
評価:
(5)
パブリッシュ済み:
\MQL5\Include\DKStdLib\Logger\ \MQL5\Scripts\
MQL5フリーランス このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

どのプログラマーも自分のロガーを持っている。私はPythonのロギング・モジュールにヒントを得て、MQL5用に自作した。

このクラスは最もシンプルだ。階層もローテーターもフォーマッターもない。シンプルでどんなプロジェクトにも便利です。

インストール

  1. CDKLogger.mqhをMQLIncludeフォルダにコピーする。
  2. 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 Ascending Sort A Struct Array By A Field Example

これは、構造体リストをフィールドで昇順にソートする例です。上記のアルゴリズムは、使用目的に応じて調べてカスタマイズすることができますが、これは最も基本的な例であり、構造体の配列内の配置を解決する方向でもあります。 この例で使用されているアルゴリズムは、クイックソートとマージソートです。

Bollinger Bands Crossover Signals Bollinger Bands Crossover Signals

インジケータの説明 - ボリンジャーバンドクロスオーバーシグナル 名前:ボリンジャーバンドクロスオーバーシグナルバージョン:1.1著者:BENALI リンク: https://www.mql5.com/en/users/dahmi_benali

TimeServerDaylightSavings TimeServerDaylightSavings

サーバーのタイムゾーンとサマータイムモードを見積もり履歴から経験的に検出する時間関連機能

Custom crosshair cursor with synchronization Custom crosshair cursor with synchronization

価格と(サーバー/ローカル)時間を表示するカスタム十字インジケーターを同期。