MT4編寫MQL4語言課程1-12課_第1頁
MT4編寫MQL4語言課程1-12課_第2頁
MT4編寫MQL4語言課程1-12課_第3頁
MT4編寫MQL4語言課程1-12課_第4頁
MT4編寫MQL4語言課程1-12課_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、MQL4 課程By coders guru歡迎來到MQL4 語言課程。在這個(gè)系列里,我將試著通過直接而迅速的例子給你一個(gè)全面的教程來剝?nèi)QL4 語言的神秘和復(fù)雜。在這個(gè)系列課程里,我還將告訴你如何使用MQL4 語言編寫你自己的智能交易系統(tǒng),技術(shù)指標(biāo)和腳本。如果你是一個(gè)c 語言的程序員,那么在我的課程開始之前,你甚至已經(jīng)知道了許多關(guān)于MQL4 語言的規(guī)則。如果你以前沒有書寫過任何程序語言,那也沒問題。我同樣將指導(dǎo)你全面的理解程序編制的概念。那么,讓我們從起點(diǎn)開始吧。MQL4 ? What? Why And Where?MQL4 代表 MetaQuotes Language 4.MetaQuot

2、es 是組建 MetaTrader 交易平臺的公司。并且為了是它比其他的交易平臺更強(qiáng)大,公司通過一種允許用戶(你)編寫自己的交易策略的內(nèi)置程序語言來擴(kuò)展它。這種語言允許你創(chuàng)建下面的任何一種:智能交易 是一種連接到特定圖表的自動(dòng)交易系統(tǒng)。它能夠根據(jù)設(shè)置的節(jié)點(diǎn)自動(dòng)啟動(dòng),當(dāng)它開始運(yùn)行后,它不會同時(shí)去處理另一個(gè)新的指令(也就是說必須等到當(dāng)前程序完成)。這種交易系統(tǒng)能夠在提醒用戶可以交易的同時(shí),將交易定單自動(dòng)送到交易服務(wù)器。與大多數(shù)交易系統(tǒng)一樣,它也能夠用歷史數(shù)據(jù)測試交易策略,并在圖表上顯示出來。智能交易存儲在terminal_directoryexperts 。自定義指標(biāo) 可用來編寫新的技術(shù)指標(biāo),和內(nèi)

3、置的指標(biāo)一樣,它不能用來進(jìn)行自動(dòng)交易,只能作為分析數(shù)據(jù)的工具。自定義指標(biāo)儲存在terminal_directoryexpertsindicators 。腳本 是執(zhí)行單一功能的一段程序,和 智能交易不同,腳本不能單獨(dú)執(zhí)行,只能被調(diào)用。腳本存儲在terminal_dictionaryexpertsscripts 。這就是“什么”是 MQL4 ?“為什么”使用 MQL4 ?現(xiàn)在, “在哪兒”我可以書寫 MQL4 ?書寫你自己的MQL4 代碼就像世界上的其他任何事情,你可以選擇兩種方法種的一種,困難的和簡單的。1- 困難的 :困難的方式是使用你喜歡的文字編輯工具和命令提示符來編輯你的程序。記事本是個(gè)不

4、錯(cuò)的選擇,但不要忘了兩件事情:1- 保存你創(chuàng)建的文件為無格式的文本。( plain text format )2-保存文件為.mp4 (這樣方便用 MetaEditor重新編輯它),但是你也可以保存它為任何你喜歡的擴(kuò)展名。保存完你的程序后,還有一個(gè)額外的步驟來讓你的代碼可以眾所周知的出現(xiàn)。那就是編譯步驟。編譯的意思是轉(zhuǎn)換你已經(jīng)寫好的人類易讀的語言為電腦能理解的機(jī)器語言。MetaTrader 已經(jīng)裝置了一個(gè)它自己的編譯器:MetaLang.exe。 (這個(gè)程序?qū)⑥D(zhuǎn)換你的腳本為機(jī)器語言)MetaLang.exe是一個(gè)帶兩個(gè)參數(shù)的命令行程序,它輸出 .ex4文件。(.ex4為Metatrader可識

5、別的文件)第一個(gè)參數(shù)是"options”,它只有一個(gè)可選項(xiàng)p退出。第二個(gè)參數(shù)是你的.mql文件的完整路徑。語法格式為:Metalang options .filename例:1- 找到你的 metalang.exe 的路徑,它和 MetaTrader 在同一個(gè)路徑下(例如:D:Program FilesMetaTrader 4 )2-創(chuàng)建一個(gè)批處理文件compile.bat (或者任何你喜歡的名字。)3-把下面的幾行代碼寫進(jìn)bat文件并保存它:cd D:Program FilesMetaTrader 4metalang -q "D:Program FilesMetaTrad

6、er 4my_first_mql4_script.mq4"(不要忘了把路徑更改為你的MetaTrader的安裝路徑).4-運(yùn)行這個(gè)批處理文件,如果你像我一樣幸運(yùn)的話,你將看到下面的畫面。e D:YWINUQWStem 21cm d,exeQgM1grosoft Vindous XP Version 5.1. 198S2001 M ic l'os oF t Coif'p .D S'D-XPvojfiari PiLeiMet aTir- 4Kc(»inpi-Le _ bat,pD :S>Cd D :PFogi*aiii Piles Me t aT

