日期和時間#
PowerLanguage 有兩個日期時間,一個是 K棒的日期時間,另一個是現在電腦的日期時間。
日期時間有兩種格式: DateTime 和 ELDate/ELTime。DateTime 和 ELDate/ELTime 格式在閱讀上並不直覺,因此 PowerLanguage 提供格式互相轉換的函數,讓 DateTime、ELDate/ELTime、字串、數值之間能互相轉換。
DateTime#
DateTime 是一個浮點數,整數代表日期,表示從 1900/1/1 起過了多少天;小數代表時間,表示從 0:00 後過了一天的多少比例。
ELDate/ELTime#
| 格式 | 說明 |
|---|
ELDate | 表示日期,YYYMMdd 格式。YYY: 從 1900 年起過了多少年。MM: 月份。dd: 幾號 |
ELTime | 表示時間,24 時制 HHmm 或 HHmmss 格式(例: 130000 = 1:00:00 PM),根據呼叫的函數決定使用哪一種。HH: 小時。mm: 分鐘。ss: 秒 |
日期和時間的函數#
K棒的日期時間#
| 函數 | 說明 |
|---|
Date | 回傳 K棒收盤的日期,以 ELDate YYYMMdd 格式表示。例: 2007/10/30 回傳 1071030,1999/04/02 回傳 990402 |
Time | 回傳 K棒收盤的時間,以 ELTime HHmm 格式表示。例: 10:15 AM 回傳 1015,3:45 PM 回傳 1545 |
Time_s | 回傳 K棒收盤的時間,以 ELTime HHmmss 格式表示。例: 10:15:25 AM 回傳 101525,3:45:00 PM 回傳 154500 |
DateTime | 回傳 K棒收盤的日期和時間,以 DateTime 格式表示。例: 2013/5/28 08:41:11.813 回傳 41422.74 |
現在電腦的日期時間#
| 函數 | 說明 |
|---|
CurrentDate | 回傳現在電腦的日期,以 ELDate YYYMMdd 格式表示。例: 2008/10/30 回傳 1081030 |
CurrentTime | 回傳現在電腦的時間,以 ELTime HHmm 格式表示。例: 10:15 AM 回傳 1015,3:45 PM 回傳 1545 |
CurrentTime_s | 回傳現在電腦的時間,以 ELTime HHmmss 格式表示。例: 10:15:25 AM 回傳 101525,3:45:00 PM 回傳 154500 |
ComputerDateTime | 回傳現在電腦的日期和時間,以 DateTime 格式表示。等同 ELDateToDateTime(CurrentDate) + ELTimeToDateTime(CurrentTime)。例: 2008/1/1 6:00 AM 回傳 39448.25000000 |
下表列出各格式之間的轉換函數:
DateTime -> ELTime#
| 函數 | 說明 |
|---|
DateTime2ELTime(DateTime) | 將 DateTime 的小數(時間部分)轉成 ELTime HHmm 回傳。例: DateTime2ELTime(39449.65625000) 回傳 1545,表示 3:45 PM |
DateTime2ELTime_s(DateTime) | 將 DateTime 的小數(時間部分)轉成 ELTime HHmmss 回傳。例: DateTime2ELTime_s(39449.646354167) 回傳 153045,表示 3:30:45 PM |
ELDate/ELTime -> DateTime#
| 函數 | 說明 |
|---|
ELDateToDateTime(YYYMMdd) | 將 ELDate YYYMMdd 轉成 DateTime 的整數(日期部分)回傳。例: ELDateToDateTime(1080101) 回傳 39448.00000000(2008/1/1) |
ELTimeToDateTime(HHmm) | 將 ELTime HHmm 轉成 DateTime 的小數(時間部分)回傳。例: ELTimeToDateTime(1015) 回傳 0.42708333(10:15 AM) |
ELTimeToDateTime_s(HHmmss) | 將 ELTime HHmmss 轉成 DateTime 的小數(時間部分)回傳。例: ELTimeToDateTime_s(101525) 回傳 0.427372685(10:15:25 AM) |
DateTime -> 字串#
| 函數 | 說明 |
|---|
DateTimeToString(DateTime) | 將 DateTime 的整數(日期部分)和小數(時間部分)轉成字串回傳。例: DateTimeToString(ComputerDateTime) 回傳現在電腦的日期和時間字串 |
DateTimeToString_ms(DateTime) | 將 DateTime 的整數(日期部分)和小數(時間部分)轉成精確到毫秒的字串回傳。例: DateTimeToString_ms(DateTime) 回傳 K棒的日期和時間字串 |
DateToString(DateTime) | 將 DateTime 的整數(日期部分)轉成字串回傳。例: DateToString(39448.25000000) 回傳 "1/1/2008" |
TimeToString(DateTime) | 將 DateTime 的小數(時間部分)轉成字串回傳。例: TimeToString(39448.75000000) 回傳 "6:00 PM" |
TimeToString_ms(DateTime) | 將 DateTime 的小數(時間部分)轉成精確到毫秒的字串回傳。例: TimeToString_ms(39448.7501) 回傳 "18:00:08.640" |
FormatDate("FormatString", DateTime) | 將 DateTime 的整數(日期部分)轉成格式化字串回傳。FormatString 格式字元見日期格式字元 |
FormatTime("FormatString", DateTime) | 將 DateTime 的小數(時間部分)轉成格式化字串回傳。FormatString 格式字元見時間格式字元 |
| 字元 | 說明 |
|---|
d | 幾號,小於 10 不補 0 |
dd | 幾號,小於 10 補 0 |
ddd | 星期幾的三字母縮寫 |
dddd | 星期幾的全名 |
M | 月份,小於 10 不補 0 |
MM | 月份,小於 10 補 0 |
MMM | 月份的三字母縮寫 |
MMMM | 月份的全名 |
y | 年份最後兩位數,小於 10 不補 0 |
yy | 年份最後兩位數,小於 10 補 0 |
yyyy | 年份四位數 |
範例:
1
2
3
4
5
6
7
8
9
10
11
| // 回傳 "Tuesday, January 22, 2008."
FormatDate("dddd, MMMM dd, yyyy.", 39469.250);
// 回傳 "1/22/8"
FormatDate("M/d/y", 39469.250);
// 回傳 "22-01-08"
FormatDate("dd-MM-yy", 39469.250);
// 回傳 "Next Tue is: Jan 22"
FormatDate("Next ddd is: MMM dd", 39469.250);
|
| 字元 | 說明 |
|---|
h | 12 時制小時,小於 10 不補 0 |
hh | 12 時制小時,小於 10 補 0 |
H | 24 時制小時,小於 10 不補 0 |
HH | 24 時制小時,小於 10 補 0 |
m | 分鐘,小於 10 不補 0 |
mm | 分鐘,小於 10 補 0 |
s | 秒,小於 10 不補 0 |
ss | 秒,小於 10 補 0 |
t | AM 或 PM 的單一字元 |
tt | AM 或 PM |
範例:
1
2
3
4
5
6
7
8
9
10
11
| // 回傳 "04:01:03 P"
FormatTime("hh:mm:ss t", 39469.6674);
// 回傳 "4 PM"
FormatTime("h tt", 39469.6674);
// 回傳 "16:01"
FormatTime("HH:mm", 39469.6674);
// 回傳 "1 MIN 3 SEC"
FormatTime("m MIN s SEC", 39469.6674);
|
字串 -> DateTime#
| 函數 | 說明 |
|---|
StringToDate("MM/dd/yy") | 將字串 "MM/dd/yy" 或 "MM/dd/yyyy" 轉成 DateTime 的整數(日期部分)回傳。MM: 月份。dd: 幾號。yy/yyyy: 年份。例: StringToDate("04/04/99") 回傳 36254.0000000(1999/4/4) |
StringToTime("hh:mm:ss tt") | 將字串 "hh:mm:ss tt" 轉成 DateTime 的小數(時間部分)回傳。hh: 12 時制小時。mm: 分鐘。ss: 秒。tt: AM 或 PM。例: StringToTime("08:00:00 AM") 回傳 0.33333333 |
StringToDateTime("MM/dd/yy hh:mm:ss tt") | 將字串 "MM/dd/yy hh:mm:ss tt" 或 "MM/dd/yyyy hh:mm:ss tt" 轉成 DateTime 回傳。例: StringToDateTime("04/04/99 04:48:00 PM") 回傳 36254.70000000(1999/4/4 4:48 PM) |
DateTime -> 數值#
| 函數 | 說明 |
|---|
YearFromDateTime(DateTime) | 回傳 DateTime 的年份數值。例: YearFromDateTime(39449.25000000) 回傳 2008 |
MonthFromDateTime(DateTime) | 回傳 DateTime 的月份數值。例: MonthFromDateTime(39600.25000000) 回傳 6(六月) |
HoursFromDateTime(DateTime) | 回傳 DateTime 的 24 時制小時數值。例: HoursFromDateTime(39449.85000000) 回傳 20(8 PM) |
MinutesFromDateTime(DateTime) | 回傳 DateTime 的分鐘數值。例: MinutesFromDateTime(39449.35000000) 回傳 24 |
SecondsFromDateTime(DateTime) | 回傳 DateTime 的秒數數值。例: SecondsFromDateTime(39449.35440000) 回傳 20 |
MillisecondsFromDateTime(DateTime) | 回傳 DateTime 的毫秒數值 |
數值 -> DateTime#
| 函數 | 說明 |
|---|
EncodeDate(yy, MM, dd) | 將數值 yy(年份最後兩位)、MM(月份)、dd(幾號)轉成 DateTime 回傳。例: EncodeDate(08, 01, 01) 回傳 39448.00000000(2008/1/1) |
EncodeTime(HH, mm, ss, mmm) | 將數值 HH(24 時制小時)、mm(分鐘)、ss(秒)、mmm(毫秒)轉成 DateTime 回傳。例: EncodeTime(16, 29, 55, 500) 回傳 0.6874479167(16:29:55.500) |
在指定的日期範圍 04/08/2022~04/09/2022 內,印出 debug 用的 log(Open、High、Low、Close)到檔案。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| Inputs: startDateOfLog("04/08/2022");
Inputs: endDateOfLog("04/09/2022");
Variables:
dateStr(""), timeStr(""),
kBarTimeStr(""), kBarDateStr(""),
formatStr(""), filePathStr("");
Variables: isEnableLogOfDate(false);
// 日期和時間格式化
dateStr = FormatDate("yyyy-MM-dd", ComputerDateTime);
timeStr = FormatTime("HH:mm:ss", ComputerDateTime);
kBarTimeStr = FormatTime("HH:mm:ss", DateTime);
kBarDateStr = FormatDate("yyyy-MM-dd", DateTime);
formatStr = "Computer Date Time: " + dateStr + " " + timeStr
+ ", K-bar Date Time: " + kBarDateStr + " " + kBarTimeStr;
// 檔案路徑
filePathStr = "D:\MCLog\" + GetSymbolName + "_" + GetStrategyName + ".log";
// 檢查日期是否在範圍內
isEnableLogOfDate = StringToDate(startDateOfLog) <= DateTime
and DateTime <= StringToDate(endDateOfLog);
// 在指定日期範圍內印出 debug log 到檔案
If isEnableLogOfDate Then Begin
Print(File(filePathStr), formatStr, "** Start Log **");
Print(File(filePathStr), ", open: ", Open, ", high: ", High, ", low: ", Low, ", close: ", Close);
End;
|
Reference#
https://www.multicharts.com/trading-software/index.php?title=Category:Date_and_Time_Routines
https://www.multicharts.com/trading-software/index.php?title=Category:Data_Information/General
https://www.multicharts.com/trading-software/index.php?title=Outputting_Dates_in_EasyLanguage
https://www.multicharts.com/trading-software/index.php?title=DateTimeToString_Ms