Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MQL5从入门到精通「第二章」变量与数据类型(一)

MQL5从入门到精通「第二章」变量与数据类型(一)

作者头像
程序员小助手
发布于 2020-04-08 03:17:20
发布于 2020-04-08 03:17:20
1.9K010
代码可运行
举报
文章被收录于专栏:程序员小助手程序员小助手
运行总次数:10
代码可运行

欢迎转载,请注明出处。

变量是程序必备元素。我们主要讲一下,程序的基础,数据结构的基础,数据类型。因为这是底层的知识,与计算机硬件息息相关。

MSQL5作为一个C++的子语言,是强类型的。强类型,是相对应弱类型而言。那么,弱类型语言变量有什么特色呢。

比如现在人工智能大数据,使用较多的python。就是弱类型语言,同时也是一门解释型语言。就是有一个解释器,读一句,解释一句,运行一句。这样繁琐,效率自然不能与编译型语言相比。

MQL5的几种数据类型。

# 整型 integer type

整数,很好理解。就是自然数,有正有负。计算机如何表示呢,就是几个字节存储空间。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int count;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int myNum = 1;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int order_num = 120;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int trend_direction = -1;

变量声明时,可以有默认值,可以没有。比如上述count变量,无初始值,那么编译器将其默认值设置为系统默认的0。

MQL4只有int型,而MQL5则区分出4种类型。因为有正有负,是有符号数,最高一位0为正,1为负。

  • char - 一个字节,所以是 -128到127.【2^7】
  • short - 两个字节。所以是 -32768到32767.【2^15】
  • int - 四个字节,所以是 -2,147,483,648 到 2,147,483,647.
  • long - 长整形,八个字节。数据范围更大,-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807.

这好几种类别,写程序的时候,用哪个?因为我们的MQL5程序中,用的最多的还是 int和long。这两个用的最频繁。char和short如果你愿意,用起来也是没错的。

上面的四种,都是有正有负。还有对应的四个,均是正整数,前头冠以 unsigned 字样。

  • uchar - 一个字节。2^8
  • ushort - 两个字节。2^16
  • uint - 四个字节。2^32
  • ulong - 八个字节。2^64

实际程序中,你几乎很少用到无符号数,大多数场景,都是有正有负的整数。但,不妨碍MQL5提供给我们了。

# 实数 real type

带小数点的那些数。根据精度不同,有两种类型。

  • float - 浮点数。四个字节。精确到7位小数点。
  • double - 双精度。八个字节。精确到小数点后15位。

工程实践中,我们推荐double型。MQL5函数内经常使用。float型常用语存储和处理大型的实数填充的数组。

# 字符串类型 string type

就是字面意思,一串字符。包含在双引号(“”)之内。下面是字符串类型的声明语句。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string myString = "Ths is a string";

注意是双引号。如果你的字符串内本身包含了双引号,要用右斜杠\转义一下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string myQuote = "We are \"excaping\" double quotes";
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Print(myQuote);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 输出 We are "excaping" double quotes

那如果我的字符串内本身要输出右斜杠\呢?很简单,给右斜杠\也加个转义\\。不再写示例。

当然平常通用的那些特殊转义符,同样有用。比如用于换行的\n,用于对齐四个空格制表符的tab \t。也都有用。

如何连接多个字符串?

使用+操作符。举例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string insert = "concatenated";
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string myConcat = "This is an example of a " + insert + " string.";
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Print(myCOncat);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 输出 This is an example of a concatenated string.

MQL5也提供了专门的函数 StringConcatenate() 用于连接多个字符串,效果是一样的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string newString;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string insert = "concatenated";
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
StringConcatenate(newString,"This is another example of a ", insert, " string");
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Print(newString);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 输出: This is another example of a concatenated string.

写的时候注意函数的参数位置,还有参数数据类型就可以了。

MQL5给出了相对宽松的字符串赋值方式。如果你有多行字符串输出,在meta editor内直接换行就可以了,程序会将其连为一体。只是注意,没有换行符。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string myMultiline = "This is a multi-line string. "
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"These lines will be joined together.";
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Print(myMultiline);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 输出: This is a multi-line string. These lines will be joined together.