7、i*ade r 4FilcsXHetaTradei* 4>l1etaLansi '"Di'vPi'osfram FilesSMetairadei*ii*t_nql4_script.nq4" MetdQuotcs L 豉4 cowpilei vers ion 4-00 bild 183 <04 Oct 2005) CopypightMetaQuotes Software Corp.CollectTokens : 2Q48 flq Ho ken £24 Kb1* Lis:ed G42 MqlToken : 312 bjftE 等 E

8、xp File "'D :、F:r(is:rain FilesHetaTradei' 4ny_f irst_mql4_script.eM4'1 produced 8 e uavn>B SPvogranrader 4.與你看見的一樣,你將獲得"my_first_mql4_script.ex4輸出文件。2-簡單的:Metatrader 已經(jīng)裝置了一個(gè)很好的IDE (integrated development editor- 集成開發(fā)環(huán)境)MetaEditor,它有如下特性:1-當(dāng)你讀寫代碼的時(shí)候它是一個(gè)有著MQL4語言強(qiáng)大和不同特性的文本編輯器。

9、2-方便的編譯你的程序,只要按下F5, MetaEditor將為你做完所有的困難工作并輸出“ex4”文件。(另外它還很容易的看出你的程序那里出錯(cuò)了)3-內(nèi)置參考字典。你可以訪問高亮的關(guān)鍵字。如果想進(jìn)一步了解它,請按 F1.叵區(qū)二薛£?國IIOTfiT I *哈啟 竽 G |a&呼加Termhal I fl |Copyright 20D£f WetaQuotea/ |http : / / www .me1“+Mdvia'orextern extern eKCern extern eKteun externd 口心。工 doutols 如uh J.曰 do ut

10、o le double de utileTakePraiit = 5Q:Lots - 0.1;TrailinStop = 3口;MAC DQp euL eve1=3;MACDGloaeLevel=S;MATrendPeriod-2 6;/i Back:手、5河匚 e:4 Next 可可 Previous ;Dictionary+ Q MQH quick reFtrence4:Account Infomnatiorit (: Array Functions+; Common fundtions用 O Corversion functioris三 O Custom Indicatw Funttio

11、n于i £) Date & Time functions4 ':. File Functions+ . =; Global ariab eg Fun匚匕cmgFiles Dicmnary Search |MetaQuotes Language 4RIOL 4 ciuick,性已n匚已 Ac一口uct Intorm白tion Ar-y Funotjon mm0門 fu net innsError s | Find '-n Files HelpPrevious T opicHelp pages panelLn I. Col 1O Meta Editor >

12、MACD Sample.niq4£ile Edit 守e 曲 loots 次血?jiǎng)h Hp在接下來的課程里,我們將知道更多的關(guān)于MetaEditor。MQL4的語法。今天我僅僅是給大家打個(gè)招呼,明天我們將開始真正的工作,你將學(xué)習(xí) 非常歡迎批評指正。明天見。最后感謝大家,歡迎回帖批評指正MQL4課程By coders' guru語法我希望你滿意那個(gè)試著回答了:“什么”是MQL4? “為什么”使用MQL4和“在哪兒”書寫MQL4的歡迎課程。方法或怎么做(how)永遠(yuǎn)是最大最重要的問題,接下來的全部課程就是答案?,F(xiàn)在,我希望你清空你思想中的任何混亂想法,并且認(rèn)真閱讀下面的這些概念。我們

13、今天正在談?wù)摰氖顷P(guān)于 MQL4的語法規(guī)則。就像我以前告訴你的那樣,如果你是個(gè)c語言或者C+的程序員,那么在我的課程沒開始之前你就已經(jīng)知道了許多MQL4的事情。這是因?yàn)镸QL4的語法和c語言的語法很像。當(dāng)我們學(xué)習(xí)一種語言的語法時(shí),我們同時(shí)在學(xué)習(xí)它的原理和書寫規(guī)則。它有以下幾部分組成:1、格式2、注釋3、標(biāo)識符4、保留字讓我們把它分成以下幾塊。一、格式當(dāng)你書寫代碼的時(shí)候,你可以自由的使用空格,制表符和空行來分隔你的代碼和代碼行,使它們更加的易讀和美觀。例如,下面這些語句行在 MQL4里都是正確的:Double MacdCurrent,MacdPrevious,SignalCurrent:Doubl

14、eMacdCurrent, MacdPrevious, SignalCurrent: Double MacdCurrent,但是,就像你看到 的,第一行更易讀 和容易理解。MacdPrevious,SignalCurrent:在MQL4的語言規(guī)則里有兩個(gè)例外:1、在"contorlling compilation ”里不能使用新行。(我實(shí)在不知道老外在這里什么意思,不過還好。因?yàn)樗f) 在下一課里你將知道關(guān)于"contorlling compilation ”更多,現(xiàn)在只要記住這個(gè)例外就好了。例如下面的代碼行是錯(cuò)誤的,并且MQL4編譯的時(shí)候?qū)?bào)錯(cuò):Fp ru perryc

