date类型只取年月日_MQL5从入门到精通【第二章】变量与数据类型(一)

d79d0d98f2be126b83069ce3852d6ab6.png

文档日期:2019年12月3日

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

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

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

MQL5的几种数据类型。

# 整型 integer type

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

int count;
int myNum = 1;
int order_num = 120;
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

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

string myString = "Ths is a string";

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

string myQuote = "We are "excaping" double quotes";
Print(myQuote);
// 输出 We are "excaping" double quotes

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

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

如何连接多个字符串?

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

string insert = "concatenated";
string myConcat = "This is an example of a " + insert + " string.";
Print(myCOncat);
// 输出 This is an example of a concatenated string.

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

string newString;
string insert = "concatenated";
StringConcatenate(newString,"This is another example of a ", insert, " string");
Print(newString);
// 输出: This is another example of a concatenated string.

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

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

string myMultiline = "This is a multi-line string. "
"These lines will be joined together.";
Print(myMultiline);
// 输出: This is a multi-line string. These lines will be joined together.

# 布尔类型 boolean type

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

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

bool myBool = true;
Print(myBool);
// 输出: true

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

// 测试默认值
bool myBool;
Print(myBool);
// 输出: false

// 不为零的整数,判定为真
myBool = 5;
if(myBool == true) Print("myBool is true");
// 输出: myBool is true

# 颜色类型 color type

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

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

下面是一些简单的例子。

color lineColor = clrRed; // 被系统颜色常量初始化

// RGB值初始化,也就是红色,r=255,g=0,b=0
// 以大写字母C开头,单引号包围
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。举个例子:

datetime myDate = D'2019.04.05 06:07:08';

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

datetime myDate = D'2019.01.02 03:04'; // 仅有时分
datetime myDate = D'2019.01.02 03'; // 仅有小时
datetime myDate = D'2019.01.02'; // 仅有日期

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

datetime myDate = D''; // 默认为当先日期时分秒
datetime myDate = D'02:08'; // 系统判定为当前日期 + 02点08分。注意不是2分8秒。

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

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

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

datetime myDate = __DATE__;
datetime myDate = D'';
// 上述两种表示方式均返回形如 2019.03.04 00:00格式的日期时间数据

datetime myDate = __DATETIME__;
// 输出编译执行时间,2019.03.04 05:06:07

# 常量

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

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

#define COMPANY_NAME "Github.Inc"

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

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

Print("I am working in ", COMPANY_NAME);
// 输出 I am working in Github.Inc

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

const int cVar = 43;
cVar = 42; // 编译报错,常量值不可修改。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值