MQL5语法基础(三)

MQL5语法基础(三)

整型数据

在MQL5中整数有11个类型,如果逻辑程序需要,一些类型能与另一些类型一起使用,但是在此 种情况下,要记住类型转换规则。

下面列表中显示了每一类型的特性,此外,每一类型的最后一列均与C++程序类型相同。

类型字节大小最小值最大值C++类比
char1-128127char
uchar10255unsigned char, BYTE
bool10(false)1(true)bool
short2-3276832767short,wchar_t
ushort2065635unsigned short, WORD
int4-21474836482147483647int
uint404294967295unsigned int,DWORD
color4-116777215int,COLORREF
long8-92233720368547758079223372036854775807_int64
ulong8018446744073709551615unsigned_int64
datetime80(1970.01.010:00:00)32535244799 (3000.12.31 23:59:59)_time64_t

整型值也可视为数字常数,颜色值和,日期时间值,字符常量 和计数 。

字符型,短整型,整型和长整型

  • char
    字符型 在内存里存储1字节( 8位元组),允许二进制记录法2^8=256表达值。 字符型包括正值和负值,范围在-128-127之间。
  • uchar
    无字符型 和字符型一样,也占据1字节内存,但与之不同的是,它只有正值。最小值是0,最大值是255无字符 型的第一个字母u是unsigned的缩写。
  • short
    短型 数据2字节( 16位元组),所以它可以表达等于2的值和16: 2^16 = 65536,因此短型还是一个符号,包括正值和负值,范围在-32768到32767之间。
  • ushort
    无符短型是ushort,也占用2字节,最小值是0,最大值是65535。
  • int
    整型占用4字节内存( 32元组),最小值是-2147483648,最大值是2147483647。
  • uint
    无符号整型就是uint。它占用4字节内存,区间在0到4 294 967 295之间。
  • long
    长型占用8字节( 64元组),最小值是-9223372036854775808,最大值是9223372036854775807。
  • ulong
    无符长型也占用8字节,能存储从0到18446744073709551615之间的值。

示例:

 char ch=12;
 short sh =-5000;
 int in=2445777;

无符长型不代表短型的负值,建立负值会导致意外的结果,该脚本会无限循环:

//---无限循环
void OnStart()
{
uchar u_ch;
for(char ch= -128;ch<128;ch++)
{
u_ch+ch;
Print("ch=",ch,"u_ch=",u_ch);
}
}

正确的转化是:

void OnStart()  
{   
uchar  u_ch;
   for(char ch=-128;ch<=127;ch++)    
    {      
      u_ch=ch;     
      Print("ch = ",ch," u_ch = ",u_ch);     
      if(ch==127) break;  
    } 
 }

结果:

 ch= -128  u_ch= 128 
 ch= -127  u_ch= 129
 ch= -126  u_ch= 130  
 ch= -124  u_ch= 132  
 ch= -123  u_ch= 133  
 ch= -121  u_ch= 135  
 ch= -119  u_ch= 137 
 ch= -117  u_ch= 139  
 ch= -115  u_ch= 141  
 ch= -113  u_ch= 143  
 ch= -111  u_ch= 145 
     ...

示例

//负值不能存储在无符类型中
uchar u_ch=-120;
ushort u_sh=-5000;
uint u_in=-401280;
十六进制:数字0-9,字母a-f,或A-F表示值10-15,从0x或0X开始。

示例

0x0A, 0x12, 0X12, 0x2f, 0xA3, 0Xa3, 0X7C7 

对于整型变量,值可以使用B前缀以二进制格式设置。例如,您可以编码交易时间的工作小时 为int类型变量并根据所需的算法使用他们的信息:

//+------------------------------------------------------------------+ 
//| 脚本程序开始函数                                                | 
//+------------------------------------------------------------------+ 
void OnStart()  
{ 
//--- 设置 1 为工作小时和 0 为非工作小时   
  int AsianSession   =B'111111111'; // 亚洲时间从 0:00 到 9:00   
  int EuropeanSession=B'111111111000000000'; // 欧洲时间 9:00 - 18:00   
  int AmericanSession =B'111111110000000000000011'; // 美洲时间 16:00 - 02:00 
  //--- 派生时间数值   
  PrintFormat("Asian session hours as value =%d",AsianSession);  
  PrintFormat("European session hours as value is %d",EuropeanSession);  
  PrintFormat("American session hours as value is %d",AmericanSession); 
    //--- 现在让我们展示时间工作小时的字符串表示   
  Print("Asian session ",GetHoursForSession(AsianSession));  
  Print("European session ",GetHoursForSession(EuropeanSession));  
  Print("American session ",GetHoursForSession(AmericanSession));  
   //--  } 
//| 返回时间工作小时为字符串                                       | 
//+------------------------------------------------------------------+ 
string GetHoursForSession(int session)  
{ 
//--- 若要检查,使用AND比特操作并左移1比特<<=1 
//--- 从最小比特开始检查   
int bit=1;   
string out="working hours: "; 
//--- 从零开始检查全部24比特并最高到23   
for(int i=0;i<24;i++)     
  {      
  //--- 总共接收的比特数      
  bool workinghour=(session&bit)==bit;      
  //--- 添加小时数到嘻嘻      
  if(workinghour )out=out+StringFormat("%d ",i);       
  //--- 左移1比特检查下一个的值      
  bit<<=1;     
  }  
  //--- 结果字符串    
  return out;   
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值