15、opyright l1Copvrighi £ 2004, MetaQuotes Software Corp."|這是正確的"contorlling compilation ”:ppropcrt)T copyTight "Copyright © 2004, MstaQuotes Software C口rpJ2、在常數(shù)值,標(biāo)識符和關(guān)鍵字的中間不能使用空格或新行。例如,這一行是正確的:exiem int|Extern和int是關(guān)鍵字,MA_Period是標(biāo)識符,13是常數(shù)值 在下一課,你將知道的更多。下面的這些行是不正確的:extern int MA

16、Penc»d=3;exicrn int MA Puiod= 3,注意1和3之間的制表符。exTern int A Period=l 3t注意關(guān)鍵字extern中間的制表符。二、注釋為了使程序設(shè)計(jì)世界更容易些,任何程序語言都要它自己書寫注釋的風(fēng)格。代碼行里的注釋會被匯編器忽略,但它使你的程序更加的清楚和易懂。假定你在夏天寫了某個(gè)程序,到了冬天你再讀它的時(shí)候,如果沒有注釋一一盡管你是代碼的編寫者一一你不能理 解全部的這些謎一樣的代碼行。MQL4 (C+)使用兩種注釋方式:1、單行注釋單行注釋開始于“ ”,結(jié)束于一個(gè)新行。例如:I T1 Wtem int MA_Periad=l 3; &#

17、39;I'his h Another comnent2、多行注釋多行注釋開始于“ /*",結(jié)束于“*/”。例如:/* th)sismulti 我希望你能對這一課感興趣。下一課我們將講關(guān)于“數(shù)據(jù)類型”。準(zhǔn)備好,真正困難的工作將要開始了。最后感謝大家,歡迎回帖批評指正。1 h a 】s a com in entexit m j nt MPcri od=13,這也是爭取的注釋:exicm ini HELLO I'm a cnminem* 1A Pericxi=l3, FI但這樣是錯(cuò)誤的:exrn im test MA Puri口d=13,三、標(biāo)識符標(biāo)識符用來給變量、函數(shù)和數(shù)

18、據(jù)類型進(jìn)行命名,長度不能超過31個(gè)字節(jié)你可以使用數(shù)字 0-9、拉丁字母大寫A-Z和小寫a-z(大小寫有區(qū)分的)還有下劃線(_)。此外首字母不可以是數(shù)字,標(biāo)識符不能和彳留字沖突.例如MA_Period在這是就是個(gè)標(biāo)識符:extern mt M A Perod= 1 3T讓我們來看一些例子:Namel正確的_Name1正確的IName錯(cuò)誤的(首字母不能是數(shù)字)Name錯(cuò)誤的(不能使用)Name錯(cuò)誤的(不能使用)I_love_my_country_and_my_country_loves_all_the_world錯(cuò)誤的(不能超過 31個(gè)字符)Color正確的(注意C是大寫)Color錯(cuò)誤的(col

19、or是保留字)四、保留字卜面列出的是固定的保留字。不能使用以下任何保留字進(jìn)行命名。(譯者注:都是小寫。)數(shù)據(jù)類型存儲類型操作符其他boolexternbreakfalsecolorstaticcasetruedatetimecontinuedoubledefaultintelsestringforvoidifreturnswitchwhile例如下面的這些代碼行是不正確的:ex te m J nt datetime = 1?,int frMern =20;double continue = U;MQL4 課程By coders guru歡迎來到MQL4 課程的第三課?;仡櫹律弦徽n的內(nèi)容:你可以

20、使用什么格式來書寫MQL4 代碼?怎樣通過注釋使你的程序更加完善?什么是標(biāo)識符?選擇他們有什么規(guī)則?什么是 MQL4 的保留字?現(xiàn)在,讓我們享受本課的樂趣“DATA TYPES ”(數(shù)據(jù)類型)數(shù)據(jù)類型是什么意思?任何程序語言都有一套數(shù)據(jù)的內(nèi)存表示的名稱。例如,如果內(nèi)存保留一個(gè)-2147483648 到 2147483647 之間的數(shù),那么大多數(shù)的程序語言將命名這個(gè)數(shù)據(jù)為“整型數(shù)據(jù)” ( Integer) 。變量?變量是被提交到內(nèi)存中的數(shù)據(jù)的名稱。你可以設(shè)想內(nèi)存是連續(xù)的、大小不同的盒子。為了使用一個(gè)盒子存儲數(shù)據(jù),這個(gè)盒子必須被賦予一個(gè)名稱,這個(gè)過程被稱為“聲明”。在“聲明”過程,你用一個(gè)詞告訴計(jì)

21、算機(jī)你想使用的盒子類型和大小,這個(gè)詞被稱為“關(guān)鍵字”。你還可以給這個(gè)盒子起一個(gè)好記的或者跟存儲數(shù)據(jù)有關(guān)系的名字,這可以方便你以后找到這個(gè)數(shù)據(jù)。這個(gè)名字就叫“變量名”。通過“賦值”,可以把數(shù)據(jù)放進(jìn)盒子里。我們可以在“聲明”變量的同時(shí)就給它一個(gè)值,這個(gè)過程被稱為“初始化”。例如下面的這行代碼:int MyVaraible=0;int ? 關(guān)鍵字int ? 整型數(shù)據(jù)類型int ? 聲明MyVaraible ? 變量名=0 ? 初始化MQL4 包括以下數(shù)據(jù)類型:整型數(shù)據(jù) (int)十進(jìn)制 : 數(shù)字 0 - 9 ,包括負(fù)數(shù)。十六進(jìn)制: 數(shù)字 0 - 9 , 字面 a - f 或者 A - F 代表 10

