MQL4语言编写交易指标和模型的实践经验分享
作为一名从事多年期货、外汇交易的投资者,熟悉编写程序化交易或者EA是必不可少的技能,而MQL4语言是其中最为常用的编程语言之一。在本文中,我将分享我的实践经验,为想要学习MQL4语言编写交易指标和模型的新手提供帮助。
一、MQL4语言入门及基础知识
在了解MQL4语言之前,首先需要理解交易算法。简单来说,交易算法就是投资者根据市场走势形成一套判断标准,并制定一系列的买卖规则。这些规则可以是基于技术分析、基本面分析或其他因素的。然后,程序会按照这些规则自动进行交易。
学习MQL4编程需要一些计算机基础知识和编程经验,例如数据类型、变量、数组、循环等等。除此之外,还需要学习一些专业术语,例如“Expert Advisor(专家顾问)”,“Indicator(指标)”,“Backtesting(回测)”等等。
二、MQL4技术指标编写与应用
技术指标是衡量市场走势的重要指标,也是编写程序化交易的重要组成部分。以下简要介绍一些常用的技术指标及相应编写方法:
1. 移动平均线(MA)
移动平均线是衡量价格趋势的重要工具。代码实现方法如下:
double MA(int ma_period){
double ma = iMA(NULL, 0, ma_period, 0, MODE_SMA, PRICE_CLOSE, 0);
return (ma);
}
其中,iMA函数用于计算移动平均线,参数说明:
– NULL:为当前图表;
– 0:为当前品种;
– ma_period:为移动平均线的周期;
– 0:为移动平均线与当前价格一致;
– MODE_SMA:为移动平均线的计算模式,表示使用简单移动平均法;
– PRICE_CLOSE:为所取价位,即以收盘价计算;
– 0:表示从当前bar开始计算。
2. 相对强弱指标(RSI)
相对强弱指标用于衡量价格变化程度,属于超买与超卖指标。代码实现方法如下:
double RSI(int rsi_period){
double rsi = iRSI(NULL, 0, rsi_period, PRICE_CLOSE, 0);
return (rsi);
}
其中,iRSI函数用于计算相对强弱指标,参数说明:
– NULL:为当前图表;
– 0:为当前品种;
– rsi_period:为相对强弱指标的周期;
– PRICE_CLOSE:为所取价位范围,即收盘价;
– 0:表示从当前bar开始计算。
3. 布林线(BB)
布林线指标结合简单移动平均线和标准差线来衡量价格波动情况。代码实现方法如下:
void BB(int b_period, double b_dev){
double up_band, dn_band;
double ma = MA(b_period);
double st_dev = b_dev * iStdDev(NULL, 0, b_period, 0, PRICE_CLOSE, 0);
up_band = ma + st_dev;
dn_band = ma – st_dev;
return (up_band, dn_band);
}
其中,iStdDev函数用于计算标准差,参数说明:
– NULL:为当前图表;
– 0:为当前品种;
– b_period:为标准差的周期;
– 0:表示从当前bar开始计算。
三、MQL4交易模型编写与应用
除了技术指标之外,交易模型也是编写程序化交易的重要部分。以下简要介绍一些常见的交易模型及相关的代码实现方法:
1. 均值回归策略
均值回归策略基于股票价格长期趋势恢复的原理,通过寻找异常股票价格并建立多空仓位来获利。代码实现方法如下:
int ticket;
double lots, stop_loss, take_profit;
double ma = MA(20);
double price = Close[0];
if(price > ma){
lots = NormalizeDouble(AccountFreeMargin() / 1000 / MarketInfo(Symbol(), MODE_TICKSIZE), 2);
stop_loss = price – (price – ma) * 1.5;
take_profit = price – (price – ma) * 3;
ticket = OrderSend(Symbol(), OP_SELL, lots, Ask, 3, stop_loss, take_profit, “Sell Order”, MagicNumber, 0, Red);
}else if(price < ma){
lots = NormalizeDouble(AccountFreeMargin() / 1000 / MarketInfo(Symbol(), MODE_TICKSIZE), 2);
stop_loss = price + (ma – price) * 1.5;
take_profit = price + (ma – price) * 3;
ticket = OrderSend(Symbol(), OP_BUY, lots, Bid, 3, stop_loss, take_profit, “Buy Order”, MagicNumber, 0, Green);
}
其中,NormalizeDouble函数用于将交易手数保留两位小数;AccountFreeMargin函数可以获取账户余额;OrderSend函数用于发送交易请求。
2. 动量策略
动量策略基于股票价格趋势加速变化的原理,通过建立多空仓位来获利。代码实现方法如下:
int ticket;
double lots, stop_loss, take_profit;
double rsi = RSI(14);
double price = Close[0];
if(rsi > 70){
lots = NormalizeDouble(AccountFreeMargin() / 1000 / MarketInfo(Symbol(), MODE_TICKSIZE), 2);
stop_loss = price – (price – MA(50)) * 1.5;
take_profit = price – (price – MA(50)) * 3;
ticket = OrderSend(Symbol(), OP_SELL, lots, Ask, 3, stop_loss, take_profit, “Sell Order”, MagicNumber, 0, Red);
}else if(rsi < 30){
lots = NormalizeDouble(AccountFreeMargin() / 1000 / MarketInfo(Symbol(), MODE_TICKSIZE), 2);
stop_loss = price + (MA(50) – price) * 1.5;
take_profit = price + (MA(50) – price) * 3;
ticket = OrderSend(Symbol(), OP_BUY, lots, Bid, 3, stop_loss, take_profit, “Buy Order”, MagicNumber, 0, Green);
}
其中,MA函数用于计算移动平均线的值;MagicNumber为交易请求的唯一标识符,可以用来识别不同的交易请求。
四、总结
本文介绍了MQL4语言的入门基础和常见的技术指标编写方法、交易模型及其应用。对于正在学习MQL4语言或想要将手工交易转变成程序化交易的投资者来说,这些知识都是非常有用的。需要注意的是,程序化交易虽然可以帮助我们更好地管理风险和获利,但也需要谨慎思考和实践。