# 布尔类型 boolean type

布尔类型的数据仅有两个,true/false。要么真,要么假。我们在程序内用的比较多。

其实从实现上来讲,布尔类型其实是个整数类型。0表示false,1表示true。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bool myBool = true;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Print(myBool);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 输出: true

如果声明了布尔类型的变量,其初始值可不是true哦,而是 0 或 false。这一点大家要记住了。且,有一个特性,任何非零 non-zero 的值,在都判定为true。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 测试默认值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bool myBool;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Print(myBool);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 输出: false// 不为零的整数,判定为真
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myBool = 5;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(myBool == true) Print("myBool is true");
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 输出: myBool is true

# 颜色类型 color type

一般的编程语言课没这玩意儿。这是MQL5独有的哦。顾名思义,就是用来存颜色值的。颜色值可以是预定义好的颜色常量,RGB值,或者十六进制值。

巧了,这个独门秘技,在MQL5程序内用的超级多。我们从一个线性指示器,或者图表对象内获取的颜色值,就是color类型。翻阅全部的色值常量,参见MQL5手册。

下面是一些简单的例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
color lineColor = clrRed; // 被系统颜色常量初始化// RGB值初始化,也就是红色,r=255,g=0,b=0
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 以大写字母C开头,单引号包围
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
color lineColor = C'255,0,0'; // 十六进制的值color lineColor = 0xFF0000;

系统颜色常量里未定义的,我们使用RBG/十六进制数值定义。但是不便于记忆。编程中善用系统颜色常量你会发现非常有用。

# 日期时间类型 datetime type

该类型用于存储日期时间。在系统内,是使用unix时间戳的方式存储。什么是unix timestamp,就是从1970-1-1 00:00:00开始到现在的秒数。比如到当前,这个秒数一共经过了 1,575,116,508。

初始化该类型的变量,可以使用日期时间常量。开头冠以大写字母D,使用单引号包含。格式要求是 yyyy.mm.dd hh:mm:ss。举个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
datetime myDate = D'2019.04.05 06:07:08';

当然不写全也是支持的,至少包含年月日,像下面这些:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
datetime myDate = D'2019.01.02 03:04'; // 仅有时分
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
datetime myDate = D'2019.01.02 03'; // 仅有小时
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
datetime myDate = D'2019.01.02'; // 仅有日期

还有一些表示方式,赋值的时候获取当前日期时间,或者仅指定时分秒。系统编译的时候,默认就是当天。如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
datetime myDate = D''; // 默认为当先日期时分秒
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
datetime myDate = D'02:08'; // 系统判定为当前日期 + 02点08分。注意不是2分8秒。

MQL5有一些预定义好的时间日期常量。

  • __DATE__ 常量返回编译时日期。这与上例代码中 D'',返回相同的值。
  • __DATATIME__ 常量返回编译时日期时间

请记清楚,时间常量是前后双下划线。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
datetime myDate = __DATE__;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
datetime myDate = D'';
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 上述两种表示方式均返回形如 2019.03.04 00:00格式的日期时间数据datetime myDate = __DATETIME__;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 输出编译执行时间,2019.03.04 05:06:07

# 常量

常量顾名思义,就是值不会变化的标识符。变量可作用的地方,常量均可使用。常量也可重新复制,就像给变量赋值一样。

声明常量,两个途径。一个是使用预处理语句 #define。该语句防止在程序的头部。如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define COMPANY_NAME "Github.Inc"

#define标识符告诉编译器,这是一个常量声明。COMPANEY_NAME是符号,后边的是常量值。常量可以是任意数据类型。

预处理语句内声明的变量,可在程序全局内使用。你随时可调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Print("I am working in ", COMPANY_NAME);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 输出 I am working in Github.Inc

另一种声明变量的方式,是使用 const关键字。请记住,声明的常量,值不可修改。像下面这种用法编译报错:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const int cVar = 43;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cVar = 42; // 编译报错,常量值不可修改。