22、 - 15; 以 0x 或者 0X 開頭。整型數(shù)據(jù)占用4字節(jié)的空間,其數(shù)值范圍介于 -21474836482147483647之間。如果超出這個(gè)范圍,則視為無效。例如:int intInteger = 0;int intAnotherIntger = -100;int intHexIntger=0x12;布爾數(shù)據(jù) (bool)Boolean用來表示 是和否,還可以用數(shù)字 1和0進(jìn)行表示。True和Flase可以忽略大小寫。例如:bool I = true;bool bFlag = 1;bool bBool=FALSE;字符數(shù)據(jù) (char)任何帶單引號的單一字符或者十六進(jìn)制的ASCII碼如x1

23、0'都是字符數(shù)據(jù)。例如:'a' , '$' , 'Z'一些特殊的字符如單引號(')、雙引號(”)、問號(?)、反斜線()和控制符必須以反斜線開頭(),組合表達(dá)原來的意思,如下表所示:換行 NL (LF) n制表符 HT t回車 CR r反斜線單引號 '雙引號 ""十六進(jìn)制ASCII hh xhh我們使用關(guān)鍵字INT創(chuàng)建字符類型。例如:int chrA = 'A'int chrB = '$'int c = '?'/ 代碼 0xA9int d = 'x

24、AE' 貨幣對代碼字符串?dāng)?shù)據(jù) (string)字符串?dāng)?shù)據(jù)是帶有雙引號的一連串ASCII字符,如:"Character constant"。字符串可以容納0到255個(gè)字符,如果超過這個(gè)長度,右邊多余的字符將被忽略,編譯器也會有相應(yīng)的警示。如果字符串中需要插入一個(gè)雙引號(")必須在它前面使用反斜線()。(參見字符數(shù)據(jù)部分)我們使用關(guān)鍵字STRING來創(chuàng)建字符串?dāng)?shù)據(jù),例如:string str1 = "Hello world1 , with you coders guru ”;string str2 = "Copyright ? 2005,

25、"Forex-tsd forum"."注意雙引號的使用.string str3 = "1234567890”;浮點(diǎn)型數(shù)據(jù) (double)浮點(diǎn)型數(shù)據(jù)由整數(shù)部分、小數(shù)點(diǎn)(.)和小數(shù)部分組成,其中整數(shù)部分和小數(shù)部分為一系列十進(jìn)制數(shù)字。浮點(diǎn)型數(shù)據(jù)(雙精度)占用4字節(jié)的空間。其數(shù)值范圍介于 -1.7 * e-3081.7 * e308之間。如果超出這個(gè)范圍, 則視為無效。我們使用關(guān)鍵字double來創(chuàng)建浮點(diǎn)型數(shù)據(jù),例如:double a = 12.111;double b = -956.1007;double c = 0.0001;double d = 16;d

26、ouble dblNumber3 = 1/4;顏色數(shù)據(jù) (color)顏色數(shù)據(jù)可以用三種方法表示:字符數(shù)據(jù)、整型數(shù)據(jù)或者是顏色名(只能是 Web colors中已命名的).字符數(shù)據(jù)的表達(dá)方法是用三個(gè)數(shù)字來表示三種主要顏色:紅、綠、藍(lán)的比例。以C開頭,用單引號括住。數(shù)字的值在 0255之間按比例選取。整數(shù)數(shù)據(jù)的表達(dá)方法使用十六進(jìn)制或十進(jìn)制數(shù)字。十六進(jìn)制數(shù)字如0X00BBGGRR ,其中RR是紅色的比例,GG是綠色的比例,BB是藍(lán)色的比例。十進(jìn)制數(shù)不能直接體現(xiàn)紅綠藍(lán)的比例,而是十六進(jìn)制數(shù)字的十進(jìn)制表示方式。 特殊的顏色名可以參考 Web colors set表。 示例: /字符數(shù)據(jù) C'1

27、28,128,128'/ 灰色C'0x00,0x00,0xFF' / 藍(lán)色 /顏色名 RedYellowBlack/整型數(shù)據(jù)0xFFFFFF/ 白色16777215/白色0x008000/綠色32768/綠色顏色數(shù)據(jù)占用 4字節(jié)的空間。第一個(gè)字節(jié)一般被忽略,后三個(gè)字節(jié)包含了紅綠藍(lán)的組成信息。我們使用color關(guān)鍵字來創(chuàng)建顏色數(shù)據(jù),例如:color clr1= Red;color clr1= C'128,128,128'color clr1=32768;Web colors set 表HlllMDarkGreen DarkSlateGrayOliveGre

28、enTealHIVHPurple1 Ma-oM.eDarkB-DarkOliveGreenSaddleBrownForestGreenOliveDrabSeaGreenDarkGoldenrodDarkSlateBlueSiennaM.eBrownDarkTurquoiseDimGrayLightSeaGreenDarkVioletFireBrickMediumVioletRedMediumSeaGreenChocolateCrimsonSteelBlueGoldenrodMediumSpringGreenLawnGreenCadetBlueDarkOrchidYellowGreenLimeG

