MQL4是一种基于C语言的编程语言,用于编写MetaTrader 4平台上的交易策略和指标,是交易自动化和程序化交易的重要工具。本文将深入浅出地介绍MQL4编程语言的基本语法和常用函数,帮助初学者了解如何编写简单的交易策略和指标。
一、MQL4编程语言基础
1. 变量和数据类型
在MQL4中,变量由变量名和数据类型组成。MQL4支持的数据类型包括整型(int)、双精度浮点型(double)、布尔型(bool)、字符串型(string)等。例如:
int ma_period = 20; //定义整型变量ma_period,并赋值为20
double stop_loss = 1.235; //定义双精度浮点型变量stop_loss,并赋值为1.235
bool buy_signal = true; //定义布尔型变量buy_signal,并赋值为true
string symbol = “EURUSD”; //定义字符串型变量symbol,并赋值为”EURUSD”
2. 运算符和表达式
MQL4支持常见的算术运算符(+、-、*、/)、比较运算符(<、>、<=、>=、==、!=)、逻辑运算符(&&、||、!)等。表达式可以由常量、变量、运算符组成。例如:
double a = 1.2, b = 0.8;
double c = a + b; //c的值为2.0
bool d = (a > b) && (a + b == 2.0); //d的值为true
3. 控制结构
MQL4支持常见的控制结构,包括if语句、for循环语句、while循环语句、switch语句等。例如:
int i;
for(i=0; i<10; i++){
print(i);
} //输出0到9的整数
int j = 0;
while(j<5){
j++;
} //执行5次
bool flag = true;
if(flag){
print(“flag is true”);
}else{
print(“flag is false”);
} //输出”flag is true”
二、常用函数
MQL4提供了丰富的内置函数,包括交易函数、技术指标函数、时间日期函数、字符串处理函数等。以下是一些常用的函数。
1. 交易函数
MQL4提供了一系列交易函数,用于进行订单的开仓、平仓、修改等操作。例如:
bool buy = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, Bid-30*Point, Bid+30*Point, “buy”, MagicNumber, 0, Blue);
上述代码使用OrderSend函数进行了买入操作。其中,Symbol()表示当前交易品种;OP_BUY是订单类型为买单;1表示买入手数为1手;Ask表示当前卖价;3表示设置的止损位为3个点;Bid-30*Point表示设置的止盈位;”buy”是订单注释;MagicNumber是魔术数字,用于标识当前订单;0表示未设置追踪止损;Blue表示订单颜色为蓝色。
2. 技术指标函数
MQL4内置了丰富的技术指标函数,包括移动平均、MACD、RSI等。例如:
double ma = iMA(Symbol(), 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
上述代码使用iMA函数计算了当前股票收盘价的20日简单移动平均。其中,Symbol()表示当前交易品种;0表示当前图表周期;20表示计算的移动平均值的周期;0表示应用到Close价格序列中;MODE_SMA表示计算简单移动平均;PRICE_CLOSE表示以收盘价为基准;0表示从当前柱数开始计算。
3. 时间日期函数
MQL4提供了时间日期处理函数,例如:
datetime now = TimeCurrent(); //获取当前时间
int day = TimeDayOfWeek(now); //获取今天是星期几
上述代码使用TimeCurrent函数获取当前时间,并使用TimeDayOfWeek函数获取今天是星期几。
4. 字符串处理函数
MQL4提供了字符串处理相关函数,例如:
string s = “Hello, world”;
int n = StringLen(s); //获取字符串长度
string sub = StringSubstr(s, 0, 5); //获取子字符串”Hello”
上述代码使用StringLen函数获取了字符串s的长度,使用StringSubstr函数获取了子字符串”Hello”。
三、编写交易策略和指标
在掌握了MQL4的基础语法和常用函数后,我们可以开始编写简单的交易策略和指标,例如:
1. 移动平均线策略
通过计算股票收盘价的短期和长期移动平均线,判断股票的走势,根据交叉情况进行买卖操作。
int ma_short = iMA(Symbol(), 0, 10, 0, MODE_SMA, PRICE_CLOSE, 0); //计算10日简单移动平均
int ma_long = iMA(Symbol(), 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0); //计算20日简单移动平均
if(ma_short > ma_long){
//当短期移动平均线上穿长期移动平均线时执行买入操作
}else if(ma_short < ma_long){
//当短期移动平均线下穿长期移动平均线时执行卖出操作
}
2. RSI指标策略
根据RSI指标是否处于超买或超卖状态,进行相应的买卖操作。
double rsi = iRSI(Symbol(), 0, 14, PRICE_CLOSE, 0); //计算14日RSI指标
if(rsi > 70){
//当RSI指标大于70时执行卖出操作
}else if(rsi < 30){
//当RSI指标小于30时执行买入操作
}
3. 自定义指标
除了使用MQL4内置的指标函数外,还可以自定义指标函数。例如,自定义一个计算股票收盘价在一段时间内的方差的指标函数:
double variance(int period){
double sum = 0, sq_sum = 0;
for(int i=0; i<period; i++){
sum += Close[i];
sq_sum += Close[i]*Close[i];
}
double mean = sum/period;
double var = sq_sum/period – mean*mean;
return var;
}
上述代码定义了一个计算方差的函数variance,并在其中使用了Close数组(表示收盘价数组)。
四、总结
MQL4是交易自动化和程序化交易的重要工具,编写交易策略和指标需要深入了解MQL4编程语言的基础语法和常用函数。本文简要介绍了MQL4的变量和数据类型、运算符和表达式、控制结构、常用函数等,并给出了几个简单的交易策略和指标的示例。希望对初学者对MQL4编程有所帮助。