设为首页 收藏本站 切换语言

MQL4如何直接转换为MQL5? 求详细更好的方式转换!

| 发表于 2024-5-23 11:52:48 | 显示全部楼层 |复制链接
MQL4如何直接转换为MQL5?   求更加具体的方法!


将MT4(MetaTrader 4)中的MQL4代码转换为MT5(MetaTrader 5)中的MQL5代码是一个复杂的过程,因为MQL5在功能和结构上有很多改进和变化。
以下是一些关键步骤和要点,以帮助您将MQL4代码转换为MQL5。


      
  1. 1. 环境设置与基本区别
  2.        初始化与去初始化
  3. - MQL4:
  4.   ```mql4
  5.   int init() { // Initialization code }
  6.   int deinit() { // Deinitialization code }
  7.   int start() { // Main function }
  8.   ```
  9. - MQL5:
  10.   ```mql5
  11.   void OnInit() { // Initialization code }
  12.   void OnDeinit(const int reason) { // Deinitialization code }
  13.   void OnTick() { // Main function }
  14.   ```
  15.        2. 数据类型与常量
  16. - MQL5引入了更多的数据类型和常量,与MQL4不同。
  17. - 例如,MQL5中有多种新的数据类型用于处理交易操作。
  18.        3. 事件处理函数
  19. - MQL5支持更多的事件处理函数,如`OnTick`, `OnTimer`, `OnTrade`, `OnBookEvent`等。
  20. - 需要根据具体需求在MQL5代码中实现相应的事件处理函数。
  21.        4. 订单和交易处理
  22. - MQL4:
  23.   ```mql4
  24.   OrderSend(symbol, type, lots, price, slippage, stoploss, takeprofit, comment, magic, expiration, color);
  25.   ```
  26. - MQL5:
  27.   ```mql5
  28.   trade.Buy(lots, price, slippage, stoploss, takeprofit, comment);
  29.   trade.Sell(lots, price, slippage, stoploss, takeprofit, comment);
  30.   ```
  31.   - MQL5引入了CTrade类来处理交易操作,这样可以更方便和灵活地进行交易。
  32.        5. 市场信息与订单管理
  33. - 获取市场信息:
  34.   - MQL4:
  35.     ```mql4
  36.     double bid = MarketInfo(symbol, MODE_BID);
  37.     ```
  38.   - MQL5:
  39.     ```mql5
  40.     double bid = SymbolInfoDouble(symbol, SYMBOL_BID);
  41.     ```
  42. - 订单管理:
  43.   - MQL4:
  44.     ```mql4
  45.     int ordersTotal = OrdersTotal();
  46.     for(int i=0; i<ordersTotal; i++) {
  47.         if(OrderSelect(i, SELECT_BY_POS)) {
  48.             // Process order
  49.         }
  50.     }
  51.     ```
  52.   - MQL5:
  53.     ```mql5
  54.     int ordersTotal = PositionsTotal();
  55.     for(int i=0; i<ordersTotal; i++) {
  56.         if(PositionSelectByIndex(i)) {
  57.             // Process position
  58.         }
  59.     }
  60.     ```
  61.        6. 图表操作
  62. - MQL5在图表操作方面提供了更多的功能和更高的灵活性。
  63. - 例如,MQL5支持多个图表窗口,可以对每个图表进行独立的操作。
  64.        7. 技术指标
  65. - MQL4:
  66.   ```mql4
  67.   double iMA(string symbol, int timeframe, int period, int shift, int method, int applied_price, int shift);
  68.   ```
  69. - MQL5:
  70.   ```mql5
  71.   double handle = iMA(symbol, timeframe, period, shift, method, applied_price);
  72.   double ma_value = CopyBuffer(handle, 0, shift, 1, buffer);
  73.   ```
  74.        8. 结构与类
  75. - MQL5更加强调面向对象编程,引入了类和对象的概念。
  76. - 需要将MQL4中的函数转换为MQL5中的类方法,以提高代码的可维护性和扩展性。
  77.        9. 代码优化与性能
  78. - MQL5的执行速度和性能相比MQL4有显著提升。
  79. - 可以利用MQL5中的多线程功能和优化技术,提升EA(Expert Advisor)和指标的执行效率。
  80.        10. 示例转换
  81.        示例1:简易EA
  82. - MQL4:
  83.   ```mql4
  84.   int start() {
  85.       if (OrdersTotal() == 0) {
  86.           OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "Buy Order", 0, 0, clrGreen);
  87.       }
  88.       return 0;
  89.   }
  90.   ```
  91. - MQL5:
  92.   ```mql5
  93.   void OnTick() {
  94.       if (PositionsTotal() == 0) {
  95.           trade.Buy(0.1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 3, 0, 0, "Buy Order");
  96.       }
  97.   }
  98.   ```
  99.        示例2:简单指标
  100. - MQL4:
  101.   ```mql4
  102.   int start() {
  103.       double ma = iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0);
  104.       Comment("MA: ", ma);
  105.       return 0;
  106.   }
  107.   ```
  108. - MQL5:
  109.   ```mql5
  110.   int OnInit() {
  111.       handle = iMA(_Symbol, _Period, 14, 0, MODE_SMA, PRICE_CLOSE);
  112.       return INIT_SUCCEEDED;
  113.   }
  114.   void OnTick() {
  115.       double ma;
  116.       if (CopyBuffer(handle, 0, 0, 1, ma) > 0) {
  117.           Comment("MA: ", ma);
  118.       }
  119.   }
  120.   ```
