MQL4量化编程学习笔记(1)

1、无论学习哪种计算机语言,都要求我们必须有良好的逻辑思维能力。同时,我们也要深知人的逻辑思维与计算机的逻辑思维还是有很大不同的,其中最重要的是,人的逻辑思维会时常自动省略或隐藏其中的一部分内容,但是计算机逻辑不能省略和隐藏。因此从这一点来看,计算机的逻辑才是真正的完整的逻辑,而人的逻辑很可能就省略或隐藏之后的。我们可以通过下面的内容来理解人的逻辑与计算机的逻辑的不同。

人的思维正常情况就是“如果肚子饿了那么吃饭”,后半句“否则不吃”通常都是省略掉的。但是,计算机的逻辑,就需要我们完整的表达清楚,否则计算机就之后执行一半内容,甚至出现运行错误。
当然,所有的计算机语言都包含两个语句,一个是条件(if)语句一个是循环(for)语句。If语句顾名思义,满足条件就执行,否则就跳过。 for语句顾名思义,就是在一定条件下反复执行规定的指令,直到条件不满足。我们再次看上图所展示内容,你会发现,在人的逻辑之下,虽然重复执行这个逻辑是隐藏起来的,但是我们人就会自动判断自动执行。但是,计算机的逻辑中,就需要我们把执行次数也要完整的考虑进去,是一直这样执行,还是只执行一次,还是说执行两次之后不执行(过午不食),跳过一次之后在继续执行。
2、学习量化编程还需要先从宏观上掌握组成EA交易程序的框架。也就是说先从一个大的视角去理解EA的运行逻辑,在微观入手沿着框架的指引,一步步完成量化交易程序的编程工作。通常情况下,一个标准的量化交易程序EA由5个部分组成,分别是变量预定义、EA初始化程序、EA结束程序、EA执行程序和自定义变量。
#property copyright "版权所有 2023, 九鲤量化"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
}
//+------------------------------------------------------------------+在int OnInit()的前面是EA变量定义区,当EA调入到图标时,需要做预设置的参数都在这里定义。
以int OnInit()开始的程序段,表示EA在调用时,首先执行,之后不再执行。
以void OnDeinit()开始的程序段。表示EA关闭时,需要执行的代码,比如删除图表中的线条等等操作。
以void OnTick()开始的程序段,表示市场每出现一个报价就热行一次代码。这是A的核心部分,通常用来获取交易信号,执行交易指令。
3、学习量化编程还需要了解坐标系的概念。自动交易的执行是需要准确定位的,因此就必须建立起明晰坐标系的概念。
下面K线图上的横坐标既可以是市场时间也可以是K线序号,在编程的时候通常使用K线序号,当然,纵坐标就是K线代表的价格了。但是,坐标系实际是三维的,即时间、价格、成交量,第三维成交量通常在风险控制策略中考虑,比如出现亏损加大开仓量,或者亏损20%平仓等等,因此我们编写程序重点就在时间和价格这二维空间中。

建立起正确的坐标系概念是编程的基础,因为你即将对技术指标进行分析,计算开仓平仓信号,甚至在图表上画线做标记。而这些动作,都需要坐标系的支撑。



