MQL4 的語法類似于C語言,除了以下這些特點:
沒有地址運算符;
沒有 do … while 語句;
沒有 goto … 語句;
沒有 [條件][表達式 1]:[表達式 2] 語句;
沒有復合數(shù)據(jù)類型 (結構);
不允許復合賦值,例如:val1=val2=0; arr[i++]=val; cond=(cnt=OrdersTotal)>0; 等;
邏輯表達式的計算完成前不可以提前終止。
代碼格式
空格建、Tab鍵、換行鍵和換頁符都可以成為代碼排版的分隔符,你能使用各種符號來增加代碼的可讀性。
注釋 多行注釋使用 /* 作為開始, 到 */ 結束,在這之間不能夠嵌套使用。
單行注釋使用 // 作為開始, 到新的一行結束,可以被嵌套到多行注釋之中。
(注釋允許空行和空白)
示例:
// 單行注釋
/多行 注釋 // 嵌套的單行注釋 注釋結束 */
標識符
用來給變量、函數(shù)和數(shù)據(jù)類型進行命名,長度不能超過31個字節(jié) 可以使用數(shù)字0-9、字母大寫A-Z和小寫a-z(大小寫有區(qū)分)及下劃線(_)。
但首字母不可以是數(shù)字,也不能和保留字沖突. 示例:
// NAME1 namel Total_5 Paper
保留字
下面列出的標識符是系統(tǒng)自用的保留字,每個保留字都有其特定含義,用戶不能使用以下任何保留字進行命名 。
bool color datetime double int string void
extern static
continue default else break case for if return switch while
false true
數(shù)據(jù)類型
概述:
任何程序都要依靠數(shù)據(jù)來運行,數(shù)據(jù)因目的不同可以有不同的類型。比如,數(shù)組可以存取整型數(shù)據(jù),價格可以用浮點型雙精度數(shù)表示。在MQL4中沒有專門用來表示貨幣值的數(shù)據(jù)類型。
不同的數(shù)據(jù)類型有不同的處理速度,整型數(shù)據(jù)是最快的。處理雙精度的數(shù)據(jù)需要使用特殊的協(xié)處理器,所以,處理浮點型數(shù)據(jù)比較復雜,它比處理整型數(shù)據(jù)要慢一些。字符串處理速度是最慢的,因為它要分配/重分配計算機動態(tài)內(nèi)存。
主要的數(shù)據(jù)類型如下:
整型數(shù)據(jù) (int)
布爾型數(shù)據(jù) (bool)
字符型數(shù)據(jù) (char)
字符串型數(shù)據(jù) (string)
浮點型數(shù)據(jù) (double)
顏色數(shù)據(jù) (color)
日期時間數(shù)據(jù) (datetime)
其中color型和datetime型僅僅是為了讓我們更清楚地區(qū)分圖表內(nèi)容和輸入這些參數(shù)時才有意義,這些參數(shù)可在智能交易的屬性標簽和自定義指標“輸入”標簽中設置。color和datatime型數(shù)據(jù)可換作整數(shù)來表示。int和double型統(tǒng)稱為數(shù)值型。
在表達式運算中使用了隱式類型轉換(自動轉換) (由低到高轉換類型的優(yōu)先級)。
int (包括:bool, color, datetime);
double;
string;
在運算完成之前(除數(shù)據(jù)己被定義的),數(shù)據(jù)自動轉換為高優(yōu)先級類型。當賦值操作完成時,數(shù)據(jù)會轉換成目標數(shù)據(jù)類型。
int i= 1/2; // 未轉換,結果為 0
int i= 1/2.0; // 表達式中有浮點型數(shù)據(jù),但會自行轉換成整型數(shù)據(jù),結果為 0
double d= 1.0/2.0; // 無轉換,結果為 0.5
double d= 1/2.0; // 表達式計算的結果是浮點型數(shù)據(jù),和目標類型一樣,結果為 0.5
double d= 1/2; // 表達式是整型數(shù)據(jù)形式的計算,然后被定義為浮點型數(shù)據(jù),結果為 0.0
string s= 1.0/8; // 表達式轉成雙精度型,再轉成字符串型,結果為"0.12500000"(含10個字符)
string s= NULL; // 整型常量轉成字符串型,結果為"0"(含1個字符)
string s= "Ticket #"+1234; // 表達式轉成字符串型,與目標類型相同,結果為"Ticket #12345"
整型常量
十進制: 數(shù)字0-9; 0不能作為第一個字母
示例: 12, 111, -956 1007
十六進制:
用數(shù)字0到9 來表示十六進制的0到9 用字母a到f(或A到F) 來表示10-15;
表達十六進制數(shù)時 以0x或者0X作為開始。
示例:
0x0A, 0x12, 0X12, 0x2f, 0xA3, 0Xa3, 0X7C7
注意:整型數(shù)據(jù)占用 4 字節(jié)的內(nèi)存空間,其數(shù)值范圍介于 -2147483648 ~ 2147483647 之間。如果超出這個范圍,則視為無效。
字符常量
任何帶單引號的單一字符或者類似 ‘\x10′ 形式的十六進制ASCII 碼都是整型的字符常量。
字符常量中包含一些特殊字符,如單引號(‘)、雙引號(“)、問號(?)、反斜線()和控制符,必須以反斜線開頭()轉意表示,如下表所示:
換行符NL (LF) \n
制表符 HT \t
回車符CR \r
反斜線\ \
單引號' '
雙引號" "
十六制 ASCII碼 hh \xhh
以上字符如果不經(jīng)過反斜杠進行轉意 則將不能被使用
示例:
int a= 'A';
int b= '$';
int c= '?'; // 代碼 0xA9
int d= '\xAE'; // 符號 @ 的代碼
字符數(shù)據(jù)占用 4 字節(jié)的空間。其數(shù)值范圍介于 0 ~ 255 之間。如果超出這個范圍,則視為無效。
布爾型常量
用來判斷真值(true)和假值(false), 其值也可以用數(shù)字 1 和 0 進行表示。
其值True和Flase使用時忽略大小寫。
示例:
bool a= true;
bool b= False;
bool c= 1;
布爾型常量占用長度為4字節(jié)的內(nèi)存空間,它用0或1的值表示。
浮點型常量 (雙精度常量)
浮點型數(shù)據(jù)由整數(shù)部分、小數(shù)點(.)和小數(shù)部分組成,其中整數(shù)部分和小數(shù)部分都是一組十進制數(shù)字
示例:
double a= 12.0;
double b= -956.1007;
double c= 0.0001;
double d= 16;
浮點型數(shù)據(jù) (雙精度)占用 8 字節(jié)的內(nèi)存空間。其數(shù)值范圍介于 -1.7e-308 ~ 1.7e308 之間。如果超出這個范圍,則視為無效。
字符串常量
字符串數(shù)據(jù)是用雙引號括起來的一連串 ASCII 字符,如:”Character constant”。
字符串數(shù)據(jù)是雙引號里的一組字符,如果需要在字符串中插入一個雙引號(“),在它前而必須使用反斜杠()。當有了前置反斜杠(),任何特殊字符都能用在字符串中。
字符串長度介于0到255個字符之問,如果超過此長度,尾部多余的字符將被忽略,編譯器也會有相應的提示。
示例:
"天上為什么這么黑"
"This is a character string"
"Copyright symbol \t\xA9"
"this line contains a line feed symbol \n"
"C:\Program Files\MetaTrader 4"
"A" "1234567890" "0" "$"
字符串數(shù)據(jù)占用 8 個字節(jié)的空間。其中第一部分為長的整型,存儲字符串緩沖區(qū)的長度。第二部分是32位的存儲字符串緩沖區(qū)的地址。
顏色常量
顏色數(shù)據(jù)可以用三種方法表示: 用字符表示、用整數(shù)表示 或者是顏色名(Web顏色)表示。
1,用字符表示的方法是 用三個數(shù)字來表示三種主要顏色紅綠藍(RGB)的比例。 顏色數(shù)據(jù)以 C 開頭,并用單引號括住。每種顏色的比例值在 0 ~ 255 之間。
2,整數(shù)表示的方法是 使用十六進制或十進制數(shù)字。十六進制數(shù)字如 0x00BBGGRR, 其中 RR 是紅色的比例,GG 是綠色的比例,BB 是藍色的比例。十進制數(shù)不能直接體現(xiàn)紅、藍、綠的比例 ,而是十六進制數(shù)字的十進制表示方式。
3,特殊的顏色名的方法是 可以且只能參考已經(jīng)命名的Web顏色表內(nèi)的名稱。
示例:
//--用字符表示
C'128,128,128' // 灰色
C'0x00,0x00,0xFF' // 藍色
//--用顏色名表示
Red
clrBlue
Black
//--用整數(shù)表示
0xFFFFFF // 白色
16777215 // 白色
0x008000 // 綠色
32768 // 綠色
顏色數(shù)據(jù)占用 4 字節(jié)的內(nèi)存空間。第一個字節(jié)一般被忽略,后三個字節(jié)包含了紅綠藍的組成信息。
時間日期常量 時間日期常量可以當作一個文本行來表示,它由6個部分組成:年、月、日、時、分、秒,
以D開頭,并用兩個單引號將日期(年、月、日)、時間(時、分、秒)括起來,單引號內(nèi)內(nèi)容可以省略,甚至兩者都可以同時省略。
日期時問型常量的取數(shù)范圍從1970. 1.1到2037. 12.31。。
示例:
D'2004.01.01 00:00' // 新年
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12' //等于 D'1980.07.19 12:00:00'
D'01.01.2004' //等于 D'01.01.2004 00:00:00'
D'12:30:27' //等于 D'[編譯日期] 12:30:27'
D'' //等于 D'[編譯日期] 00:00:00'
日期時間數(shù)據(jù)占用 4 字節(jié)空間長度的整型數(shù)值。其值從1970年1月1日00:00開始以秒的形式顯示總秒數(shù)。