
使用HTML和CSS替换的记录(Log)文件
为什么要使用它或者问题在哪里呢?
任何EA交易都提供允许输出数据的功能, 这些数据是关于其功能, 当前状态, 未能预料的情况以及其他事件的. 使用EA交易生成的数据, 您甚至不需启动MetaTrader就可以跟踪侦测到全部事件的时序信息. 我们可以轻松找到所需的日期时间来寻找信息. 但是问题是EA交易可能产生大量的信息, 甚至EA交易的开发者也无法很容易地整理它们, 就更不必说不会创建EA交易的用户了. 如果我们打开一个典型的记录文件, 我们会看到成百上千行的同类信息.
现在让我们想象一下, 如果记录文件以下面的方法组织会有多么方便: 错误和未能预料的情形将使用红色和大字体标识出来, 警告使用小些的字体并用桃红色标出, 服务的信息使用亮绿色, 而所有的交易事务是蓝色的, 等等. 换句话说, 当您看着这种记录文件的时候, 您能够很容易了解发生了什么以及EA交易想告诉您什么, 您不必去通读它而是可以直接进入细节. 您一目十行, 在字里行间看不到任何红色或者桃红色 - 就说明没有错误和警告, 一切正常. 您只要几秒钟就可以直接看到蓝色的信息, 确认订单已经设置正确. 这只是梦想吗?绝非如此 - 我们将写一个函数库来实现这发明.
因而, 在本文中我们将讲述编写一个简单而功能强大的制作html文件的实例, 在过程中我们会学习调整它们的显示, 以及如何在您的EA交易和脚本程序中轻松实现和使用它们.
会使用什么呢?
我们将使用超文本标记语言(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 函数库: 创建html文件时出错."); 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(), FIleClose和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文件. 第二个参数是文件头部, 它将出现在文件的开头部分. 我们会晚些时候讨论最后一个参数, 本阶段忽略它, 因为使用了默认值.
现在一切准备就绪, 可以输出消息了. 开始吧:
WriteMsgLn("WriteMsgLn(). 测试信息");
此函数显示一条简单的文本信息. 您可以看到, 一切都很简单. 唯一的参数是消息文本. 简单性就会造成一些局限: 我们不能同时打开和使用多个文件. 很快我将告诉您如何解决这个小问题. 下一条信息会在新的一行显示. 函数名就告诉我们它的作用: Ln的意思是新的一行(Line New). 进一步:
WriteMsgLn("WriteMsgLn(). 警告消息","warning");
我们刚刚定义了第二个参数. 它说到这条消息应该以"警告"的方式显示. 意思是它的文字将是桃红色并且字体比普通字体略大一些. 这些显示参数在"default.css"文件中设置, 我们晚点再讲它. 我们按默认值设置"text"风格, 下面两个调用是一样的:
WriteMsgLn("WriteMsgLn(). 消息"); WriteMsgLn("WriteMsgLn(). 消息","text");
我们再测试不同的风格:
WriteMsgLn("WriteMsgLn(). 错误消息","error");
实际上是一样的, 只是"错误"风格. 文字将是红色的, 字体比之前的大一些. 现在, 让我们讲一下同时显示消息和时间的函数:
WriteMsgTimeLn("WriteMsgTimeLn(). 带有时间的消息");
除了消息之外, 当前时间也会显示. 它将被放置在一行的开头部分. 您也可以定义消息的风格, 和之前的方法一样:
WriteMsgTimeLn("WriteMsgTimeLn(). 带有时间的警告消息","warning"); WriteMsgTimeLn("WriteMsgTimeLn(). 带有时间的错误消息","error");
如果您想要在一行内显示多条消息, 使用WriteMsg()和WriteMsgTime()函数. 它们和之前的函数一样, 只是在一行之内显示消息:
WriteMsg("WriteMsg(). 文本"); WriteMsgTime("WriteMsgTime(). 带有时间的文本"); WriteMsg("WriteMsg(). 警告","warning"); WriteMsgTime("WriteMsgTime(). 错误","error");
在全部消息都显示完毕后, 关闭HTML文件:
CloseHtmlFile();
现在编译"html-file creation"脚本程序并在MetaTrader中运行. 访问logs文件夹, ...MetaTrader\experts\files\logs\ 并使用浏览器打开新的记录. 您可以看到, 使用这种方法显示数据更加灵活而且易懂. 如果您的喜好和我不同会有些问题. 让我们看看如何使用层叠式样表(CSS)来调整颜色和字体.
调整视图.
您可以看到一切都很简单. 在你学习如何使用函数库后, 让我们按照您的喜好调整记录的显式. 访问 “...MetaTrader/experts/files/logs/styles” 文件夹. 打开那里的唯一文件. 它包含了显式的设置 - CSS. 看看第一行:
#body
这是我们需要调整显示的样式的名称. 首先是 # 符号, 然后后面是名字. 此例中是文档的主体(body). 在任何CSS文件中都要加上此样式.
{ background-color: dimgray; }
现在我们设置字体的颜色. 以下我们用这种方式在花括号中写下参数和它们的数值:
参数名称: 数值;
这样我们就有了: 参数名称 – 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; }
这是三个类似的样式, 它们分别对应普通文字, 错误和警告. 您也可以设置额外一个参数"background-color", 它用于设置文字的背景颜色. 如果您需要创建您自己的样式并使用它, 就把它写入文件并保存. 可以使用如下方式:
#order { font-size: 160%; color: Dodgerblue; }
要使用此样式, 在输出消息的时候把它设置为一个参数:
WriteMsgTimeLn("WriteMsgTimeLn(). 带有时间的订单消息","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","测试 generateHTML 函数库","logs\styles\myStyle.css ");
同时创建和使用多个记录文件.
在使用函数库时我们没有选择过将要使用的文件, 结果很简单. 但是问题来了: 我们应该怎样同时在多个记录文件中写消息呢?一切都很简单. 创建html文件的函数返回一个整数("int")数值. 它是文件的标识符. 我们也有一个全局变量“int htmlFileHandle”, 它表示当前使用的文件. 我们需要的就是记住所有这些记录文件的标识符, 并把它们的数值在必要的时候赋给"htmlFileHandle".
这就是我想告诉您的全部内容. 现在我们有了一个简单创建和高效显示数据的方法. 希望它会对很多交易者有用并使他们的工作更加轻松.
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/1432
注意: MetaQuotes Ltd.将保留所有关于这些材料的权利。全部或部分复制或者转载这些材料将被禁止。
This article was written by a user of the site and reflects their personal views. MetaQuotes Ltd is not responsible for the accuracy of the information presented, nor for any consequences resulting from the use of the solutions, strategies or recommendations described.