昨天說完了資料型態,今天就來分享在有了基礎後,要如何輸入變數,以及變數輸入位置不同會產生的結果吧。
MQL5的輸入變數是唯一可由使用者更改的東西,包括交易設置、指標設置、停利值等,會在MT5內EA屬性對話框中的「輸入」中顯示
input double MaximumRisk = 0.02;
input double DecreaseFactor = 3;
input int MovingPeriod = 60;
input int MovingShift = 20;
input int SecondMovingPeriod = 30;
input int SecondMovingShift = 15;
產生效果如圖,其中所有數字都可更改:
若要使用列舉,需要先定義輸入變數,在使用列舉時,當用戶試圖改變輸入變數的值時,會顯示出一個包含所有列舉值的下拉清單
enum MonthOfYear
{
January,
February,
March,
april,
May,
June,
July,
August,
September,
october,
November,
December,
};
input MonthOfYear Month = January;
產生效果如圖:
本地變數是在函數內部聲明和使用的變數,它們的作用範圍僅限於包含它們的函數。與全域變數不同,本地變數只在函數執行期間存在,當函數執行完畢時,本地變數將被銷毀,不再佔用內存。
特點:
作用範圍: 本地變數的作用範圍僅限於聲明它們的函數內部。它們無法在函數之外訪問。
生命週期: 本地變數的生命週期僅限於函數的執行期間。一旦函數執行完畢,本地變數將被銷毀。
初始化: 本地變數可以在聲明時初始化,也可以在後續的程式碼中初始化。
void MyFunction()
{
int localVar = 5; // 聲明並初始化本地變數
// 在後續的程式碼中使用本地變數
int result = localVar * 2;
Print("本地變數: ", localVar);
Print("結果: ", result);
//OUTPUT:本地變數: 5
//OUTPUT:結果: 10
}
在範例中,一旦函數執行完畢,localVar 和 result 都將被銷毀。所以如果要在其他地方再使用一次函數,則需要再聲明一次localVar,也代表著可以在不同函數使用同名的本地變數。
本地變數通常用於在函數內部存儲臨時數據或執行特定任務。它們對於在函數內部管理和追蹤數據非常有用。
全域變數是可以在整個程式中訪問的變數,其作用範圍不限於特定的函數或程式碼塊。全域變數在程式開始執行時被建立,並在程式結束時銷毀,因此它們的生命週期跟隨整個程式的執行。
特點:
作用範圍: 全域變數的作用範圍包括整個程式,可以在程式的任何地方訪問和修改它們。
生命週期: 全域變數在程式開始執行時建立,並在程式結束時銷毀。它們的值在程式的多個函數呼叫之間保持不變。
初始化: 全域變數可以在聲明時初始化,也可以在後續的程式碼中初始化。
int globalVar = 10;
void MyFunction()
{
// 在函數內部使用全域變數
int result = globalVar * 2;
Print("全域變數: ", globalVar);
Print("結果: ", result);
}
int OnInit()
{
MyFunction(); // 呼叫函數
return(INIT_SUCCEEDED);
}
// 在另一個函數中修改全域變數的值
void AnotherFunction()
{
globalVar = 20;
Print("全域變數已修改為: ", globalVar);
}
//OUTPUT:全域變數: 10
//OUTPUT:結果: 20
//OUTPUT:全域變數已修改為: 20
全域變數通常用於在整個程式中共享數據,以便多個函數可以訪問和修改相同的值。但也因為它們具有全域作用範圍,可能會導致程式碼的複雜性增加和不必要的副作用。
具有持久性和作用域控制的特點。在MQL5中,靜態變數用來保持變數的值在函數呼叫之間保持不變,並且靜態變數的作用範圍僅限於定義它們的函數內部。
特點:
持久性: 靜態變數的值在函數呼叫之間保持不變,即使函數退出後再次呼叫該函數,靜態變數的值也會保持。
作用範圍: 靜態變數的作用範圍僅限於定義它們的函數內部,不能在函數外部訪問。
初始化: 靜態變數只在第一次函數呼叫時進行初始化,之後不再初始化。這可以用於存儲需要持久保留的數據,如歷史記錄或狀態信息。
void MyFunction()
{
static int count = 0; // 定義一個靜態整數變數並初始化為0
// 在每次呼叫函數時增加count的值
count++;
Print("Count: ", count);
}
// 在呼叫函數多次時,靜態變數的值會保持不變
MyFunction(); // 輸出:Count: 1
MyFunction(); // 輸出:Count: 2
MyFunction(); // 輸出:Count: 3
在範例中,count 是一個靜態變數,它在每次呼叫 MyFunction() 函數時遞增。由於它是靜態變數,它的值在函數呼叫之間保持不變,因此每次呼叫函數時,count 的值都會自動遞增。
靜態變數在MQL5中通常用於存儲需要在函數呼叫之間保持狀態的信息,例如追蹤某個條件的發生次數或存儲歷史數據,可以更有效地管理數據和狀態。
預定義變數用於存儲有關當前市場狀態、交易活動和交易帳戶的信息。以下是一些常見的MQL5預定義變數以及他們的作用: