English Русский 中文 Español Deutsch Português
HTMLとCSSを使用した代替ログ・ファイル

HTMLとCSSを使用した代替ログ・ファイル

MetaTrader 4 | 16 2月 2016, 14:36
687 0
Antoniuk Oleg
Antoniuk Oleg


なぜそれを使うのか?問題はどこにあるのか?

どんな Expert Advisor にも、その機能、現状、不測の事態、その他イベントに関するデータアウトプットを行う機能が備わっています。Expert Advisor によって生成されるデータを使用し、 Meta Trader を起動しなくても検出された全イベントの年表をトレースすることができます。必要な日を簡単に見つけ情報を検索することができます。ただ、問題は EA が大量のメッセージを生成することができ、そのメッセージは の開発者でさえ簡単に整理することができないのです。EA の作成について認識のないユーザーはなおさらです。典型的なログファイルを開くと、何百行、何千行で表示される自均質な情報を数多く見ることになります。



ここで、想像してください。ログファイルが次のように整理されているとしたら、作業はどれほど楽になるだろう、と。:エラーおよび不測の状況は赤の大きいサイズのフォントでマークされる。警告は小さいフォントのピンク、サービス情報は明るい緑、トレーディングトランザクションはブルー、などです。すなわち、ログファイルを見ると、何が起こったか、そして EA が読まなくても、詳細を見なくても何が言いたいか簡単に理解できるのです。みなさんは数十行をすらすらと見ていて、赤やピンクの行は目につきせん。それはエラーや警告がなく、すべて正常であるということです。数秒間ブルーのメッセージに目を通して、注文が問題なく出されていることを確認します。ただの夢でしょうか?いいえ。われわれはこの仕組みを実現するライブラリを書こうとしているのです。



本稿では、html ファイル作成のためのシンプルでありながらひじょうに力強いライブラリを書く手順を説明し、その表示の調整を学習し、Expert Advisor やスクリプトでいかに簡単に実装し利用できるか見ていきます。

使われるものは何でしょうか?

ファイル作成にはハイパーテキストマークアップ言語(HTML)を、お好みに合わせて外観を調整するにはカスケーディングスタイルシート(CSS)を使用します。HTML とは?これはウェブページを記述する言語です。そのおかげで今このテキストを読むことができているのです。HTML コードの学習はしません。私のいうことを信じて、物事をあるがまま受け取ってください。Internet Explorer、Opera、またはなにか他のブラウザを使ってログを見ます。どれもたいした違いはありません。



generateHTML ライブラリの作成

ここで MetaEditor を起動し、手順をスタートします。新しいライブラリを作成し、以下のコードを挿入します。

//+------------------------------------------------------------------+
//|                                                 generateHTML.mq4 |
//|                                               banderassa@ukr.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Antonio Banderass. All rights reserved" 
#property link      "banderassa@ukr.net"
#property library
//---- 
int htmlFileHandle=-1;
//+------------------------------------------------------------------+
//| CreateHtmlFile                                                   |
//+------------------------------------------------------------------+
int CreateHtmlFile(string fileName, string title, string style = 
                   "styles/default.css")
  {
   int handle = FileOpen(fileName, FILE_CSV|FILE_WRITE, " ");
   if(handle > 0)
     {
       htmlFileHandle = handle;
       FileWrite(handle,
                "<html><head><title>", title,
                "</title><link rel=stylesheet href=", style, " type=text/css>",
                "</head><body id=body><div align-center><h3 id=title>", title,
                "</h3></div><hr noshade id=hr>");   
     }
   else
       Print("generateHTML library: error while creating html file");
   return (handle);
  }
//+------------------------------------------------------------------+
//| CloseHtmlFile                                                    |
//+------------------------------------------------------------------+
void CloseHtmlFile()
  {
   if(htmlFileHandle > 0)
     {
       FileWrite(htmlFileHandle, "</body></html>");
       FileClose(htmlFileHandle);   
     }
  }
//+------------------------------------------------------------------+
//| WriteMsg                                                         |
//+------------------------------------------------------------------+
void WriteMsg(string text, string style = "text")
  {
   FileWrite(htmlFileHandle, "<font id=", style, ">", text, "</font>");
  }
//+------------------------------------------------------------------+
//| WriteMsgLn                                                       |
//+------------------------------------------------------------------+
void WriteMsgLn(string text, string style = "text")
  {
   FileWrite(htmlFileHandle, "<font id=", style, ">", text, "</font><br>");
  }
//+------------------------------------------------------------------+
//| WriteMsgTime                                                     |
//+------------------------------------------------------------------+
void WriteMsgTime(string text, string style = "text")
  {
   FileWrite(htmlFileHandle, "<font id=", style, ">" + TimeToStr(CurTime()) + 
             ": ", text, "</font>");
  }
//+------------------------------------------------------------------+
//| WriteMsgTimeLn                                                   |
//+------------------------------------------------------------------+
void WriteMsgTimeLn(string text, string style = "text")
  {
   FileWrite(htmlFileHandle, "<font id=", style, ">" + TimeToStr(CurTime()) + 
             ": ", text, "</font><br>");
  }
//+------------------------------------------------------------------+

このファイルに "generateHTML.mq4" と名付け "libraries" フォルダに保存します。ライブラリは mql4 言語の埋め込み関数しか使用しませんから、何も追加する必要はありません。F5 を押します。ライブラリは単純にテキストファイルを作成し、関数 FileOpen()、ileClose() 、FileWrite() を使ってそれに HTML コードを書き込みます。 タグをそれぞれ説明する意味はありません。私の言葉をただ信じてください。

動作準備

通常作業用に、ライブラリを構成します。"...MetaTrader/experts/files" に行き、フォルダ "logs" を作成し、それを開いてもう一つフォルダ "styles" を作成します。そして最後のフォルダに行き、そこにファイル "default.css" を作成し、以下のテキストを挿入します。

#body
  { 
   background-color: dimgray;
  }
 
#title
  {
   font-size:200%;
   color: greenyellow;
  }
 
#text
  {
   font-size: 150%;
   color: greenyellow;
  }
 
#error
  {
   font-size: 180%;
   color: orangered;
  }
 
#warning
  {
   font-size: 120%;
   color: gold;
  }

これはのちに詳細をお話しします。今のところはファイルをほぞんしパッドを閉じます。ライブラリの準備ができました。どんな機能があるのか見てみましょう。

最初の Html ファイル作成

空のテキストスクリプトを作成します。ソースの冒頭に "#include" 命令を使ってライブラリを追加します。

#include "..\libraries\generateHTML.mq4"

それから、start() 関数にコードをいくつか入れます。

CreateHtmlFile("logs\log1.html","testing library generateHTML "+TimeToStr(CurTime()));

この関数は "logs" フォルダに "log1.html" の名前で html ファイルを作成します。2番目のパラメータはファイルの最初に入れられる見出しです。最後のパラメータについてはのちほど述べます。現段階ではデフォルト値が使用されるため不在です。

これでメッセージの出力のための準備が整いました。ではスタートです。


WriteMsgLn("WriteMsgLn(). Test message");

この関数は簡単なテキストメッセージを表示します。ごらんのとおり、すべてはひじょうに簡単です。唯一のパラメータははメッセージのテキストです。シンプル化によって生じる制限があります。:同時に複数ファイルを開いて作業することはできません。このささいな問題の解決法はすぐにお話します。次のメッセージは新しい行に表示されます。関数名が何を行う関数なのか教えてくれています。: Ln は新しい行を意味する Line New から採られています。先に進みます。

WriteMsgLn("WriteMsgLn(). Test message");

ちょうど2番目のパラメータを定義したところです。それによると、このメッセージは『警告』スタイルで表示する必要があるということです。それは、テキストはピンクで一般のテキストより大きめということです。これら表示のパラメータは "default.css" ファイルに設定されます。そのことはのちほど説明します。デフォルトでは『テキスト』スタイルを設定しました。たとえば、以下の2つの呼び出しは同じです。

WriteMsgLn("WriteMsgLn(). Message");
WriteMsgLn("WriteMsgLn(). Message","text");

われわれは異なるスタイルを検証しています。

WriteMsgLn("WriteMsgLn(). Error message","error");

実際は同じですが、『エラー』スタイルです。テキストは赤で前のテキストより大きくなります。ここで、同時にメッセージと時刻を表示する関数の説明をします。

WriteMsgTimeLn("WriteMsgTimeLn(). Message with time");

メッセージに加えて現在時刻も表示されます。それは行の冒頭に入れられます。前を同じ方法でメッセージスタイルも定義可能です。

WriteMsgTimeLn("WriteMsgTimeLn(). Warning message with time","warning");
WriteMsgTimeLn("WriteMsgTimeLn(). Error message with time","error");

1行に数件のメッセージを表示したい場合は、関数 WriteMsg() および WriteMsgTime() を使います。それおらは前のものと同じですが、1行に複数メッセージを表示します。

WriteMsg("WriteMsg(). Text");
WriteMsgTime("WriteMsgTime(). Text with time");
WriteMsg("WriteMsg(). Warning","warning");
WriteMsgTime("WriteMsgTime(). Error","error");

メッセージがすべて表示されたら、 HTML ファイルを閉じます。

CloseHtmlFile();

ここでスクリプト "html-file creation" をコンパイルし、Meta Trader でそれを実行します。ログフォルダ "...MetaTrader\experts\files\logs\ " に行き、お使いのブラウザを使って新しいログを開きます。見てのとおり、このデータ表示方法は船名で理解しやすいものです。みなさんの検証がわたしのと異なる場合、問題が出るかもしれません。CSS を使って色やフォントサイズの調整方法を見ましょう。


