|
|
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,有更好的办法告诉我一下! |
|