4.3 使用链接库( Library )
链接库为符合功能的集合。而包含文件是源代码文件,其内容是"包含"在可执行文件案中,链接库是包含汇入功能的独立可执行文件。因此,你必须同时拥有expert advisor 可执行文件与链接库可执行文件来执行你的EA 。
链接库储存在\expert\libraries文件夹中。源代码文件有·mqh 扩展名,而可执行文件有. ex4 扩展名。链接库没有init( ) 、start( )或deinit( )功能。欲声明档案为链接库,你必须把#property libra巧(#预定义参量链接库)预处理器指令放在档案开头。
链接库的优势是已编译过,如需分配功能链接库就可进行,元须像分配包含文件那样暴露知识产权。你也可以进行链接库的错误修复程序,只要不变更功能声明(例如增删参数或功能) ,无须重新编译expert advisor 。
链接库也有若干缺点。既然已经编译过,编译程序就不可能检查参数是否正确。在链接库功能中,你无法指定参数默认值。也就是说,在功能调用中,你需要为每个参数指定一个值。你无法在链接库中使用外部变量,或建立你的expert advisor可存取的全局范围变量。
你必须以#ímport 指令将链接库功能汇入expert advísor 。如链接库内含大量功能,最好是建立有#ímport 语句的包含文件。这会增加你工作的档案量。除非有很好的理由才使用链接库,不然建议你还是继续用包含文件来储存功能。
你还可从Windows DLL 中用#ímport 指令汇入功能。在飞expe由\includes 内的WinUser32. mqh 包含文件中,用于MessageBox( )功能的例子不胜枚举(我们在第八章会讨论MessageBox( )功能) 。使用DLL 功能是进阶的用法,我们在这里不讨论, MQL4网站上有关于使用DLL 的文章供有兴趣者参考。
简单的Expert Advisor( 附功能)
以下为expert advisor 的源代码,如在源代码档中所呈现的。我们会假设在这章建立的功能已在包含文件IncludeExample. mqh 中声明,内容列在本书附录D中。



在本例中,我们从内有功能的包含文件开始,在此例中为IncludeExample.rnqh 。变量声明以及init( )功能的内容还是和以前一样。在start ( )功能的开头,我们以CalcLotSize ( )和Verify LotSize ( )计算并验证仓位的大小。
在买单和卖单区块中,我们以CloseBuyOrder ( )和CloseSellOrder( )为相反的交易单平仓。新单以OpenBuyOrder( )或OpenSellOrder( )开仓。计算停损与获利之前,检查开仓交易单以及停损或获利是否设好了。
我们以OrderSelect ( )和OrderOpenprice ( )获取交易单的入单价。然后用CalcBuyStopLoss ( )或CalcSellStopLoss ( )计算停损,以CalcBuyTakeProfit ( )或CalcSellTakeProfit ( )计算获利。
我们查看停损或获利是否大于"0" ,并以AdjustAboveStopLevel( )和AdjustBelowStopLevel( )功能验证停损与获利价格。最后,我们把这些价格传送至AddOrderProfit( )功能,它会增设交易单的停损与获利。
上面的EA 和先前章节"验证仓位大小"开始的代码完全一样,只是更容易阅读。透过破坏进入功能的代码,我们已经减少了源代码的混乱,使EA 更易于管理。本书结束前,我们还会为此expe此advisor 再加些功能,可在附录C 中检视完整代码。
一开始建立这些功能需要些时间,然而长期来看却能帮你节省时间,因为你会越来越轻松地拿捏交易构思,并在短时间内熟诸expert advisor 的使用。