当前位置:首页 > 量化|编程

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

3年前 (2023-07-21)量化|编程风控哥

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

111RO.png

人的思维正常情况就是“如果肚子饿了那么吃饭”,后半句“否则不吃”通常都是省略掉的。但是,计算机的逻辑,就需要我们完整的表达清楚,否则计算机就之后执行一半内容,甚至出现运行错误。

当然,所有的计算机语言都包含两个语句,一个是条件(if)语句一个是循环(for)语句。If语句顾名思义,满足条件就执行,否则就跳过。 for语句顾名思义,就是在一定条件下反复执行规定的指令,直到条件不满足。我们再次看上图所展示内容,你会发现,在人的逻辑之下,虽然重复执行这个逻辑是隐藏起来的,但是我们人就会自动判断自动执行。但是,计算机的逻辑中,就需要我们把执行次数也要完整的考虑进去,是一直这样执行,还是只执行一次,还是说执行两次之后不执行(过午不食),跳过一次之后在继续执行。

2、学习量化编程还需要先从宏观上掌握组成EA交易程序的框架。也就是说先从一个大的视角去理解EA的运行逻辑,在微观入手沿着框架的指引,一步步完成量化交易程序的编程工作。通常情况下,一个标准的量化交易程序EA5个部分组成,分别是变量预定义、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%平仓等等,因此我们编写程序重点就在时间和价格这二维空间中。

111.png

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

标签: MT4量化编程
分享给朋友:

“MQL4量化编程学习笔记(1)” 的相关文章

【MT5】周期性 定时发送报告 函数

【MT5】周期性 定时发送报告 函数

程序功能说明:1.时间设置:通过输入参数DailyReportTime设置每日报告时间,格式为"HH:MM"…

【MT5】创建箭头标识函数 OBJ_ARROW

【MT5】创建箭头标识函数 OBJ_ARROW

调用函数方法:crearFlecha("Bear_Dominanat"+IntegerToString(i),time[i],high[i],clr,226,ANCHOR_BOTTOM,300); crearFlecha("Bull_Dominanat"+I…

【MT5】创建箭头标识函数 DRAW_ARROW

【MT5】创建箭头标识函数 DRAW_ARROW

这种方法的核心是将箭头视为与K线数据一一对应的可视化信号,是构建自定义指标的标准方式。工作原理:在自定义指标中,你需要声明一个指标缓冲区(Array),并将其与一个绘图类型为 DRAW_ARROW的图形关联。当该缓冲区在某个K线索引的值不为空(非…