29、reenOrangeRedDarkOrangeOrangeGoldYellowChartreuseLimeSpringGreenAquaDeepSkyBlueB-MagentaRedGraySlateGrayPeruBlueVioletLightSlateGrayDeepPinkMediumTurquoiseDodgerBlueTurquoiseRoyalBlueSlateBlueDarkKhakiIndianRedMediumOrchidGreenYellowMediumAquamarineDarkSeaGreenTomatoRosyBrownOrchidMediumPurplePaleVi

30、oletRedCoralCornflowerBlueDarkGraySandyBrownMediumSlateBlueTanDarkSalmonBurlyWoodHotPinkSalmonVioletLightCoralSkyBlueLightSalmonPlumKhakiLightGreenAquamarineSilverLightSkyBlueLightSteelBlueLightBluePaleGreenThistlePowderBluePaleGoldenrodPaleTurquoiseLightGrayWheatNavajoWhiteMoccasinLightPinkGainsbor

31、oPeachPuffPinkBisqueLightGoldenrodBlanchedAlmondLemonChiffonBeigeAntiqueWhitePapayaWhipCornsilkLightYellowLightCyanLinenLavenderMistyRoseOldLaceWhiteSmokeSeashellIvoryHoneydewAliceBlueLavenderBlushMintCreamSnowWhite 日期時(shí)間數(shù)據(jù) (datetime)日期時(shí)間數(shù)據(jù)由 6個(gè)部分的字符組成:年、月、日、時(shí)、分、秒,以D開頭,用單引號括起。日期(年、月、日)或者時(shí)間(時(shí)、分、秒)甚至兩者一

32、起都可以不用填寫。日期時(shí)間數(shù)據(jù)開始于1.1.1970截止到12.31.2037新年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'01.01.2004'/D'12:30:27'/D''/等于 D'1980.07.19 12:00:00'等于 D'01.01.2004 00:00:00'等于D'編譯日期12:30:27'等

33、于D'編譯日期00:00:00'我們使用關(guān)鍵字 datatime來創(chuàng)建日期時(shí)間數(shù)據(jù),例如:datetime dtMyBirthDay= D'1972.10.19 12:00:00'datetime dt1= D'2005.10.22 04:30:00'運(yùn)算符和表達(dá)式一些數(shù)字和字符的組合是特別重要的,它們被稱為運(yùn)算符,例如+ - * / %算術(shù)運(yùn)算符&& |邏輯運(yùn)算符=+= *=負(fù)值運(yùn)算符標(biāo)識符加運(yùn)算符就是表達(dá)式。舉例說明:x = (y*z)/w;x,y,z和w是標(biāo)識符二,*和/是運(yùn)算符整個(gè)這行是表達(dá)式。表達(dá)式組成語句,語句組成函數(shù)

34、,函數(shù)組成程序。算數(shù)運(yùn)算符算術(shù)運(yùn)算符包括加法和乘法運(yùn)算:運(yùn)算符名稱示例+加A = B + C;-減A = B - C;+ -改變符號A = -A;A = B * C;/除A = B / C;%求模A =A % C;+自加一A+;-自減一A-;添加1的運(yùn)算符不能使用在表達(dá)式中。int a=3;a+;/有效表達(dá)式int b=(a+)*3; /無效表達(dá)式b=a*5/有效表達(dá)式賦值運(yùn)算符任何表達(dá)式的目的是產(chǎn)生一個(gè)結(jié)果,賦值運(yùn)算符把這個(gè)結(jié)果賦予給左邊的操作數(shù)。例如:A=B*C在這里,我們把 B和C相乘,并把結(jié)果賦予給 A。(=在這兒是賦值運(yùn)算符) MQL4有11個(gè)賦值運(yùn)算符:把B的值賦予AA = B;在

35、y 值上加上xy += x;在y值上減去xy -= x;在y 在y 在y值上乘以 值上除以 值上求xxx的模y *= x;y /= x;y %= x;把y值向右做x位邏輯移位把y值向左做x位邏輯移位AND位運(yùn)算符y &= x;OR位運(yùn)算符y |= x;把x和y按做邏輯異或的操作y >>= x;y <<= x;y 人=x;關(guān)系運(yùn)算符用返回0(False)或1(True)來表示兩個(gè)量之間的關(guān)系。邏輯值FALSE代表整數(shù)零值,邏輯值 TRUE代表不同于零的任何值。MQL4有六個(gè)關(guān)系運(yùn)算符。示例如下:4 = 4;/等于,結(jié)果TRUE ,或14 < 4;小于,Z果為

36、 FALSE或04>4;/大于,結(jié)果為 FALSE或04 <= 4 ;小于等于,結(jié)果為 TRUE或14>=4 ;大于等于,結(jié)果為 TRUE或14!=4 ;/不等于,結(jié)果為 FALSE或0布爾運(yùn)算符(邏輯運(yùn)算符)邏輯運(yùn)算符是根據(jù)表達(dá)式的值來返回真值或是假值。MQL4使用3個(gè)邏輯運(yùn)算符:運(yùn)算符名稱示例說明&&邏輯與A && B;如果A和B值都是真實(shí)的,表達(dá)式值為TRUE(1) 0 否貝表達(dá)式的值為 FALSE (0).II邏輯或A II B;A和B值的邏輯運(yùn)算符或OR (|)用來 表示兩個(gè)表達(dá)式只要有一個(gè)成立即可。 如果A和B值為真的,表達(dá)式值為T