复制代码



       结论
将MQL4代码转换为MQL5代码需要注意许多细节和不同之处。主要的变化包括事件处理函数、订单和交易处理、市场信息获取、图表操作、技术指标使用、结构与类的引入,以及代码优化与性能提升。在转换过程中,需要仔细阅读和理解MQL5的文档,以便充分利用其新功能和改进。
目前我只知道这些,具体怎么MQL4如何直接转换为MQL5,有更好的办法告诉我一下!

举报

评论 使用道具

精彩评论7

ea12213
C
| 发表于 2024-6-4 12:16:50 | 显示全部楼层
好像有个网站可以转
举报

点赞 评论 使用道具

無爲编程破译
B
 楼主 | 发表于 2024-6-4 13:42:39 | 显示全部楼层
ea12213 发表于 2024-6-4 12:16
好像有个网站可以转

确实存在一些在线链接转换工具,效果不好
举报

点赞 评论 使用道具

xiong4764
未及格
| 发表于 2024-6-5 19:31:05 来自手机 | 显示全部楼层
明白了,看来MQL5才是我想学的,放弃MQL4,面向对象编程才是王道,现在大部分源码我看全是面向过程
举报

点赞 评论 使用道具

無爲编程破译
B
 楼主 | 发表于 2024-6-5 20:01:42 | 显示全部楼层
xiong4764 发表于 2024-6-5 19:31
明白了,看来MQL5才是我想学的,放弃MQL4,面向对象编程才是王道,现在大部分源码我看全是面向过程 ...

转向MQL5和面向对象编程是个明智的选择!面向对象编程能够提升代码的可读性和可维护性,是现代软件开发的重要趋势。期待你在这个方向上取得更大的进步!
举报

点赞 评论 使用道具

三条龙交易
DDD
| 发表于 2024-10-30 09:27:24 | 显示全部楼层
ea12213 发表于 2024-6-4 12:16
好像有个网站可以转

哪个网站可以直接转换?
举报

点赞 评论 使用道具

liguangxing2007
DDD
| 发表于 2024-10-30 12:38:14 | 显示全部楼层
为什么每天要研究这个?
举报

点赞 评论 使用道具

無爲编程破译
B
 楼主 | 发表于 2024-10-30 13:04:26 | 显示全部楼层
liguangxing2007 发表于 2024-10-30 12:38
为什么每天要研究这个?

为了把握市场动态,抓住盈利机会呀。
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

無爲编程破译

無爲编程破译 B

EA编程 破解 指标 破源 反编译 定制开发 资源分享 众筹_脚本_辅助_源码_易语言_黑科技_技术传授_VPS资管代

天眼云VPS
简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)