MQL5由简到繁系列一
前言
本系列文章适用于有一定mql5语言基础的人,或者你已经是一个程序员刚接触mql5这门语言,同时你还应该具备基础的交易知识,
在一系列文章里,我将一步一步的深入讲解,由简单实例到复杂ea.我会尽可能的将语句代码注释得更加详细,以便你能轻松的读懂代码,同时,希望你在学习的过程中,保持你的mql5帮助文档是打开的,以方便函数功能的查询和使用.
MQL5语言是什么?
这里我就不在阐述mql5是什么,如果你不了解这门语言的作用,那么之后的学习就是在浪费你的时间
MQL5的三种打印方式(Hello World!)
我们都知道,学一门语言的第一步就是,Hello World!
打开MeataEditor5,新建一个脚本程序
添加一行代码:#property script_show_inputs(脚本运行时弹出输入框)
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
#property script_show_inputs
//+------------------------------------------------------------------+
//| 脚本程序开始函数 |
//+------------------------------------------------------------------+
void OnStart() //程序运行的主函数,所有逻辑应该写在该函数中
{
//---
}
创建一个枚举类型,不要问我什么是枚举类型 ,百度解释很清楚,你有那个能力去理解它
enum ENUM_PRINT_MODE //包含三种打印方式,三种效果会在接下来中展示
{
PRINT = 0,
COMMENT = 1,
ALERT = 2
};
添加一个外部参数
input ENUM_PRINT_MODE printMode=PRINT; // 打印模式
现在将他们组合起来
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property script_show_inputs
enum ENUM_PRINT_MODE
{
PRINT = 0,
COMMENT = 1,
ALERT = 2
};
input ENUM_PRINT_MODE printMode=PRINT;
//---
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
}
运行脚本,看到下图你应该能够理解上面代码的含义.
接下来我们将定义一个函数,来控制打印的模式,以下代码中的所有函数和常量都能在mql5的帮助文档中查询到详细作用.
void PrintSymbolProperties()
{
//----定义需要输出的内容
string symb_symbol=Symbol();// 交易品种
int symb_digits=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); // 小数点位数
int symb_spread=(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);// 买价和卖价之间的差异 (点差)
int symb_stoplevel=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);// 止损级别
double symb_ask =SymbolInfoDouble(_Symbol,SYMBOL_ASK);// 买价
double symb_bid =SymbolInfoDouble(_Symbol,SYMBOL_BID);// 卖价
//----根据不同的打印方式,输出以上信息
// 如果打印到日志中
if(printMode==PRINT)
{
Print("交易品种: ",symb_symbol,"\n",
"小数位数: ",symb_digits,"\n",
"点差: ",symb_spread,"\n",
"止损级别: ",symb_stoplevel,"\n",
"买价: ",symb_ask,"\n",
"卖价: ",symb_bid
);
}
//---
// 如果打印到图表上
if(printMode==COMMENT)
{
int mb_res=-1; // 对话框中选择选项的变量
//---
Comment("交易品种: ",symb_symbol,"\n",
"小数位数: ",symb_digits,"\n",
"点差: ",symb_spread,"\n",
"止损级别: ",symb_stoplevel,"\n",
"买价: ",symb_ask,"\n",
"卖价: ",symb_bid
);
//---
// 打开一个对话框
mb_res=MessageBox("您想要删除图表中的注释吗?",NULL,MB_YESNO|MB_ICONQUESTION);
//---
// 如果点击了 "Yes", 删除图表中的注释
if(mb_res==IDYES) { Comment(""); }
//---
return;
}
//---
// 如果打印到提醒窗口
if(printMode==ALERT)
{
Alert("交易品种: "+symb_symbol+"\n",
"小数位数: "+IntegerToString(symb_digits)+"\n",
"点差: "+IntegerToString(symb_spread)+"\n",
"止损级别: "+IntegerToString(symb_stoplevel)+"\n",
"买价: "+DoubleToString(symb_ask,_Digits)+"\n",
"卖价: "+DoubleToString(symb_bid,_Digits)
);
}
}
现在我们执行看三种打印结果
PRINT的输出结果:
COMMENT的输出结果:(每一次输出将覆盖上一次的输出结果)
ALERT的输出结果:
结语
可能有程序基础的人会很容易理解上面代码的作用,如果你对上面代码抱有疑问,那么你应该先去学习一门编程语言的基础,mql5与C和C++的语法相似,我建议你从C语言的基础开始学习,直到你能明白上述代码的含义.