37、RUE (1)。否則,值為FALSR0)。邏輯表達(dá) 式被完全計(jì)算。!邏輯非!A;否定運(yùn)算符(!),用來表示真假的反面 的結(jié)果。如果運(yùn)算值是FALSR0)結(jié)果 為TRUE(1);如果運(yùn)算/、同于 FALSE(0) 等于 FALSE (0)。位邏輯運(yùn)算符位邏輯運(yùn)算符和邏輯運(yùn)算符比較相似,只是他們工作在一個(gè)比較小的范圍一二進(jìn)制數(shù)據(jù)。運(yùn)算符對操作數(shù)執(zhí)行按位求補(bǔ)操作。表達(dá)式的數(shù)字值中包含1,其中n包含0和數(shù)字值中包含 0 ,其中n包含1。b = n;運(yùn)算符x向右移動(dòng)到數(shù)字y代表二進(jìn)制代碼。向右移動(dòng)是邏輯運(yùn)算, 即左側(cè)將被零填滿。x = x >> y;運(yùn)算符x向右移動(dòng)到數(shù)字y代表二進(jìn)制代碼。左

38、側(cè)將被零填滿x = x << y;二進(jìn)制的x和y代表位邏輯運(yùn)算符 AND。在所有數(shù)組中x和y的值都不含有零表達(dá)式的值包含1 (TRUE);在所有其他數(shù)字中包含 0 (FALSE)。b = (x & y) != 0);二進(jìn)制的x和y代表位邏輯運(yùn)算符 OR在所有數(shù)字中x和y的值都不等于零表達(dá)值包含1并且在所有其他數(shù)字中包含0。b = x | y;二進(jìn)制的x和y代表位邏輯運(yùn)算符 EXCLUSIVE。在所有數(shù)字中x和y的值都不同于二進(jìn)制值表達(dá)值包含1并且在所有其他數(shù)字中包含0。b = x 人 y;位邏輯運(yùn)算符只作用于Integers類型。其他運(yùn)算符這些運(yùn)算符不屬于前面任何一個(gè)種類。

39、運(yùn)算符名稱示例說明指數(shù)下一課中會有詳細(xì)說 明()調(diào)用x1,x2,,xn自變數(shù)函數(shù),標(biāo)點(diǎn)操作符優(yōu)先級下面是從上到下的運(yùn)算優(yōu)先規(guī)則,優(yōu)先級高的將先被運(yùn)算。從左到右從右到左從左到右從左到右()函數(shù)調(diào)用數(shù)組元素參考!真假運(yùn)算符-改變運(yùn)算符+增量-減量位邏輯運(yùn)算符&位邏輯運(yùn)算符AND|位邏輯運(yùn)算符OR八位邏輯運(yùn)算符OR<<左移>>右移*乘法/除法%百分比+加法從左到右-減法<小于從左到右<=小于等于>>=!=不等于|邏輯OR從左到右&&邏輯AND從左到右=值從右到左+=加法值-=減法值*=乘法值/=除法值%=百分比值>>

40、=右移值<<=左移值&=位邏輯運(yùn)算符AND值|=位邏輯運(yùn)算符OR值A(chǔ) =位邏輯運(yùn)算符OR值,逗號從左到右插入語會顯示所優(yōu)先執(zhí)行的運(yùn)算注意:在MQL砒序中執(zhí)行優(yōu)先運(yùn)算不同于在C語言范圍內(nèi)的運(yùn)算。在MQL4中,正常的流程控制是從上而下一個(gè)語句一個(gè)語句的執(zhí)行。一個(gè)語句是一行代碼,它讓電腦做某些事情。例如:Print("Hello World");return 0;語句后面的分號是語法中至關(guān)緊要的部分,也是最容易被遺忘的部分。從上到下的執(zhí)行方式并不是唯一的途徑,它有兩個(gè)例外:循環(huán)和選擇。你希望你寫的程序代碼能根據(jù)情況的改變而做出不同的響應(yīng)。在這種方式中,控制流程