ok,上面就是MQL5内所有的数据类型,不多,也不算复杂,很多编程语言内都有的。很基础的知识,大家在写代码的时候,务必谨记这些,久而久之,养成习惯,可以让你站在编译器的角度排查问题哦。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小助手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MQL5从入门到精通【第二章】变量与数据类型(二)
我们讲了变量和数据类型,都是单个的变量,及其值。那么这个数组,是用来装载多个数据的一种结构。你可以把数组想象为一个数字列表,每个数字对应不同的值。可以从头按照数字遍历这个列表,并获取其相对应的值。
程序员小助手
2020/04/08
1.2K0
MQL5从入门到精通【第七章】MQL5程序结构
顶部,是预处理声明;接着是输入变量和全局变量。最后是函数,类,以及定义的程序处理器。
程序员小助手
2020/04/08
1.2K0
MQL5从入门到精通【第二章】变量与数据类型(四)
输入变量是MQL5中仅有的,可供用户修改数值的变量。这些变量可由交易配置,指示器配置,止损收益配置等等组成。这些变量展示在程序的属性窗口。
程序员小助手
2020/04/08
1.1K0
MQL5从入门到精通【第五章】函数function
讲完了数据类型,操作语句,接着我们把这些元素组合在一起使用。封装起来,成为函数。可供程序内调用,减少冗余代码,提高代码可维护性,降低程序复杂度。
程序员小助手
2020/04/08
1.7K0
MQL5从入门到精通【第二章】变量与数据类型(三)
枚举是特殊的整数类型,定义了一列常量,用于指代整数值。枚举类型,只有定义了才能使用,没定义了,你找不到它的值,报错!
程序员小助手
2020/04/08
1.2K0
go 从入门到精通(二)基本数据类型和操作符
一、文件名&关键字&标识符 所有go源码都是以.go结尾 标识符以字母或下划线开头,大小写敏感 下划线_是特殊标识符,用户忽略结果 保留关键字 导入包时可以设置别名 下面是保留关键字: 二、GO程序的
coders
2018/01/04
7550
go 从入门到精通(二)基本数据类型和操作符
golang基础(一)go的特点、数据类型以及变量的定义
静态类型语言:与动态类型语言刚好相反,它的数据类型检查发生在在编译阶段,也就是说在写程序时要声明变量的数据类型。C/C++、C#、Java都是静态类型语言的典型代表。
GH
2020/03/25
1.7K0
MQL5从入门到精通【第四章】(一)条件判断语句
程序的基础功能之一就是做判断。判断语句通过评估条件的真伪作出决定。MQL5中有三个条件判断语句:if - else,三目操作符,和switch - case语句。
程序员小助手
2020/04/08
1.1K0
Python:变量与数据类型
在 Python 中 变量命名规定,必须是大小写英文,数字和 下划线(_)的组合,并且不能用数字开头。
HLee
2021/03/02
1.1K0
Python:变量与数据类型
【Java】基础07:常量、变量和数据类型
顾名思义: 常量是指固定不变的数据 变量是指在程序中可以变化的量 一、常量 整数常量:所有的整数,比如0、100等 小数常量:所有的小数,比如0.1、3.58等 字符常量:单引号引起来,只能写一个字符,必须有内容(空格也是字符),比如‘a’、‘ ’、‘嘻’等 字符串常量:双引号引起来,可以写多个字符,也可以不写,比如”A“、”“、”HelloWorld“等 布尔常量:只有两个值,true(真)和false(假) 空常量:只有一个值(null) 实例: public class ConstantDem
刘小爱
2020/07/30
4410
【Java】基础07:常量、变量和数据类型
第一阶段-Java基础知识:【第二章 Java基础语法知识】
在我们开始讲解程序之前,命名规范是我们不得不提的一个话题,虽说命名本应该是自由的,但是仍然有一定的“潜规则”,通过你对命名的书写,别人一眼就能看出你是不是一个“行家”。我们先来看一下有哪些规则。
BWH_Steven
2019/08/09
1.2K0
Java 基础入门教程
Java 是由 Sun Microsystems(现已被 Oracle 收购)于 1995 年推出的编程语言,具有跨平台、面向对象、安全可靠等特点,广泛应用于企业级应用开发、Android 应用开发、大数据处理等领域。
小焱
2025/06/20
1920
Java 基础入门教程
【JavaSE】数据类型与变量
比如: System.Out.println("Hello World"); 语句,不论程序何时运行,输出的都是Hello World,其实"Hello World"就是字面常量。
用户11369558
2024/11/20
1270
【JavaSE】数据类型与变量
Swift基础语法(常量变量、数据类型、元组、可选、断言)
本文来自Swift中文开发组,感谢翻译者的分享。 本文将分几部分对Swift对ios的语法做讲解。本文为第一节,主要讲解基础语法。 常量和变量 常量和变量把一个名字(比如maximumNumberOfLoginAttempts或者welcomeMessage)和一个指定类型的值(比如数字10或者字符串"Hello")关联起来。常量的值一旦设定就不能改变,而变量的值可以随意更改。 声明常量和变量 常量和变量必须在使用前声明,用let来声明常量,用var来声明变量。下面的例子展示了如何用常量和变量来记录用户尝试
xiangzhihong
2018/02/05
2.2K0
知识改变命运 第二集:Java的数据类型与变量
在上节课HelloWorld程序中, System.Out.println(“Hello World”); 语句,不论程序何时运行,输出的都是Hello World,其实"Hello World"就是字面常量。常量即程序运行期间,固定不变的量称为常量,比如:一个礼拜七天,一年12个月等。
用户11319080
2024/10/17
2070
知识改变命运 第二集:Java的数据类型与变量
PL/SQL学习笔记-常量变量及数据类型初步
declare是声明部分 我在这个部分声明了varchar2类型的变量,名字叫mydata,内容是hellow world,长度是16个长度。 begin….end 部分是执行部分 我在这里调用了oracle已有的过程dbms_output.put_line,这个过程起到了打印的目的 执行完后就打印出了我刚才定义的变量。 注意PL/SQL与T-SQL一样是不区分大小写的 我是用pl/sql developer工具执行上述程序的(如果有必要以后介绍下oracle的安装,基本操作和相关工具) 下面贴两个图,看一下:
liulun
2022/05/09
4390
PL/SQL学习笔记-常量变量及数据类型初步
Python教程第2章 | 基本数据类型和变量
如果你是初学者,可能对函数不太了解,没关系,你先了解它的组成部分和作用就可以了,后面函数会详细说明。
仲君Johnny
2024/01/24
2730
Python教程第2章 | 基本数据类型和变量
PHP 基本数据类型
上篇教程,学院君给大家介绍了 PHP 中变量和常量的声明和使用,并且提到,PHP 是弱类型语言,在声明变量时,无需指定类型,变量值对应的数据类型会在运行时进行判断,所以虽然无需指定类型,但实际上还是有类型的,只不过这个判定工作交给了 PHP 底层引擎完成,这是以牺牲程序性能为代价换取开发效率和语言的简单性,所有的弱类型解释型语言,比如 Python、JavaScript 都是这么做的。
学院君
2020/05/27
2K0
Swift进阶二:基本数据类型相关
而在Objective-C中,如果没有特殊的指明,我们所声明的都是变量。可以通过如下几种方式来声明常量:
拉维
2020/07/20
9430
Swift进阶二:基本数据类型相关
Scala 基础 (二):变量和数据类型
Scala中的关键字合集: • package, import, class, object, trait, extends, with, type, for • private, protected, abstract, sealed, final, implicit, lazy, override • try, catch, finally, throw • if, else, match, case, do, while, for, return, yield • def, val, var • this, super • new • true, false, null
百思不得小赵
2022/12/01
9670
Scala 基础 (二):变量和数据类型
推荐阅读
相关推荐
MQL5从入门到精通【第二章】变量与数据类型(二)
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
加入讨论
的问答专区 >
职务职务职务职务职务职务擅长3个领域
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验