- 1、本文档共54页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浅谈 MQL5 : 图形对象的防破坏保护
1. 简介
MQL5编程语言的一个优点是, 使用MQL5的标准函数, 您可以在使用MetaTrader5交易终端时使用
代码完成各种任务以及达到各种目标.
这篇文章使用简明的语言, 易懂的实例, 使用两种不同方式来实现控制面板在其图形对象被删除或者
修改时的回应. 我们将会发现, 您如何确认在应用程序退出之后, 在图表上不会出现无主的对象, 这
样的对象可能是某人或者程序把它们重新命名而使得程序对之失去了控制.
图 1. 控制面板在其对象属性被人工修改前后的外观实例
在本文中描述的, 构造对来自外界干扰的回应的代码, 对于其他情况也并非是多余的. 举例来说, 在
图表上运行的第三方程序没有准备做清除的, 使用某些参数调用一个函数来删除对象
(ObjectsDeleteAll() 或者您自己创建的函数):
在同一个窗口/子窗口中删除人工或者其他程序创建的全部类型的图形对象;
或者在您程序的控制面板上完全删除某种类型的对象;
或者根据前缀的匹配删除您程序中的对象.
这些选项在一定条件下都是合理的, 包括程序正确运行中, 在意外或者有意删除了控制面板对象时,
或者在代码中人工修改了它们的属性时提供可以执行的操做.
本文对刚刚开始学习OnChartEvent()函数的事件处理的开发者也会有所帮助.
我想直接提醒您, 本文不包括创建强硬的回应代码, 就是那种对象会在未经授权的条件下修改或者
删除的代码. 终端程序的主要目的是解决交易者可能遇到的问题, 所以武断地干预是不可接受的.
对于喜欢强硬行动的人, 我建议您在考虑这样做之前做一个下面的类比. 假如有个办公室的清洁工,
在用抹布擦桌子的时碰掉了桌上的电脑, 或者在某人画出漂亮的作品时弄脏了他/她的桌子或者电脑.
所以如果被毁坏财物的主人的反应是, 在大庭广众之下把电脑, 家具连同清洁工一起扔出窗外, 他的
行为显然是不当的. 另外, 做出这种激进行为的人也得不到什么好处.
在继续进行对蓄意破坏对象回应的两种(从更多选择中选出的)可能的方法之前, 我相信有必要提一下
在MQL5/MQL4编程语言中的一种对象保护方法.
2. 在 MQL5/MQL4 中重点对象的保护
如果没有这种保护, 对程序创建对象属性的访问就会更加开放.
我来向您解释一下我的意思. 为了保护对象, 防止它们被删除或者修改属性 - 名称, 描述, 颜色等等.
提供了一个OBJPROP_HIDDEN特性, 可以被明确使用. 它可以设置障碍, 使得图形对象的名称在终
端的对象列表菜单中不显示: 图表 - 对象 - 对象列表. 默认情况下, 显示日历事件的对象, 交易
历史和MQL5程序所创建的对象都设置了这一选项 .
明确设置禁止(没有默认设置) 可以在代码中如下实现:
ObjectSetInteger (chart_id,name,OBJPROP_HIDDEN ,true);
其中:
ObjectSetInteger 是用于设置对象相关属性数值的函数;
chart_id 标示出放置对象的图表(当前图表为0);
name 是应用此函数的对象的名称;
true 与OBJPROP_HIDDEN 一起调用会在对象列表中隐藏此对象(false取消隐藏).
这种实现方式以及相关代码可以在文档中找到. 通过点击提供的对象类型列表中的任意链接, 您就可
以看到使用函数创建对象的例子代码.
在图形对象名称列表中禁止显示的对象, 不论是明确说明还是默认的, 都可以通过按下全部按钮来显
示图表上的全部对象来看到. 对于通过对象列表人工干预图形对象的属性来说这只是初级保护.
图 2. 在按下全部按钮之前的图表上的对象列表
图 3. 在按下全部按钮之后的图表上的对象列表
事实上, 图形对象就算您让它不可见, 它在图表上也无法完全隐藏, 这是一个优点而不是缺点. 您可
以在列表中快速浏览, 修改或者复制对象的属性, 而不需要检查整个图表, 因为图表中甚至可能包含
前些年的对象和柱形. 另外, 列表中的对象可以根据类型, 名称和其他一些参数进行排序.
MetaTrader5和MetaTrader4交易终端的众多优点之一就是可以自己简单地开发自动化交易程序,
也可以使用其他人开发的多个应用. 但是人们会永远都不犯错吗?另外, 写程序的准备水平也可能是
文档评论(0)