Comment関数を追記可能にする方法。

EAやインジケータの開発時の原始的なデバッグ方法として、MT4 では Print または Comment で、変数の値に何が入っているのかを表示させる手法があります。(こういう手法を 俗に Printデバッグ と呼びます。)


Print は、ログファイルにも残るので、気合をいれてデバッグする時は不可欠なのですが、小規模なEAやインジケータの作成では、 Comment だけでも十分だったりします。 Comment の方が画面内でリアルタイムに確認できる利点もあります。


ところが、Comment は、プログラム内で最後に実行した内容のみが表示されるので、ソースコードのこの部分で Comment して、あの部分で Comment して…という柔軟な使い方ができずに不便に感じている人もいらっしゃる...と思います。そこで、今日は、もう少し Comment を扱いやすくする方法を紹介します。


具体的なやり方は、まず、以下のような CommentEX という関数を定義します。

void CommentEX(string msg = "")
{
   static string msgall = "";
   if(msg ==""){
      msgall= "";
   }else{
      msgall = msgall + msg +"\n";
   }
   Comment(msgall);
   Print(msg);
}

次に、従来 Comment で書いていた部分を CommentEX を使うようにします。

Comment(a,b,c);

CommentEX(a+b+c);

Comment()関数は、引数を複数とれますが、CommentEX()関数は、引数を1つしか取れないので、文字列を足し合わせるか、StringConcatenate で結合させてください。CommentEX()関数は、プログラム内の複数の場所で使えるので、試してもらえばメリットが実感できると思います。


実際に CommentEX()関数を利用したサンプル画面が下図で、

22:12 に EA stopped... コメントを追加後、さらに、22:15 に EA started... コメントが追記されています。
一昨日の記事に書いたとおり、Comment は文字数制限を気にしなくて良さそうなので、この調子で延々と記録することができます。


プログラム内からコメントをクリアしたい時は、引数なしで、 CommentEX(); を呼べばOKです。
実用的に CommentEX()関数 を使いたい場合は、CommentEX() 内をもう少し工夫して、例えば、20回実行されたら(=20行書かれたら) msgall をクリアするなどの改造が必要ですが、その辺りはプログラマな人たちの自由な発想に任せたいと思います..。