本文首發於微信公眾號:MQL5策略編程技術服務,文/王廣利。文章內容屬作者個人觀點,不代表和訊網立場。投資者據此操作,風險請自擔。
這段時間總會有人問我,EA到底怎麼運用,特別是EA的外部參數到底代表什麼意思。說實話,僅僅去看變量的名字,你還真沒有辦法確認EA的外部參數到底是什麼意思,因為不同的策略開發人員有相同的定義習慣,假如僅僅從變量名去確認變量的用法,那麼很多時候就會出問題。
那麼怎麼去確定變量的運用?最直接的方式就是需要找到變量名在函數中的調用的位置,這個才是真正的理解與確定。
當然,我們這裡講解變量,那就不得不說變量的定義,這裡先引用官方的定義吧。
可變量必須在聲明之前使用。可變量必須擁有特殊的辨認名。相關可變量的定義描述會顯示。
基本類型如下:
字符型,短整型,整型,長整型,無符號字符型,無符號短整型,無字符整型,無符號長整型-整數;
顏色-代表RGB-顏色的整數;
日期時間-日期和時間,自1970年1月1日起無符號整數包括秒數;
布爾數據-布爾值的true和 false;
雙精度數字-帶有浮點的雙精度數字;
浮點型-帶有浮點的單精度數字;
字串符數據-特殊字符串。
其實看了這官方的解釋,好像意義不大,除非你有一定的基礎,那麼我們就距離來說明吧。我們這裡還是舉例MT5自帶的一個交易策略MQL5\Experts\Examples\Moving Average 這個交易策略吧。
我們首先加載Moving Averages.mq5這個交易策略,我們打開導航器,在EA交易裡面找到Moving Averages這個交易策略:
然後雙擊,就會出現下面的對話框:
我們如果通過編譯器打開 Moving Averages.mq5文件,我們可以看到一行一行的原始碼,首先我們可以看到下面的變量如下:
input double MaximumRisk= 0.02; // Maximum Risk in percentage
input double DecreaseFactor = 3; // Descrease factor
input int MovingPeriod = 12; // Moving Average period
input int MovingShift = 6; // Moving Average shift
如果我們用這幾行代碼與對話框輸入變量來比較,我們很快發現對話框的輸入變量卻是我們代碼定義的變量的就是,也就是「//」後面的解釋,這與老版MQL4是完全不一樣的。所以,我們如果僅僅通過對話框輸入變量來推導外部變量的具體運用,那就會變得極其不可理解。
那麼再回歸到原始碼,我們發下,凡是在對話框輸入的變量前,都會有一個input ,在這裡我們可以確認input 代表的外部輸入變量,也就是可以通過外部輸入來改變的。那麼這個外部輸入變量,如果我們在調用的過程當中,原始的賦值會不會改變呢?比如說我們MaximumRisk= 0.02;這個值能不能進行在主文件裡面進行重新賦值呢?那麼我們這裡可以通過列印來進行檢驗。比如:我們可以在主題函數
void OnTick(void)
{
//---
if(SelectPosition())
CheckForClose();
else
CheckForOpen();
//---
}
裡面對MaximumRisk重新賦值看看,賦值如下
而我們在編譯的時候,很快就會發現出現錯誤,說明這個外部變量已經不能重新賦值了。這個也檢驗了我們的初始推斷,外部輸入變量是不能在運行過程當中來再次修改其值的。
當然,MQL5裡面不僅僅有外部輸入變量,還會有局部變量,局部變量又會有函數內部的局部變量,而函數內部的局部變量其他函數是不能調用的。
因次,學習變量,也是你在使用EA之前最基本的內容,無論你會不會編寫EA,只要你運用EA,就需要真正的懂得變量的基礎知識,你才不會那麼盲目。
在這裡我還是要強調一下,EA只是工具,絕不是我們說的聖杯。真正的聖杯,則是EA+正確的運用。
(責任編輯:何美鈴 HF117)