41、從程序的這一部分跳轉(zhuǎn)到程序的另一部分。語句引起這樣的跳轉(zhuǎn)被叫做控制語句。這樣的控制由循環(huán)和選擇組成。循環(huán)在不少實(shí)際問題中有許多具有規(guī)律性的重復(fù)操作,因此在程序中就需要重復(fù)執(zhí)行某些語句。一組被重復(fù)執(zhí)行的語句稱之為循環(huán)體,能否繼續(xù)重復(fù),決定循環(huán)的終止條件。循環(huán)語句是由循環(huán)體及循環(huán)的終止條件兩部分組成的。要使用循環(huán)語句時(shí),必須要確定循環(huán)體及條件(布爾表達(dá)式)兩個(gè)重要因素,亦即首要考慮的是:我要重復(fù)執(zhí)行哪些語句,我要重復(fù)到什么時(shí)候?yàn)橹梗QL4 有兩種循環(huán):for 循環(huán)和 while 循環(huán)。1、 for 循環(huán)For 循環(huán)執(zhí)行代碼片段固定的次數(shù)。例如:int j;for(j=0; j<15; j+

42、)Print(j);For 循環(huán)由 for 關(guān)鍵字和跟隨其后的圓括號和括號中由分號隔開的三個(gè)表達(dá)式組成:for(j=0; j<15; j+)三個(gè)表達(dá)式分別是初始化表達(dá)式,測試表達(dá)式和增量表達(dá)式。循環(huán)的主體是被執(zhí)行數(shù)次的語句:Print(j);在我們的例子中,循環(huán)的主體被執(zhí)行了15 次。注意: for 語句后面沒有分號,這是因?yàn)閒or 語句和 for 循環(huán)的主體一起才能構(gòu)成一個(gè)程序語句。A 、 初始化表達(dá)式:初始化表達(dá)式只在程序開始的時(shí)候執(zhí)行一次,它的目的是給循環(huán)變量一個(gè)初始值(在我們的例子中是0)你可以在循環(huán)外(之前)聲明循環(huán)變量,就像我們的的例子里:int j;或者你也可以在像下面這樣

43、在循環(huán)里聲明變量:for(int j=0;j<15;j+)上面的兩行代碼是一樣的,除了每個(gè)變量的范圍。(我們將在變量一課中介紹更多的關(guān)于變量聲明和范圍)第一種聲明方式(循環(huán)外)使得所有的代碼行都可以使用這個(gè)變量,第二種聲明方式(循環(huán)里)只有循環(huán)里能使用這個(gè)變量。你可以像下面這樣,在for 循環(huán)里聲明多個(gè)變量,變量之間用逗號分隔:Fro(int i=0,j=0;i<15;j+)print(i);B 、 測 試表達(dá)式:測試表達(dá)式是使用關(guān)系運(yùn)算符的關(guān)系表達(dá)式。它通過評價(jià)每一次循環(huán)的值來決定循環(huán)是繼續(xù)執(zhí)行還是停止。如果表達(dá)式的結(jié)果為真,循環(huán)將繼續(xù)執(zhí)行;如果表達(dá)式的結(jié)果為假,那么循環(huán)終止。在

44、我們的例子中,只要 I<15,循環(huán)主體print(i)將一直執(zhí)行。例子里 i的值為:0, 1,2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14。當(dāng)?shù)竭_(dá)15,控制語句將跳過循環(huán),執(zhí)行其后的語句。C 、 增量表達(dá)式:增量表達(dá)式把循環(huán)變量的值(本例中為i)增加1。它是循環(huán)步驟中的最后一步,在初始化循環(huán)變量,測試完測試表達(dá)式,執(zhí)行完循環(huán)主體之后。下面是for循環(huán)的流程圖:-司_初始裝達(dá)7I測試表達(dá)式I1退出 FALSE J主體增量表達(dá)丈像初始表達(dá)式一樣,在 fro循環(huán)中你也可以使用多個(gè)增量表達(dá)式,它們之間用逗號分隔。像下面這樣:int i;int j;for(i

45、=0,j=0;i<15;i+,j+)print(i);注意:你只能使用一個(gè)測試表達(dá)式。另一個(gè)需要注意的地方是增量表達(dá)式不僅能增加循環(huán)變量,還可以減少循環(huán)變量。例如:int i;for(i=15;i>0;i-)print(i);上面的例子中,它初始化i的值為15然后開始循環(huán),并每次將其減少1和檢查測試表達(dá)式(i>0)。程序?qū)⒔o出這些結(jié)果:15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1。循環(huán)主體中的多個(gè)語句:在前面的例子里,循環(huán)主體中都只有一個(gè)語句,但并不總是這樣。你可以像下面這樣使用大括號()在循環(huán)主體中使用多個(gè)語句:For(

46、int i=0;i<=15;i+)Print(i);PlaySound( “alert.wav ” );不要忘記在每一個(gè)語句后面加上分號。break 聲明:當(dāng)關(guān)鍵字break 出現(xiàn)在 for 循環(huán)中時(shí)(while 循環(huán)和 switch 語句也一樣),循環(huán)的執(zhí)行將終止,并且跳過循環(huán),執(zhí)行其后的語句。例如:for(int i=0;i<15;i+)if(i=10)break;Print(i);上面的例子中,循環(huán)將執(zhí)行到i=10。在那里,break關(guān)鍵字將終止循環(huán)。代碼將給出這些數(shù)值:0, 1, 2, 3, 4,5, 6, 7, 8, 9Continue 聲明:break 聲明讓你跳出循環(huán)

47、,continue 則讓你回到循環(huán)的頂部(圓括號內(nèi))。例如:for(int i=0;i<15; i+)if(i=10) continue;Print(i)上面的例子循環(huán)將執(zhí)行到i=10,在那里continue關(guān)鍵字將使循環(huán)回到循環(huán)頂部并且不輸出i的值。代碼將給出這些數(shù)值:0,1,2,3,4,5,6,7,8,9,11,12,13,14。提示:你可以省去for 循環(huán)中的一個(gè)或所有表達(dá)式,例如:for(;)這個(gè)循環(huán)就像while 循環(huán),有一個(gè)始終被為真的測試表達(dá)式。二、 while 循環(huán)for 循環(huán)通常被用在你知道循環(huán)將要被執(zhí)行多少次的情況下。那如果是你不知道要執(zhí)行多少次的循環(huán)該怎么辦呢?這就

