MQL_Easy - MetaTrader 5 库
MQL_Easy 是一个开源跨平台库,用于开发 MQL4 和 MQL5 应用程序。该库的目的是使 MQL 开发变得简单、安全和快速,以便更加专注于实现复杂的交易理念。跨平台特性确保同一段代码可以在两个平台上运行。此外,它还实现了一些独特的功能,使开发变得更容易、更快。但是,它并未涵盖 mql5/4 语言的整个应用程序编程接口。我们的目标不是取代元引用已经很好实现的整个 MQL 标准库;它只是填补了 MQL4 和 MQL5 编程之间的空白,并简化了交易应用程序的开发。
该库包含以下类:
值得一提的是,部分代码是从互联网上的其他资源收集的。目标是将任何有用的代码收集到一个框架/库中。
当前文档不包含 MQL_Easy 框架/库的全部功能。未来会定期更新。
您可以随意测试、更改或自定义它,以更好地满足您的需求。
如果您发现任何问题/错误/改进,请告诉我。
要开始使用该库,您只需 3 个步骤。
#包括
(上面的代码行包含了库的所有文件并使其可用)
//+------------------------------------------------------------------+ //| MQL_Easy_Example.mq5 | //| 版权所有 2021,迪奥尼西斯·尼科洛普洛斯。 | //| | //+------------------------------------------------------------------+ #财产版权 “版权所有 2021,迪奥尼西斯·尼科洛普洛斯。” #财产关联 ”” #财产版本 “1.00” #财产严格的 #包括此代码示例是用 MQL5 编辑器编写的,但它可以在两个平台上正常运行和工作。//-- 执行交易的对象C执行执行;//-- 管理交易的对象CPosition位置;//-- 打印消息的对象CPrinter打印机;//+------------------------------------------------------------------+ //|脚本程序启动函数 | //+------------------------------------------------------------------+ 空白 启动时() {//--- //-- 设置对象的符号和幻数 细绳符号=_象征; 整数魔法数 =12345; 执行.SetSymbol(符号); 执行.SetMagicNumber(magicNumber); 位置.SetGroupSymbol(符号); 位置.SetGroupMagicNumber(magicNumber); //-- 创建交易头寸 买入 ENUM_TYPE_POSITION 类型 = TYPE_POSITION_BUY; 双倍的体积=0.10; 双倍的止损=20; 双倍的获利=20; 整数偏差=10; 细绳评论=“测试位置执行”; execute.Position(类型,交易量,止损,止盈,SLTP_PIPS,偏差,评论); //-- 出于视觉目的的延迟 睡觉(2000年); //-- 检查交易是否执行 如果(位置.GroupTotal() >0&& 位置.按索引选择(0) != -1){ //-- 收集有关交易的信息 长的票 =position.GetTicket(); 双倍的openPrice=position.GetPriceOpen(); 细绳消息=“#票:”+(细绳)门票+“,开盘价:”+(细绳) 开盘价; 打印机.设置标题(“报告”); 打印机.添加(《位置执行》,信息); //-- 出于视觉目的的延迟 睡觉(2000年); //-- 使用快速访问功能修改位置 位置[0]。调整(50,50,SLTP_PIPS); 打印机.添加(“将止损止损修改 50 点”,“完毕”); //-- 出于视觉目的的延迟 睡觉(2000年); //-- 再次使用快速访问功能修改位置 位置[0]。调整(300,300,SLTP_POINTS); 打印机.添加(“修改TP SL 300点”,“完毕”); //-- 出于视觉目的的延迟 睡觉(2000年); //-- 平仓 位置[0]。关闭(); 打印机.添加(“平仓”,“完毕”); 打印机.PrintContent(); } }//+------------------------------------------------------------------+
MQL_Easy.mql
MQL_ Easy.mqh 是一个包含文件,其中包含所有其他包含文件。
这是一种快速入门方法,无需知道类的名称。此外,如果开发需要大量使用 MQL_Easy 库,那么您可以在一处找到它们。
当您熟悉该库后,您将轻松地只包含所需的类。
MQL_Easy 库的文件夹数量与已实现的类一样多。每个文件夹都包含一个 include mql 文件和另一个名为“Includes”的文件夹。为了使用任何类,只需将 mql 包含文件包含在您的项目中即可。 “Includes”文件夹仅包含每个平台的类的实现。 In some cases, the MQL4 and MQL5 platforms shares exactly the same code.然而,在许多情况下,实现是不同的,因此“Includes”文件夹有三个文件。一个带有后缀“base”,用于实现共享代码,另外两个带有后缀“MT4”和“MT5”,用于平台相关代码。因此,通过这种方式,不仅平台相关的代码位于单独的文件中,而且它还可以更轻松地利用一个平台支持而另一个平台不支持的功能进行扩展。
CExecute 类负责交易执行。有两种交易:仓位(Buy、Sell)和订单(BuyLimit、SellLimit、BuyStop 和 SellStop)。此类的一个节省时间的功能是 ENUM_SLTP_TYPE 枚举,开发人员可以设置止损和止盈值的类型(价格、点数、点数、百分比)。因此,通过一行代码,该库负责将 ENUM_SLTP_TYPE 功能转换为价格,进行验证检查,以确保交易请求是有效的,然后再将其发送到经纪商的服务器并在两个平台上执行交易。如果出现任何错误,专家选项卡中会显示一条用户友好的消息,其中包含错误代码和详细信息。除了打印错误信息之外,CExecute 类还将这些详细信息填充到自己的 CError 对象中,开发人员可以根据需要使用它来处理这些情况。
//-- 创建CExecute类的对象并设置符号和幻数 细绳符号=_象征;整数魔法数 =12345; CExecute 执行(符号, magicNumber);//-- 或 CExecute*execute = new CExecute(symbol, magicNumber); //-- 设置符号和幻数的替代方法C执行执行; 执行.SetSymbol(符号); 执行.SetMagicNumber(magicNumber);//-- 创建交易头寸 买入ENUM_TYPE_POSITION 类型 = TYPE_POSITION_BUY;双倍的体积=0.10;双倍的止损=20;双倍的获利=20; 执行.Position(类型,交易量,止损,获利,SLTP_PIPS);//-- 创建交易订单 SellStop执行.订单(TYPE_ORDER_SELLSTOP,0.10,1.1550,20,20,SLTP_PIPS);
CPosition 和 COrder 类负责管理账户的活动交易和待处理交易,例如收集有关交易的信息或关闭交易。通过适当的配置,开发人员可以按交易品种、幻数、类型或全部对交易进行分组,以便轻松操作这些交易组。一般来说,MQL_Easy 库的分组属性可以节省大量时间,并能够轻松创建复杂的交易想法。这些课程实现的另一个独特功能是贸易的“快速访问”。只需一行代码,开发人员就可以检索交易属性,例如开盘价格、开盘时间等。
//-- 创建一个头寸对象,它将使用相同的交易品种、幻数 //- 和类型对交易进行分组。在这例如,该组包含符号 EURUSD、幻数的交易 //--12345以及交易类型“买入”。 细绳符号=“欧元兑美元”; 整数魔法数 =12345; CPosition 仓位(symbol,magicNumber, GROUP_POSITIONS_BUYS); //--返回具有特定交易品种、幻数和类型的活跃交易总数, //-- 忽略所有其他 整数总位置 = 位置.GroupTotal(); //-- 迭代特定的交易组 为了(整数我=0; i < 总持仓数;我++){ //-- 通过索引选择一个位置 如果(位置.SelectByIndex(i)){ 长的票证=position.GetTicket(); 双倍的openPrice = 仓位.GetPriceOpen(); 日期时间openTime =position.GetTimeOpen(); 双倍的利润 = 仓位.GetProfit(); 打印("#ticket: "+ticket+", openPrice: "+openPrice+", openTime: +openTime+", 利润:"+profit); }别的{ //--如果该位置未选择默认消息错误与用户友好描述 //-- 将显示在专家选项卡中 //-- 另外,您还可以检索错误信息 整数错误代码 = 位置.Error.GetLastErrorCode(); //-- 进行自定义操作 } } //-- 组方法示例 位置.GroupTotalProfit(); // 返回一组的总利润 位置.GroupTotalVolume(); // 返回一组的总音量 位置.GroupCloseAll(10); // 关闭一组的所有交易。数量10是尝试案件的 // 失败,由默认是20。 //-- 通过索引快速访问的示例双倍的开仓价格 = 仓位[0].GetPriceOpen(); //-- 上面的代码选择具有索引的组的位置0(第一个)并检索 //-- 开盘价。 //-- 这里,它检索最后一个的开放时间。日期时间开仓时间 = 仓位[仓位.GroupTotal()-1].GetTimeOpen(); //-- 凭票快速访问示例长的票=265748761; //-- 类型长的很重要双倍的openPrice = 位置[ticket].GetPriceOpen(); //-- 上面的代码通过票号选择一个位置并检索 //-- 开盘价。
“按索引快速访问”和“按票证快速访问”的区别在于括号中设置的变量类型。索引为整数,票据为长整型。
CHistoryPosition 和 CHistoryOrder 负责收集有关过去活跃和待处理交易的信息。它们具有与 CPosition 和 COrder 类相同的功能,例如分组和快速访问。此外,它们还具有开始日期和结束日期,以便指定时间段作为额外的分组过滤器。如果您不指定时间段,那么它将搜索帐户的整个历史记录。
C历史持仓历史持仓; 历史位置.SetHistoryRange(D'2019.03。25 00:00:00',时间当前());为了(整数我=0;我打印("#ticket: "+historyPosition[i].GetTicket()+" 时间关闭: “+historyPosition[i].GetTimeClose()); } //-- 上面的代码打印日期以来所有仓位的票据和收盘时间2019.03。25//--00:00:00到目前为止。
CUtility 类应用一些交易应用程序可能需要的常见有用函数。
CUtilities 实用程序(“欧元兑美元”); 如果(utils.IsNewBar(PERIOD_M1)){ 打印(“一分钟过去了!!!”); }
CPrinter 类实现了一种快速而良好的方式,将自定义格式的消息发送到终端。它对于错误消息和调试可能很有用。
CPrinter打印机; 打印机.设置标题(“注意力”); 打印机.SetContainer(“-”); 打印机.添加(“为用户采取行动”,“您需要启用自动交易!!!”); 打印机.添加(“步骤”,“按下终端顶部的自动交易按钮”); 打印机。打印();
上述代码显示在 Expert 选项卡中:
- - - - - - - - 注意力 - - - - - - - -
用户须知:您需要启用自动交易!
步骤:按终端顶部的自动交易按钮
- - - - - - - - 注意力 - - - - - - - -
CError 类负责处理错误。默认情况下,它包括所有可用的错误代码及其描述。因此,开发人员可以更快地处理错误或向用户发出有意义的信息。
双倍的问=符号信息双(“WRONG_SYMBOL”,SYMBOL_ASK);//该行产生错误CError 错误; 错误.CreateErrorCustom(“发生错误!!!”,真的);
上面的代码会显示:
- - - - - - - - 错误 - - - - - - - -
消息:发生错误!!!
错误(4301):未知符号
- - - - - - - - 错误 - - - - - - - -
CValidationCheck 类实现了订单检查和验证的有用函数。在将交易请求发送到服务器之前,通过一些检查很重要。它们中的大多数都是众所周知的,这就是 CExecute 类默认使用它们的原因。因此,在任何需要的情况下都能够使用此类是非常有用的。
//-- 检查交易量(手数)是否有效的函数检查成交量值(细绳象征,双倍的体积)//-- 检查是否有足够的可用余额进行另一笔交易的函数检查交易货币(细绳象征,双倍的体积,ENUM_ORDER_TYPE类型)
任何库/框架的力量不仅在于它正确履行其职责,还在于它围绕它建立了一个社区。
社区应该像任何其他开源项目一样领导 MQL_Easy 框架。请随意在任何级别做出贡献(github: https://github.com/Denn1Ro/MQL_Easy)。
附件下载
📎 mql_easy_example.mq5 (2.27 KB)
📎 mql_easy_example.mqh (261.83 KB)
Source: MQL5 #25090
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
