在外汇交易和期货交易中,自动化交易已经成为越来越流行的选择。MQL4是MetaTrader 4平台上使用的编程语言,并且具有编写高质量交易策略的能力。在本文中,将有28个实例来教你如何使用MQL4编写高质量交易策略。
一、如何开始编写MQL4交易策略
在开始编写MQL4交易策略之前,请确保你已经安装了MetaTrader 4平台和MetaEditor编辑器。接下来,按照以下步骤进行:
-
打开MetaEditor编辑器
-
选择“新建文件”并命名该文件
-
选择“Expert Advisor”作为模板,并填写必要的信息
-
编写代码
-
编译代码并运行策略
二、实现技术指标
技术指标是以图形或数字形式表示的市场统计性数据,对于决定买入或卖出有很大的帮助。下面我们介绍如何使用MQL4实现不同的技术指标。
- 移动平均线
移动平均线是计算一定时间范围内价格的平均值,并将该值用于显示价格趋势的指标。以下是一个使用简单移动平均线计算并绘图的示例:
double ma[]; // MA数组
int ma_handle; // MA句柄
int start()
{
int counted_bars = IndicatorCounted();
int limit = Bars – counted_bars;
if(counted_bars > 0){
limit–;
}
for(int i = limit; i >= 0; i–){
ma[i] = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_CLOSE, i);
}
ma_handle = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_CLOSE);
return(0);
}
这段代码使用iMA()函数计算了简单移动平均线并将结果存储在ma数组中。iMA()函数有以下参数:Symbol、Period、MAPeriod、MAShift、MAType、Applied_Price和Shift。在上面的示例中,设置Symbol值为NULL和Period值为0,表示我们要计算的是当前的图表;MAType设置为MODE_SMA表示使用简单移动平均线。
- RSI指标
RSI指标表示相对强弱指数,用于衡量市场超买或超卖程度。以下是一个使用MQL4计算RSI并绘制指标线的示例:
double rsi[];
int rsi_handle;
int start(){
int counted_bars = IndicatorCounted();
int limit = Bars – counted_bars;
if(counted_bars > 0){
limit–;
}
for(int i = limit; i >= 0; i–){
rsi[i] = iRSI(NULL, 0, 14, PRICE_CLOSE, i);
}
rsi_handle = iRSI(NULL, 0, 14, PRICE_CLOSE);
return(0);
}
这段代码使用iRSI()函数计算并绘制了RSI指标。iRSI()函数有以下参数:Symbol、Period、RSIPeriod、Applied_Price和Shift。在上面的示例中,RSIPeriod设置为14,表示我们要计算过去14个数据点的相对强弱。
- Bollinger bands指标
Bollinger bands指标用于衡量价格变动范围,帮助确定买入和卖出时机。以下是一个使用MQL4计算并绘制布林带指标的示例:
double up[];
double low[];
double mid[];
int bollinger_handle;
int start(){
int counted_bars = IndicatorCounted();
int limit = Bars – counted_bars;
if(counted_bars > 0){
limit–;
}
for(int i = limit; i >= 0; i–){
up[i] = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_UPPER, i);
low[i] = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_LOWER, i);
mid[i] = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_MAIN, i);
}
bollinger_handle = iBands(NULL, 0, 20,2.0 , 0, PRICE_CLOSE);
return(0);
}
这段代码使用iBands()函数计算并绘制了布林带指标。iBands()函数有以下参数:Symbol、Period、MAType、MA_period、MA_shift、Applied_price、bands_shift和bands_deviation。在上面的示例中,设置MAType值为MODE_MAIN表示计算主要的三个线,而bands_deviation设置为2.0表示标准偏差系数为2.0。
三、两个例子:均线交叉策略和RSI超卖买入策略
- 均线交叉策略
均线交叉策略是一种基于移动平均线交叉的交易策略,是MQL4编程最常用的交易策略之一。下面是一个使用MQL4编写的均线交叉策略示例:
int start()
{
double ma_5 = iMA(NULL, PERIOD_CURRENT, 5, 0, MODE_EMA, PRICE_CLOSE, 0);
double ma_10 = iMA(NULL, PERIOD_CURRENT, 10, 0, MODE_EMA, PRICE_CLOSE, 0);
double ma_20 = iMA(NULL, PERIOD_CURRENT, 20, 0, MODE_EMA, PRICE_CLOSE, 0);
if((ma_5 > ma_10) && (ma_10 > ma_20)){
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0);
}
if((ma_5 < ma_10) && (ma_10 < ma_20)){
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0);
}
return(0);
}
在上面的示例中,我们使用了iMA()函数计算出了5日、10日和20日的指数移动平均线。然后我们使用if语句来判断哪条线在另外两条线上方或下方。如果5日移动平均线上穿10日移动平均线和20日移动平均线,那么我们将会执行一个买入操作。相反地,如果5日移动平均线下穿10日移动平均线和20日移动平均线,那么我们将会执行一个卖出操作。
- RSI超卖买入策略
RSI超卖买入策略是一种基于RSI指标的交易策略,用于识别市场中的超买和超卖区域。以下是一个使用MQL4编写的RSI超卖买入策略示例:
int start()
{
double rsi = iRSI(NULL, 0, 14, PRICE_CLOSE, 0);
if(rsi < 30){
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0);
}
return(0);
}
在上面的示例中,我们使用了iRSI()函数计算RSI指标,并依据指标值开启买入交易操作。如果RSI低于30,则我们将执行一个买入操作。
四、总结
在本文中,我们介绍了使用MQL4编写高质量交易策略的方法,涉及了技术指标、均线交叉策略和RSI超卖买入策略。拥有这些工具和示例可以使得交易者更加容易地创建自己的交易策略,但是需要谨记,应充分测试您的策略