ビューの調整

ごらんのようにすべて簡単です。ライブラリのの使用法を学習したら、お好みの方法でログの表示調整を行います。"...MetaTrader/experts/files/logs/styles" フォルダに行きます。そこで単一のファイルを開きます。そこには表示の設定-CSS、があります。1行目を見ます。

#body

それはスタイル名で、その表示を調整します。記号 # が最初に来て、それから名前が来ます。この場合はドキュメントの本文です。このスタイルはどのCSS ファイルでも追加します。

{ 
    background-color: dimgray;
}

ここでフォントの色を設定します。次のような方法で、波括弧の中にパラメータとその値を書きます。


パラメータ名:その値


この場合、パラメータ名-背景色(ログファイルの色)、値-くすんだグレー、となりっています。さらに

#title
  {
    font - size:200%;
    color: greenyellow;
  }

このスタイルはファイル冒頭にある見出しに割り当てられます。フォントサイズと色を設定しました。1番目のパラメータはパーセント表示です。さらに

#text
{
   font-size: 150%;
   color: greenyellow;
}
 
#error
{
   font-size: 180%;
   color: orangered;
}
 
#warning
{
   font-size: 120%;
   color: gold;
}

これらは共通テキストに対応する馴染みのすたいる、エラーと警告です。またその他のパラめ0た『背景色』を設定することも可能です。テキストの背景色を設定します。独自のスタイルを作り、それを使うには、ファイル内にそれを書き、保存します。たとえば以下のように、です。

#order
{
   font-size: 160%;
   color: Dodgerblue;
}
このスタイルを使用するには、メッセージ出力中の引尾数としてそれを設定します。
WriteMsgTimeLn("WriteMsgTimeLn(). Order message with time","order");
これで新しいスタイルを作成し、使用することができます。

以下のリンクを利用して、色の表を見ることができます。私はみなさんが全員私の色スキームをお好きだとは思いません。

http://www.computerhope.com/htmcolor.htm
http://www.immigration-usa.com/html_colors.html
http://html-color-codes.com/
https://it.utexas.edu/

16ビット・ビュー(例:C34A2C)のテーブルから色を使うためには、その前に記号を使用する必要があります。たとえば、次のようにです。

#body
{
   background-color: #C34A2C;
}

独自のスタイルファイル作成

スタイルの新しいファイル作成には、"default.css" ファイルを開き、それを修正して新しい名前で保存します。ファイル作成中に、使用したいスタイルファイルへのパスを指定する最後のパラメータを定義します。たとえば以下です。

CreateHtmlFile("logs\log1.html","testing library generateHTML","logs\styles\myStyle.css ");

複数ログファイルの同時作成および使用

ライブラリで作業をしおている間、使うファイルを選択することは決してなく、そのため作業は簡単になるのです。ただある疑問が浮かびます。:メッセージを同時に複数のログに書くにはどうすればよいのだろうか?すべてひじょうにシンプルです。ファイルを作成する関数は "int" これはファイルの識別子です。また、われわれにはグローバル変数 "int htmlFileHandle" があります。これはそのときファイルが何に使われているか表示します。必要なことは、ログファイルすべての識別子を思い出し、必要なときにそれらの値を "htmlFileHandle" 変数に割り当てることだけです。

お話ししたいことは以上です。これでデータのシンプルな作成方法と効果的表示方法を習得しました。多くのトレーダーの方々の役に立ち、みなさんの作業が簡単になることを願っております。


MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/1432

添付されたファイル |
generateHTML.mq4 (3.2 KB)
Linux デスクトップでの MetaTrader 4 クライアントターミナル実行 Linux デスクトップでの MetaTrader 4 クライアントターミナル実行
MetaTrader 4 クライアントターミナルをそこで実行するために非エミュレータワインを用いた段階的な Linux デスクトップ設定の説明
MetaTrader 4クライアントターミナルの秘密:MetaEditorのファイルライブラリ MetaTrader 4クライアントターミナルの秘密:MetaEditorのファイルライブラリ
カスタムプログラムを作成する際、コードエディターはとても重要です。より多くの機能がエディターで使用することができれば、より早く、より便利にプログラムを作成することができます。たくさんのプログラムが既存のコードを基盤に作成されています。あなたの目的にそぐわないインジケーターやスクリプトを使用しますか?ウェブサイトからこのプログラムのコードをダウンロードし、ご自身でカスタマイズしてみてください。
最適化の罠にはまらない方法? 最適化の罠にはまらない方法?
本稿はテスターの最適化結果をよりよく理解する方法のメソッドについて説明します。また『有害な最適化』を避けるアドバイスも提供します。
フラクタルラインの構築 フラクタルラインの構築
本稿はトレンドラインとフラクタルを利用したさまざまなタイプのフラクタルライン構築について説明します。