48、是 while 循環(huán)。while 循環(huán)和 for 循環(huán)一樣有一個(gè)測試表達(dá)式,但沒有初始化表達(dá)式和增量表達(dá)式。例如:int i=0;while(i<15)Print(i);i+;在這個(gè)例子中你應(yīng)該注意:循環(huán)變量在循環(huán)之前被聲明和初始化,你不能想for循環(huán)那樣,在循環(huán)中(圓括號內(nèi))對其聲明和初始化。i+在這里不像你想的那樣是增量表達(dá)式,但是循環(huán)體必須包含一些改變循環(huán)變量的語句,否則,循環(huán)將永 遠(yuǎn)不會停止。while僅包含一個(gè)測試表達(dá)式,它在每次循環(huán)的時(shí)候檢查。如果表達(dá)式為真則循環(huán)繼續(xù)執(zhí)行。否則,循環(huán)終止, 并執(zhí)行其后的語句。在本例中,循環(huán)將執(zhí)行到 14,這時(shí)i<15為假,循環(huán)終止。下面

49、是while循環(huán)的流程圖:while循環(huán)和for循環(huán)的相同點(diǎn):1、在它們兩個(gè)中你都可以使用break聲明和continue聲明。2、它們兩個(gè)都可以在循環(huán)主體中用括起來使用多個(gè)語句。3、for(;)等于 while(true)。4、在上一課我們已經(jīng)知道了循環(huán)是改變程序正常流程(自上而下)的兩種方式的一種,第二種方式是選擇。選擇在程序中依靠一個(gè)表達(dá)式的值使其一次性跳轉(zhuǎn)到程序的不同的部分。下面是MQL4中可用到的幾種選擇聲明:一、If語句。If語句是最簡單的選擇聲明,例:if( x < 100 )if主體將被執(zhí)行Print("hi");if關(guān)鍵字后面是小括號,小括號里是測試

50、表達(dá)式(x<100)。當(dāng)測試表達(dá)式的值為真的時(shí)候,(print( hi");)。如果測試表達(dá)式的值為假,將跳轉(zhuǎn)到if語句后面執(zhí)行其后的語句。下面是if聲明的流程圖:if主體中的多語句:像循環(huán)一樣,if聲明也可以通過大括號 。來包含多個(gè)語句,例:if(current_price=stop_lose)Print("you have to close the order");PlaySound("warning.wav");嵌套:選擇和循環(huán)可以互相嵌套。你可以在循環(huán)中嵌套一個(gè)選擇語句,或者在選擇語句中嵌套一個(gè)循環(huán),或者循環(huán)中 嵌套一個(gè)循環(huán),或者

51、選擇語句嵌套選擇語句。例:for(int i=2;i<10;i+)if(i%2=0)Print(這不是一個(gè)素?cái)?shù)。”);PlaySound( Wrian.wav ”力上面的例子中,for循環(huán)嵌套了一個(gè)if語句。注意:循環(huán)的主體部分并沒有用大括號包圍,這是因?yàn)閕f語句和它的主體被認(rèn)為是一個(gè)單獨(dú)的語句。2、 if.else語句if語句使我們在條件為真是做某些事情,設(shè)想我們還想在條件為假的時(shí)候做另外的事情,該怎么辦呢?這時(shí)就用到了 ifelse語句。例如:if(current_price>stop_lose)Print("It ' s too late to stop,

52、please stop!");elsePrint("you playing well today!");在上例中,如果測試表達(dá)式為真,程序給出一個(gè)消息;如果測試表達(dá)式為假,程序給出另一個(gè)消息。if.else語句的嵌套:你可以在if語句中嵌套if.else語句,也可以在if.else語句中嵌套if .else語句。例: if(current_price>stop_lose)Print("It ' s too late to stop, please stop!");if(current_price=stop_lose)Print(&

53、quot;It ' s time to stop!");elsePrint("you playing well today!");在ifelse語句的嵌套中有一個(gè)潛在的問題,你可能不經(jīng)意的把 else匹配給一個(gè)錯(cuò)誤的if。有兩種辦法來解決這個(gè)問題:A、你可以用大括號包含中if.else語句。例: if(current_price>stop_lose) Print("It s too late to stop, please stop!"); if(current_price=stop_lose)Print("It s t

54、ime to stop!"); elsePrint("you playing well today!");B、把else匹配給最近的if (在上面的例子中是 if(current_price=stop_lose)。3、 switch 語句如果你有一個(gè)巨大的選擇樹,并且所有的選擇依賴一個(gè)相同變量的值,那么你可以使用switch 語句。例:switch(x)case 'A':Print("CASE A");break;case 'B':case 'C':Print("CASE B or C");break;default:Print("NOT A, B or C");break;在上面的例子中,switch 跟著一個(gè)小括號,小括號里包含switch 常數(shù), switch 可以是一個(gè)整數(shù),一個(gè)字符或者一個(gè)常數(shù)表達(dá)式。常數(shù)表達(dá)式不能包含變量,例如: case X+Y: 非法的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論