MQL4如何直接转换为MQL5? 求更加具体的方法!
将MT4(MetaTrader 4)中的MQL4代码转换为MT5(MetaTrader 5)中的MQL5代码是一个复杂的过程,因为MQL5在功能和结构上有很多改进和变化。
以下是一些关键步骤和要点,以帮助您将MQL4代码转换为MQL5。
- 1. 环境设置与基本区别
-
-
- 初始化与去初始化
- - MQL4:
- ```mql4
- int init() { // Initialization code }
- int deinit() { // Deinitialization code }
- int start() { // Main function }
- ```
- - MQL5:
- ```mql5
- void OnInit() { // Initialization code }
- void OnDeinit(const int reason) { // Deinitialization code }
- void OnTick() { // Main function }
- ```
-
-
- 2. 数据类型与常量
- - MQL5引入了更多的数据类型和常量,与MQL4不同。
- - 例如,MQL5中有多种新的数据类型用于处理交易操作。
-
-
- 3. 事件处理函数
- - MQL5支持更多的事件处理函数,如`OnTick`, `OnTimer`, `OnTrade`, `OnBookEvent`等。
- - 需要根据具体需求在MQL5代码中实现相应的事件处理函数。
-
-
- 4. 订单和交易处理
- - MQL4:
- ```mql4
- OrderSend(symbol, type, lots, price, slippage, stoploss, takeprofit, comment, magic, expiration, color);
- ```
- - MQL5:
- ```mql5
- trade.Buy(lots, price, slippage, stoploss, takeprofit, comment);
- trade.Sell(lots, price, slippage, stoploss, takeprofit, comment);
- ```
- - MQL5引入了CTrade类来处理交易操作,这样可以更方便和灵活地进行交易。
-
-
- 5. 市场信息与订单管理
- - 获取市场信息:
- - MQL4:
- ```mql4
- double bid = MarketInfo(symbol, MODE_BID);
- ```
- - MQL5:
- ```mql5
- double bid = SymbolInfoDouble(symbol, SYMBOL_BID);
- ```
-
-
- - 订单管理:
- - MQL4:
- ```mql4
- int ordersTotal = OrdersTotal();
- for(int i=0; i<ordersTotal; i++) {
- if(OrderSelect(i, SELECT_BY_POS)) {
- // Process order
- }
- }
- ```
- - MQL5:
- ```mql5
- int ordersTotal = PositionsTotal();
- for(int i=0; i<ordersTotal; i++) {
- if(PositionSelectByIndex(i)) {
- // Process position
- }
- }
- ```
-
-
- 6. 图表操作
- - MQL5在图表操作方面提供了更多的功能和更高的灵活性。
- - 例如,MQL5支持多个图表窗口,可以对每个图表进行独立的操作。
-
-
- 7. 技术指标
- - MQL4:
- ```mql4
- double iMA(string symbol, int timeframe, int period, int shift, int method, int applied_price, int shift);
- ```
- - MQL5:
- ```mql5
- double handle = iMA(symbol, timeframe, period, shift, method, applied_price);
- double ma_value = CopyBuffer(handle, 0, shift, 1, buffer);
- ```
-
-
- 8. 结构与类
- - MQL5更加强调面向对象编程,引入了类和对象的概念。
- - 需要将MQL4中的函数转换为MQL5中的类方法,以提高代码的可维护性和扩展性。
-
-
- 9. 代码优化与性能
- - MQL5的执行速度和性能相比MQL4有显著提升。
- - 可以利用MQL5中的多线程功能和优化技术,提升EA(Expert Advisor)和指标的执行效率。
-
-
- 10. 示例转换
- 示例1:简易EA
- - MQL4:
- ```mql4
- int start() {
- if (OrdersTotal() == 0) {
- OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "Buy Order", 0, 0, clrGreen);
- }
- return 0;
- }
- ```
- - MQL5:
- ```mql5
- void OnTick() {
- if (PositionsTotal() == 0) {
- trade.Buy(0.1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 3, 0, 0, "Buy Order");
- }
- }
- ```
-
-
- 示例2:简单指标
- - MQL4:
- ```mql4
- int start() {
- double ma = iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0);
- Comment("MA: ", ma);
- return 0;
- }
- ```
- - MQL5:
- ```mql5
- int OnInit() {
- handle = iMA(_Symbol, _Period, 14, 0, MODE_SMA, PRICE_CLOSE);
- return INIT_SUCCEEDED;
- }
-
-
- void OnTick() {
- double ma;
- if (CopyBuffer(handle, 0, 0, 1, ma) > 0) {
- Comment("MA: ", ma);
- }
- }
- ```
复制代码
结论
将MQL4代码转换为MQL5代码需要注意许多细节和不同之处。主要的变化包括事件处理函数、订单和交易处理、市场信息获取、图表操作、技术指标使用、结构与类的引入,以及代码优化与性能提升。在转换过程中,需要仔细阅读和理解MQL5的文档,以便充分利用其新功能和改进。
目前我只知道这些,具体怎么MQL4如何直接转换为MQL5,有更好的办法告诉我一下!
|