|
在探討程序的時候可以拿一個簡單的EA可以拿來分析一下其執(zhí)行的步驟。這樣對EA的執(zhí)行會有一個更加明確的概念。 下面我就拿一個簡單的EA來分析一下它的執(zhí)行邏輯。EA程式: //-------------------------------------------------------------------- int Count=0; // 整體變量 //-------------------------------------------------------------------- int init() // 特殊函數(shù) init() { Alert ("Function init() triggered at start"); // 警報 return; // 退出 init() } //-------------------------------------------------------------------- int start() // 特殊函數(shù) start() { double Price = Bid; // 局部變量 Count++; // Tick 計數(shù)器 Alert("New tick ",Count," Price = ",Price);// 警報 return; // 退出 start() } //-------------------------------------------------------------------- int deinit() // 特殊函數(shù) deinit() { Alert ("Function deinit() triggered at deinitialization"); // 警報 return; // 退出 deinit() } //--------------------------------------------------------------------
以上程式按照下列步驟運行: 1. 當EA附到圖表上之后,客戶終端將控制權(quán)傳給EA,然后EA開始運行。這個程式從頭部開始執(zhí)行。在這個程式的頭部只有一行: int Count=0; // 整體變量 這一行的整體變量的值被定義為0。 2. 當程式頭部被執(zhí)行后,特殊函數(shù)init() 開始執(zhí)行: int init() // 特殊函數(shù) init() { Alert ("Function init() triggered at start");// 警報 return; // 退出 init() } 這個函數(shù)的主體包含了2個操作符。 2.1 函數(shù)Alert() 會展示一個窗口顯示:Function init() triggered at start 2.2 return操作符結(jié)束特殊函數(shù)init()的運行。
作為init()的運行的結(jié)果,一個警報將被顯示。但是在真實運用中,這種程序是很少見的。因為這個警報就是告知程序開始運行,沒有實際的用處。這里只是讓編程者看到特殊函數(shù)init()被執(zhí)行的結(jié)果。 3. 用戶終端探測到程式里的特殊函數(shù) start(): //-------------------------------------------------------------------- int start() // 特殊函數(shù) start() { double Price = Bid; // 局部變量 Count++; // Tick 計數(shù)器 Alert("New tick ",Count," Price = ",Price);// 警報 return; // 退出 start() } //-------------------------------------------------------------------- 3.1 控制權(quán)在客戶終端;客戶終端等待新的即時價位的信息。當新的即時價位信息傳到客戶終端之前,start()函數(shù)不會被運行。當客戶終端接收到新的價位后,控制被傳給程式,start()函數(shù)開始運行。 3.2 double Price = Bid; // 局部變量 以下步驟被執(zhí)行: i. 局部變量 Price 被定義。這個局部變量的值將會在特殊函數(shù)start() 內(nèi)部有效。 ii. 賦值操作符被執(zhí)行。當前的Bid價位會被賦值到變量Price上。這個變量的值在新的價位進來后都會刷新一次。 3.3 下一行被執(zhí)行: Count++; 這個程序等同于 Count=Count+1; 當控制傳到這一行時,變量Count的值是0. 當Count++被執(zhí)行后,Count的值將會增加1. 所以當這一行被執(zhí)行后,Count的值將會變成1. 3.4 下一行包含Alert()函數(shù)調(diào)用: Alert("New tick ",Count," Price = ",Price);// 警報 這個函數(shù)會將所有在括號里的東西顯示出來。首先New tick將被顯示出來,然后變量Count的值(在第一次執(zhí)行的時候值為1);然后顯示Price,在顯示變量Price的值。所以最后顯示出來的東西為:New tick 1 Price = 1.2744 3.5 操作符 return; // 退出 start() 結(jié)束start()的運行退出。 3.6 控制重新回到客戶終端等待一個新的tick。 3.7 然后程序會開始不斷地重復(fù)。如果沒有人工介入,程序?qū)⒁恢边\行下去。其結(jié)果是我們將可以看到價位變化的tick歷史。
下一步將是用戶決定終止此程序然后強制把智能交易從圖表里移走。 4. 客戶端將控制轉(zhuǎn)到特殊函數(shù) deinit(): int deinit() // 特殊函數(shù) deinit() { Alert ("Function deinit() triggered at exit"); // 警報 return; // 退出 deinit() } 上面有2個操作符在函數(shù)主體里。 4.1 Alert() 將會顯示:Function deinit() triggered at deinitialization 4.2 return操作符結(jié)束特殊操作符deinit()的運行。
特殊函數(shù) deinit() 只執(zhí)行一次操作。執(zhí)行后上面的信息會顯示在警報窗口然后這個EA會從圖表窗口移走。 5. EA結(jié)束執(zhí)行。
|